Skip to main content
 首页 » 编程设计

Python 3 和 Tkinter。太多的全局变量

2025年05月04日24jillzhang

我开始使用 Tkinter 库在 Python 中编写一个简单的 GUI 应用程序。 一切正常,但是,要动态更改任何小部件(例如从“登录”到“注销”的按钮等),我必须从外部在函数中获取包含小部件对象本身的变量。 我可以通过两种方式做到这一点:

  1. 将小部件作为参数传递;
  2. 使用全局变量。

一个简化的例子:

1) 作为参数传递:

def changeLabel(b): 
    b.config(text='Logout') 
 
btn1 = Button(f0,text="Login",width=15) 
btn1.grid(row=1,column=2,rowspan=1,padx=10,ipadx=10) 
changeLabel(btn1) 

2) 或者使用全局变量:

def changeLabel(): 
    global btn1 
    btn1.config(text='Logout') 
 
btn1 = Button(f0,text="Login",width=15) 
btn1.grid(row=1,column=2,rowspan=1,padx=10,ipadx=10) 
changeLabel(btn1) 

现在,我知道应该避免使用全局变量,但是将每个小部件作为参数传递给许多函数,即使在一个简单的应用程序中,也是一团糟。

那么,在运行时操作 Tkinter 小部件的最佳方式是什么?你能建议我正确的方法吗? 谢谢

请您参考如下方法:

在运行时操作 tkinter 小部件的最佳方法是将这些小部件存储为类的属性。

例如:

class Example(...): 
    def create_widgets(self): 
        ... 
        self.btn1 = Button(...) 
        ... 
    def changeLabel(self): 
        self.bt1.config(...) 

有关详细信息,请参阅 Best way to structure a tkinter application