我正在上课,并且被告知要避免使用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()中的代码之外,还有其他选择吗?
答案 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)