如何在 tkinter 中为 class 创建多个制表符
How to create multiply tabs for class in tkinter
我正在尝试为 tkinter 中的每个 class 创建选项卡。但是遇到了一个问题就是他们互相趴着。
我已经尝试为 Notebook 创建一个新的 class,但结果是一样的。现在我停在这个变体上。
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()
所以,正如我所说,他们躺在彼此身上。程序启动时甚至不显示选项卡。
更新:将 master
更改为 self
后。
当创建从 Frame
继承的 class 时,为了保存其他小部件,一个基本规则是所有子小部件都应该是 class 的子部件。
在你的情况下,你没有这样做。您正在创建笔记本,向笔记本添加框架,但每个框架内的小部件都被设置为根 window 的子级。它们需要是帧的子帧(例如: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
中
我正在尝试为 tkinter 中的每个 class 创建选项卡。但是遇到了一个问题就是他们互相趴着。
我已经尝试为 Notebook 创建一个新的 class,但结果是一样的。现在我停在这个变体上。
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()
所以,正如我所说,他们躺在彼此身上。程序启动时甚至不显示选项卡。
更新:将 master
更改为 self
后。
当创建从 Frame
继承的 class 时,为了保存其他小部件,一个基本规则是所有子小部件都应该是 class 的子部件。
在你的情况下,你没有这样做。您正在创建笔记本,向笔记本添加框架,但每个框架内的小部件都被设置为根 window 的子级。它们需要是帧的子帧(例如: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