使用Tkinter的Python中Globals的替代方法是什么

时间:2019-03-30 21:55:46

标签: python tkinter globals

我正在上课,并且被告知要避免使用Python和Tkinter进行全局声明。我还不想给我的学生上课

我知道我可以在子例程中创建所有输入框和标签,并且我的代码可以工作,但这只是在教另一种不良做法

from tkinter import *

def print_name():
    print(entry_location.get())

def main():
    global main_window,entry_location
    main_window =Tk()
    Button(main_window, text="Print Name",command=print_name) .pack()
    entry_location = Entry(main_window)
    entry_location.pack()
    main_window.mainloop()

main()

这适用于全局语句,但是除了从子例程中删除main()中的代码之外,还有其他选择吗?

2 个答案:

答案 0 :(得分:0)

在您的示例中,可以通过在按钮上注册一个lambda函数来消除全局变量。这个lambda函数收集条目中的te值,并将其作为参数传递给 {% load static %} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{% block title %} {% endblock %}</title> <!-- Leaflet Info goes here --> {% block leaflet %}{% endblock %} </head> <body> <div class="content"> {% block content %}{% endblock %} </div>

print_name

注意:

这回答了您的示例的特殊情况;这不是完全消除全局变量的通用解决方案。替代方法可能是将全局所需的变量放在字典或列表中,从而允许在局部空间中对其进行修改,但最后,它可能比使用适当的类更复杂。
正如@AndrasDeak所建议的那样,最好避免导入星星。

答案 1 :(得分:-2)

如phydeaux所说,您可以简单地将变量作为参数传递来实现py。

完整的修订代码如下所示:

from tkinter import *

def print_name(entry_location):
    print(entry_location.get())

def main(main_window, entry_location):
    main_window =Tk()
    Button(main_window, text="Print Name",command=print_name) .pack()
    entry_location = Entry(main_window)
    entry_location.pack()
    main_window.mainloop()

main(main_window, entry_location)