Я пытаюсь изменить этот скрипт в python 3.6, но у меня проблема с меткой, которая не отображается внизу. Вот код:
from tkinter import *
def sel():
global selection
if value==1:#value and var1 are in radiobutton R1
selection = "You selected the option " + str(var1.get())
elif value==2:#value and var2 are in radiobutton R2
selection = "You selected the option " + str(var2.get())
elif value==3:#value and var3 are in radiobutton R3
selection = "You selected the option " + str(var3.get())
label.config(text = selection)
root = Tk()
root.geometry('350x250')
value=IntVar()
var1 = IntVar()
var2 = IntVar()
var3 = IntVar()
R1 = Radiobutton(root, text = "Option 1", variable=var1, value=1,
command=sel)
R1.pack( anchor = W )
R2 = Radiobutton(root, text = "Option 2", variable=var2, value=2,
command=sel)
R2.pack( anchor = W )
R3 = Radiobutton(root, text = "Option 3", variable=var3, value=3,
command=sel)
R3.pack( anchor = W)
label = Label(root)
label.pack()
root.mainloop()
когда я выбираю одну из радиокнопок, обычно метка должна отображаться внизу, но не отображается внизу радиокнопки, и возникает следующая ошибка:
NameError: имя 'selection' не определено
Значение «ценности» никогда не меняется. А это означает, что функция, которую вы вызываете, никогда не придает выделению никакого значения. Поскольку выделение не имеет значения, но вы все равно его используете, вы получите ошибку nameError.
Я бы предпочел использовать лямбда в таких командах кнопок:
from tkinter import *
def sel(value):
selection = "You selected the option {}".format(value)
label.configure(text=selection)
root = Tk()
root.geometry('350x250')
selection = "StartText"
R1 = Radiobutton(root, text = "Option 1",command=lambda: sel(1))
R1.pack()
R2 = Radiobutton(root, text = "Option 2",command=lambda: sel(2))
R2.pack()
R3 = Radiobutton(root, text = "Option 3",command=lambda: sel(3))
R3.pack()
label = Label(root, text=selection)
label.pack()
root.mainloop()
Вы можете объявить
selection
в глобальном масштабе или изменитьglobal selection
наselection = ""
внутриsel()
.