【发布时间】:2017-06-25 10:10:03
【问题描述】:
我编写了一个 tkinter 应用程序,它在两个框架上显示了小部件,类似于这个示例,它成功运行。
from tkinter import *
from tkinter import ttk
root = Tk()
root.title("Example")
notebook = ttk.Notebook(root)
frame1 = ttk.Frame(notebook)
frame2 = ttk.Frame(notebook)
notebook.add(frame1, text="Frame One")
notebook.add(frame2, text="Frame Two")
notebook.pack()
#(The labels are examples, but the rest of the code is identical in structure).
labelA = ttk.Label(frame1, text = "This is on Frame One")
labelA.grid(column=1, row=1)
labelB = ttk.Label(frame2, text = "This is on Frame Two")
labelB.grid(column=1, row=1)
root.mainloop()
我决定我应该尝试重组程序以使用一个类(我承认我不是很熟悉)。但是,我不确定我应该怎么做才能让小部件出现在不同的框架上(其他一切正常)。例如,以下代码会产生“TypeError: init() 采用 1 到 2 个位置参数,但给出了 3 个”。所以大概我需要用一个额外的参数进行初始化,但我不确定笔记本将如何工作,或者这是否是我应该采取的方法。 (如果从标签中删除“frame1”和“frame2”参数,程序将运行,但是,它将在两个框架上显示相同的内容)。
from tkinter import *
from tkinter import ttk
class MainApplication(ttk.Frame):
def __init__(self, parent):
ttk.Frame.__init__(self, parent)
self.labelA = ttk.Label(self, frame1, text = "This is on Frame One")
self.labelA.grid(column=1, row=1)
self.labelB = ttk.Label(self, frame2, text = "This is on Frame Two")
self.labelB.grid(column=1, row=1)
root = Tk()
root.title("Example")
notebook = ttk.Notebook(root)
frame1 = ttk.Frame(notebook)
frame2 = ttk.Frame(notebook)
notebook.add(frame1, text="Frame One")
notebook.add(frame2, text="Frame Two")
notebook.pack()
MainApplication(root).pack()
root.mainloop()
我对解决方案感兴趣,但我也有兴趣了解该类与独立小部件相比有何不同。
【问题讨论】:
-
请提供minimal reproducible example。脱离上下文显示代码块并不是很有用。
-
@Bryan Oakley 修改
-
我刚刚观看了一个 youtube 视频,我认为它准确地描述了您正在寻找的内容。这是系列link 的链接,我认为它在前几个视频中有所介绍。这家伙创建了一个类,它本质上将为您的多个窗口创建多个选项卡。
-
@Joe 这似乎可行,尽管它相对复杂且不使用笔记本。当然应该有一种简单的方法将我的第一个示例转换为一个类。
标签: python python-3.x tkinter