【发布时间】:2016-03-16 10:17:09
【问题描述】:
我使用 ttk 笔记本设计了一个应用程序,并创建了三个选项卡。他们每个人的布局都截然不同且复杂,他们之间的共同功能和方法很少。
因此,代码文件变得非常难以理解,有这么多行代码专用于布局。
有一种方法可以将每个选项卡创建为单独的模块/文件/类并“导入”它们,以便更易于维护?
编辑:
我遇到的问题是如何在 Frame 子类与主应用程序之间共享属性。 解决方案只是向 Frame 子类添加第二个参数。 更具体地说,我想在两个笔记本中使用 main.py 中的“common_text”和“font”属性。 它现在可以工作了,即使你我不知道这是否是正确的解决方案。
main.py
from Tkinter import *
import ttk
import first_tab
import second_tab
class Application(object):
def __init__(self, root):
super(Application, self).__init__()
self.common_text = "This is a test"
self.font = ('courier', 10, 'bold')
self.root = root
self.notebook = ttk.Notebook(root)
self.notebook.pack(fill='both', expand = 'yes')
self.tab_1 = first_tab.tab_frame(self)
self.tab_2 = second_tab.tab_frame(self)
self.notebook.add(self.tab_1, text = "First Tab")
self.notebook.add(self.tab_2, text = "Second Tab")
root = Tk()
app = Application(root)
root.title("Utility")
root.mainloop()
first_tab.py
from Tkinter import *
import ttk
class tab_frame(Frame):
def __init__(self, relative):
Frame.__init__(self)
self.F_1_00 = Frame(self)
self.F_1_00.grid(column=0, row=0)
self.F_1_10 = Frame(self)
self.F_1_10.grid(column=0, row=1)
self.sign = Label(self.F_1_00, text = relative.common_text, pady=10)
self.sign.configure(font = relative.font)
self.sign.grid(column=0, row=0)
self.reset = Button(self.F_1_10, text = "First", width = 10)
self.reset.grid(column=2, row=3, padx = 10)
second_tab.py
from Tkinter import *
import ttk
class tab_frame(Frame):
def __init__(self, relative):
Frame.__init__(self)
self.F_2_00 = Frame(self)
self.F_2_00.grid(column=0, row=0)
self.F_2_10 = Frame(self)
self.F_2_10.grid(column=0, row=1)
self.sign = Label(self.F_2_00, text = relative.common_text, pady=10)
self.sign.configure(font = relative.font)
self.sign.grid(column=0, row=0)
self.reset = Button(self.F_2_10, text = "Second", width = 10)
self.reset.grid(column=2, row=3, padx = 10)
【问题讨论】:
-
当然可以。每个选项卡都包含一个框架,每个框架都是一个对象。类可以放在文件中,对象可以在单独的文件中创建。这只是python代码,python代码可以拆分成任意多个文件。尝试一下,当您有更具体的问题时再回来。
-
感谢您的回答。但是,我不理解反对票。在发布我的答案之前,我不知道我看了多少本书和网站。在发帖之前,我确保没有人提出同样的问题或间接回答了一个例子。我知道你的答案:我没有发布任何代码。也许是因为我不知道从哪里开始?
-
我们都得到了难以解释的反对票。在这种情况下,很可能是因为您的问题表明您完全缺乏任何研究,并且不包含任何代码来表明您已经尝试过任何事情。如果您进行了研究,请将其作为您问题的一部分。不过,不要只说“我读了一堆书”。你需要自己尝试一些事情。您还应该添加更多细节 - - 您是否编写过 任何 分布在多个文件中的 Python 代码?您问的是编写 Python 代码的最基本部分之一。
-
我承认这个问题写得不好。
-
应该/可以取消问题吗?