0

我正在尝试为 tkinter 中的每个类创建选项卡。但面临一个问题,他们正在互相铺设。

我已经尝试为 Notebook 创建一个新类,但结果是一样的。现在我停在这个变种上。

from tkinter import *
from tkinter import ttk

class Application(ttk.Frame):

    def __init__(self, master):
        ttk.Frame.__init__(self, master)
        self.master = master
        self.mainframe = ttk.Frame(master, padding='10 10 15 15')
        self.mainframe.grid(column=0, row=0, sticky=N+S+W+E)
        self.connectionCheck()
        self.connectionConf()
        self.measureFrame()
        self.meas()
        self.logview()
        self.running = None
#It have other functions. But I think they not really necessary

class Mapframe(ttk.Frame):
    def __init__(self, master):
        ttk.Frame.__init__(self, master)
        self.master = master
        self.mapframe = ttk.Frame(master, padding='10 10 15 15')
        self.mapframe.grid(column=0, row=0, sticky=N + W + E + S)
        self.choosefiles()
        self.meas()

window = Tk()
notebook = ttk.Notebook(window)
tab1 = Application(notebook)
tab2 = Mapframe(notebook)
notebook.add(tab1, text='Tab1')
notebook.add(tab2, text='Tab2')
notebook.grid(row=0, column=0)
notebook.mainloop()
notebook.quit()

所以,正如我所说,它们彼此相依。当程序启动时,选项卡甚至没有显示。

更新:更改masterself.掌握自我

4

1 回答 1

0

在创建从 a 继承的类时,Frame为了保存其他小部件,一个基本规则是所有子小部件都应该是该类的子级。

在你的情况下,你没有这样做。您正在创建一个笔记本,向笔记本添加框架,但每个框架内的小部件都被设置为根窗口的子级。他们需要是框架的孩子(例如:)self

您需要在以下示例中定义self.mainframe和喜欢。self.mapframe注意使用self而不是master作为第一个参数:

self.mainframe = ttk.Frame(self, padding='10 10 15 15')
...
self.mapframe = ttk.Frame(self, padding='10 10 15 15')

唯一应该master用作小部件父级的地方是在调用ttk.Frame.__init__(self, master). 任何时候都不应该将小部件放入master

于 2019-10-06T13:52:32.190 回答