Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python3和Tkinter。全局变量太多_Python_Python 3.x_Tkinter - Fatal编程技术网

Python3和Tkinter。全局变量太多

Python3和Tkinter。全局变量太多,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,我开始使用Tkinter库用Python编写一个简单的GUI应用程序。 一切正常,但要动态更改任何小部件(例如,按钮从“登录”更改为“注销”,等等),我必须从外部获取函数中包含小部件对象本身的变量。 我可以通过两种方式做到这一点: 将小部件作为参数传递 使用全局变量 一个简化的例子: 1) 作为参数传递: def changeLabel(b): b.config(text='Logout') btn1 = Button(f0,text="Login",width=15) btn1.gr

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

  • 将小部件作为参数传递
  • 使用全局变量
  • 一个简化的例子:

    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(...)
    

    有关更多信息,请参见

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

    例如:

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

    有关更多信息,请参见

    难道您就不能完全不使用
    changelab
    功能,而直接使用
    btn1.config(text=“Logout”)
    inline吗?顺便说一句,在方法2中不需要
    global
    语句,因为您没有为
    btn1
    分配任何内容。第三个选项是使用类,其中小部件是类的一个属性。我的示例是,在我的应用程序中,我需要:-隐藏一个按钮并显示另一个按钮-每次单击都更改文本-隐藏/显示帧-等等…@Kevin:我认为调用函数是一种最佳做法。这样的内联代码使得程序随着时间的推移更难维护。顺便说一句,您已经将130多个名称导入到全局名称空间中,因为您从tkinter import*中导入了
    。最好是将tkinter作为tk导入
    。难道您就不能完全不使用
    changeLabel
    函数,而是执行
    btn1.config(text=“Logout”)
    内联操作吗?顺便说一句,在方法2中不需要
    global
    语句,因为您没有为
    btn1
    分配任何内容。第三个选项是使用类,其中小部件是类的一个属性。我的示例是,在我的应用程序中,我需要:-隐藏一个按钮并显示另一个按钮-每次单击都更改文本-隐藏/显示帧-等等…@Kevin:我认为调用函数是一种最佳做法。这样的内联代码使得程序随着时间的推移更难维护。顺便说一句,您已经将130多个名称导入到全局名称空间中,因为您从tkinter import*
    中导入了
    。最好将tkinter作为tk导入