我试图根据观察者信息放置一个变量。然后,这个变量我希望在治疗中使用它,而不是显示它。
#coding:utf-8
import tkinter
app = tkinter.Tk()
def CountryChoice(*args):
if observer.get() == 0:
Country = "France"
if observer.get():
Country = "United Kingdom"
observer = tkinter.StringVar()
observer.trace("w", CountryChoice)
FranceRadio = tkinter.Radiobutton(app, text="France", value=0, variable=observer)
UKRadio = tkinter.Radiobutton(app, text="UK", value=1, variable=observer)
FranceRadio .grid(row=0, column=0)
UKRadio .grid(row=0, column=1)
#def treaitement():
#i would like to reuse the variable Country here but I can not get it.
print(Country) #==> NameError: name 'Country' is not defined
app.mainloop()
目标是当用户将鼠标放在按钮上时检索Country
变量。下一个目标是添加一个启动按钮,该按钮将启动取决于单选按钮选择的过程。但是我无法获取Country
变量。
答案 0 :(得分:2)
首先,您将国家/地区变量视为全局变量,但事实并非如此。同样,在主循环之前也没有定义它。
def CountryChoice(*args):
global Country
obs = observer.get()
if int(obs) == 0:
Country = "France"
if int(obs) == 1:
Country = "United Kingdom"
这是一个开始。现在,尽管如此,您才可以要求打印国家(地区)。我建议您不要将“国家/地区”声明为全局变量,而只需从CountryChoice
函数启动函数
喜欢
if int(obs) == 1:
someFunction("United Kingdom")
答案 1 :(得分:1)
有几件事使问题中的代码无法正常工作。
发生NameError
是因为在执行Country
调用时不存在全局变量print(Country)
。可以通过简单地预先定义变量来解决此问题-可能在脚本开头附近。
与此问题有关的一个事实是,在CountryChoice()
函数中,Country
被视为局部变量,因此在此处设置其值不会影响具有相同名称的全局变量。可以通过在函数开始时将变量声明为global
来解决此问题。
最后,当使用Radiobutton
小部件时,value
选项的类型应与所使用的tkinter变量的类型匹配。在这种情况下,值是整数,因此我将observer
的变量类型从tk.StringVar
更改为tk.IntVar
。
我已经进行了这些更改,并在treatment()
函数的末尾添加了对CountryChoice()
函数的调用,以在每次调用时打印当前值。
#coding:utf-8
import tkinter as tk
app = tk.Tk()
Country = None # Declare global variable.
def CountryChoice(*args):
global Country
if observer.get() == 0:
Country = "France"
elif observer.get() == 1:
Country = "United Kingdom"
treatment() # Use current value of Country.
observer = tk.IntVar() # Use IntVar since Radiobutton values are integers.
observer.trace("w", CountryChoice)
FranceRadio = tk.Radiobutton(app, text="France", variable=observer, value=0)
UKRadio = tk.Radiobutton(app, text="UK", variable=observer, value=1)
FranceRadio.grid(row=0, column=0)
UKRadio.grid(row=0, column=1)
def treatment():
# Reuse the variable Country.
print(Country)
app.mainloop()
最后,我想提一些建议。我强烈,建议您阅读并开始遵循PEP 8 - Style Guide for Python Code建议,尤其是关于Naming Conventions和Code Layout。这将使您的代码更易于使用和维护,也易于他人阅读。
与之类似,问题Best way to structure a tkinter application?的公认答案为tkinter专家提供了一些极好的建议,这些建议涉及构造tkinter应用程序的最佳方法,如果您遵循这些最佳方法,则无需使用大多数全局变量(被许多人认为是不好的编程习惯。