gpt4 book ai didi

python - 将 Tkinter GUI 分成单独的模块 (Python 3.4)

转载 作者:太空宇宙 更新时间:2023-11-03 15:01:23 24 4
gpt4 key购买 nike

我在 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

因此,当出现问题时,修复起来就像一场噩梦,而且我找不到太多支持。

最佳答案

使用面向对象技术是将代码划分为模块的正确方法,但这不是唯一的方法。我认为不上课会多做一点工作,但没有什么可以阻止你不上课就做你想做的事。

您需要改变编码方式的主要事情是停止依赖全局变量。这意味着您需要将信息从主程序传递给函数,并且函数需要将信息返回给主程序。

示例

尽管我做了一些小的更改,但我已尽力使此示例中的代码尽可能接近原始代码。

首先,创建一个名为“widgets.py”的文件,其中包含以下内容:

import tkinter as tk

def create_main_nav_buttons(parent, grid_box_size, items):
temp_count = 0
widgets = []
for item in items:
main_nav = tk.Canvas(parent, 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
widgets.append(main_nav)

return widgets

def create_navigation2(x):
print("create_navigation2...", x)

接下来,在名为“main.py”的文件中创建主程序:

import tkinter as tk
from widgets import create_main_nav_buttons

root = tk.Tk()
Nav_Frame_Top = tk.Frame(root)
Nav_Frame_Top.pack(side="top", fill="x")

dynamic_info_nav_items = []
strat_folder_list = ["one", "two", "three"]
grid_box_size=10

widgets = create_main_nav_buttons(Nav_Frame_Top, grid_box_size, strat_folder_list)
dynamic_info_nav_items += widgets

root.mainloop()

请注意,父项和您期望位于全局命名空间中的其他项被传递给函数,然后函数返回主程序可以使用的值。

本质上,您是在函数和主程序之间创建契约。契约(Contract)是“你告诉我构建小部件所需的信息,我将创建小部件并将它们以列表形式返回给你”。

关于python - 将 Tkinter GUI 分成单独的模块 (Python 3.4),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45066662/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com