Python 3和Tkinter。全局变量太多

时间:2016-10-31 14:58:59

标签: python python-3.x tkinter

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

  1. 将小部件作为参数传递;
  2. 使用全局变量。
  3. 简化示例:

    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小部件的最佳方法是什么?你能用正确的方法建议我吗? 谢谢

1 个答案:

答案 0 :(得分:4)

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

例如:

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

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