Есть несколько вещей, препятствующих работе кода в вашем вопросе.
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 - Руководство по стилю для кода Python , в частности, разделам о Соглашениях по именованию и Макет кода .Это облегчит работу с вашим кодом и его поддержку, а также его будет легче читать другим.
Аналогично, принятый ответ на вопрос Лучший способ структурировать приложение tkinter? имеетнекоторые отличные предложения от эксперта tkinter о наилучшем способе структурирования приложений tkinter, которые, если бы вы следовали им, исключали необходимость использования большинства глобальных переменных (которые многие считают плохой практикой программирования).