【发布时间】:2017-07-12 20:08:39
【问题描述】:
我在 Tkinter 中有一个越来越复杂的 GUI。我想把它分成一些模块,以便于管理。 如果我不使用面向对象的方法,有没有办法将我的 GUI 分成模块?
这是我想移至单独模块的一些代码的简单示例:
def create_main_nav_buttons(strat_folder_list):
global dynamic_info_nav_items
temp_count = 0
for item in strat_folder_list:
main_nav = tk.Canvas(Nav_Frame_Top, width=175, height=grid_box_size/1.5, highlightthickness=1, bg='slategray1')
main_nav.grid(row = temp_count, column = 1)
main_nav.bind("<Button-1>", lambda event, x=item: create_navigation2(x))
temp_count += 1
dynamic_info_nav_items.append(main_nav)
-旁注:
我之前使用object oriented approach 编写了一个 GUI,但这次决定不使用它,因为我没有完全理解其中的某些部分,例如:
def __init__(self, parent, *args, **kwargs):
tk.Frame.__init__(self, parent, *args, **kwargs)
self.parent = parent
因此,当出现问题时,修复是一场噩梦,我找不到太多支持。
【问题讨论】:
-
(使用这种方法,全局变量和导入也将成为一场噩梦)。即在示例代码中,您也需要导入
create_navigation2和Nav_Frame_Top -
我使用函数和变量用 tkinter 编写了一个 600 行的 GUI,它工作得很好,但是我最终将它移到了一个类中,这样我就可以避免使用全局变量。您可能只想对类使用 OOP 方法,这样您就可以使用类属性来避免全局变量。
-
__init__语句你看不懂怎么办?如果您阅读了上面的文档,这并不难弄清楚。 -
不仅如此。它如何访问不同的功能。例如,我有一个按钮,我希望它在单击时激活一个功能。它不起作用,因为: AttributeError: object has no attribute 'parent' 我不知道 WTF 是错误的。通过反复试验,有时会使用 self.parent.main 让它工作。或 self.main 或 self.. 但后来又遇到了另一个对我来说没有意义的问题。当我想发布一个问题的简化版本时,我不知道要删除什么以及包含什么。太糟糕了,我真的很想使用课程,但不知道当事情变糟时如何获得帮助。
标签: python python-3.x user-interface tkinter