首页 > 解决方案 > 直接使用 grid() 或 pack() 而不创建变量是不是很糟糕?

问题描述

我目前正在学习 Tkinter,我想知道对于除了将它们放在屏幕上之外我没有使用的小部件,执行以下操作是否是一个坏习惯。

Label(root, text="Hello World!").grid(row=0, column=0)

或者最好使用这样的两行并创建一个变量:

myLabel = Label(root, text="Hello World!")
myLabel.grid(row=0, column=0)

标签: pythontkinter

解决方案


这本身还不错(假设您以后不需要参考小部件),但我个人认为最好始终使用变量。根据我的经验,随着应用程序的发展,一组小部件的布局将发生变化,而不是小部件本身的创建。我认为将小部件创建组合在一起,然后将布局命令组合在一起很聪明。它使布局更容易从代码中可视化,并使布局调试更容易。

另外,当然,如果您稍后需要访问变量,那么您必须使用变量。

因此,虽然使用单个小部件根本不重要,但当您有多个小部件时,它可能很重要。鉴于您有时必须使用变量,我认为最好始终保持一致并始终使用变量。

例如,考虑以下代码:

label1 = tk.Label(root, text="First Name:")
label2 = tk.Label(root, text="Last Name:")
entry1 = tk.Entry(root)
entry2 = tk.Entry(root)

label1.grid(row=0, column=0, sticky="e")
entry1.grid(row=0, column=1, sticky="ew")
label2.grid(row=1, column=0, sticky="e")
entry2.grid(row=1, column=1, sticky="ew")

我个人认为上面的内容比以下两个示例中的任何一个都更具可读性。

内联调用grid

tk.Label(root, text="First Name:").grid(row=0, column=0, sticky="e")
tk.Label(root, text="Last Name:").grid(row=1, column=0, sticky="e")
tk.Entry(root).grid(row=0, column=1, sticky="ew")
tk.Entry(root).grid(row=1, column=1, sticky="ew")

grid与小部件创建交错调用:

label1 = tk.Label(root, text="First Name:")
label1.grid(row=0, column=0, sticky="e")
label2 = tk.Label(root, text="Last Name:")
label2.grid(row=1, column=0, sticky="e")
entry1 = tk.Entry(root)
entry1.grid(row=0, column=1, sticky="ew")
entry2 = tk.Entry(root)
entry2.grid(row=1, column=1, sticky="ew")        

推荐阅读