#python #button #tkinter #command #tk
#python #кнопка #tkinter #команда #tk-toolkit
Вопрос:
В настоящее время я работаю над игрой в змею, но сначала я хочу, чтобы появилось окно настроек. для этого я использовал tkinter. В небольших проектах я просто записал весь код в функцию pressButton, но сейчас я хочу иметь код, отличный от spagetti, поэтому я не собираюсь с этим. Проблема в том, что я понятия не имею, как получить введенные значения в скобках ввода в мой основной код в качестве глобальных переменных из функции pressButton и функции settingsWin . Проблема в том, что я использую функцию как команду для кнопки, поэтому я не могу использовать «return». Можете ли вы изменить глобальные переменные в основном коде непосредственно изнутри функции? Если да, то как? Или есть другой способ решить эту проблему? Мой код:
def settingsWin():
def pressButton():
len = entryLen.get()
wid = entryWid.get()
speed = entrySpeed.get()
print(len wid speed)
SettingsWin.destroy()
return len
SettingsWin = Tk()
SettingsWin.geometry("600x600")
SettingsWin.title("Settings")
label1 = Label(SettingsWin, text="playing field [tiles]")
label1.pack()
entryLen = Entry(SettingsWin, bd=2, width=20)
entryLen.pack()
label2 = Label(SettingsWin, text="X")
label2.pack()
entryWid = Entry(SettingsWin, bd=2, width=20)
entryWid.pack()
labelblanc = Label(SettingsWin, text="")
labelblanc.pack()
label3 = Label(SettingsWin, text="Speed [ms per tick]")
label3.pack()
entrySpeed = Entry(SettingsWin, bd=2, width="20")
entrySpeed.pack()
okButton = Button(SettingsWin, text="OK", command=pressButton)
okButton.pack()
SettingsWin.mainloop()
len = "len"
wid = "wid"
speed = "speed"
Комментарии:
1. Вы можете ответить на этот вопрос с помощью стандартной документации python. docs.python.org/3/faq /… и docs.python.org/3/reference/simple_stmts.html#global
2. вам просто нужно определить переменную как
global x = 1
, и вы можете изменить ее внутри функции какglobal x=3
3. Что плохого в том, чтобы сказать
global len, wid, speed
внутри функцииpresssButton()
?
Ответ №1:
Часто бывает признаком запаха кода требовать, чтобы функция изменяла переменные в областях вне функции (за исключением, возможно, случаев замыкания, которые весьма полезны), это можно сделать с помощью global
ключевого слова:
greeting = "Hello world!"
def greet():
global greeting
greeting = "Goodbye world!"
print(greeting)
greet()
print(greeting)
Объявляя переменную greeting
глобальной области видимости, изменение переменной в определении функции позволяет функции влиять на глобальную переменную.
Если вы работаете во вложенных подразделениях, nonlocal
ключевое слово обеспечит доступ во внутреннем подразделении к переменной во внешнем подразделении. Он работает аналогично global
, за исключением того, что он предназначен для более широкой лексической области, а не для глобальной области.
Комментарии:
1. Спасибо, это было то, что я искал 🙂