#python-3.x #function #tkinter
#python-3.x #функция #tkinter
Вопрос:
У меня есть следующий код (он частично на голландском языке, но я не думаю, что это будет проблемой):
from tkinter import *
root = Tk()
woorden_en = ["mouse", "armadillo", "caterpillar", "buffalo", "dragonfly", "eel", "monkey", "lark", "manatee", "squid"]
woorden_nl = ["muis", "gordeldier", "rups", "buffel", "libelle", "paling", "aap", "leeuwerik", "zeekoe", "inktvis"]
nummer = IntVar()
nlWoord = StringVar()
enWoord = StringVar()
goedfout = StringVar()
def vorige():
nummer -= 1
def volgende():
nummer = 1
def controleer():
print("Correct!")
secondGrid = Frame(root)
secondGrid.grid(row = 2, column = 1, columnspan = 2)
labelVertaling = Label(root, text="vertaling")
textVertaling = Entry(root, width=30, textvariable = nlWoord)
runVorige = Button(secondGrid, text="vorige", command = vorige)
runVolgende = Button(secondGrid, text="volgende", command = volgende)
runControleer = Button(secondGrid, text="controleer", command = controleer)
labelWoord = Label(root, text="woord")
labelWoordEn = Label(root, textvariable = enWoord)
labelNo = Label(root, textvariable = nummer)
Correct = Label(root, textvariable = goedfout)
Correct.grid(row = 2, column = 0)
labelNo.grid(row = 0, column = 0)
labelWoord.grid(row = 0, column = 1)
labelWoordEn.grid(row = 1, column = 1)
labelVertaling.grid(row = 0, column = 2)
textVertaling.grid(row = 1, column = 2)
runVorige.grid(row = 0, column = 0, sticky = "W")
runVolgende.grid(row = 0, column = 1, sticky = "W")
runControleer.grid(row = 0, column = 2, sticky = "W")
nummer.set(1)
enWoord.set(woorden_en[0])
root.mainloop()
Начальное значение ‘nummer’ равно 1, как указано в 3-й по последнюю строку. Это значение необходимо изменить либо на -1, либо на 1 при нажатии кнопок ‘vorige’ (предыдущая) или ‘volgende’ (следующая). Текущий код в функциях вызывает у меня ошибки. По-видимому, мне нужно использовать функции set / get, но я не могу понять, как заставить это работать. Любой ввод или помощь будут оценены.
Ответ №1:
Просто измените свою функцию на:
def vorige():
nummer_val = nummer.get()
nummer_val -= 1
nummer.set(nummer_val)
def volgende():
nummer_val = nummer.get()
nummer_val = 1
nummer.set(nummer_val)
Это потому nummer
, что это IntVar()
и вы должны получить значение переменной с помощью get()
метода. После этого вы должны присвоить ее переменной, а затем уменьшить / увеличить ее значение на 1. Первая ошибка, которую вы получили, заключалась в том, что nummer
она не была глобализирована внутри функции, но это был не тот подход, который вы должны были использовать, в любом случае это должно исправить ваши ошибки.
Комментарии:
1. или вы можете сделать это без использования вспомогательной переменной:
nummer.set(nummer.get() 1)
ect.2. @FlavioMoraes Конечно, просто хотел упростить понимание