#python #function #variables #tkinter
#python #функция #переменные #tkinter
Вопрос:
Мой код использует поле ввода tkinter внутри функции для получения IP-адреса от пользователя. При нажатии кнопки переменной присваивается ip-адрес (server_ip). Эта переменная используется позже в коде для настройки соединения с сокетом. Моя проблема в том, что я не могу использовать переменную вне основной функции.
import tkinter as tk
def get_server_ip():
def retrieve_server_ip():
server_ip = ent_ip.get()
home.destroy()
return server_ip
home = tk.Tk()
home.title("Enter Server Ip Address")
home.geometry('100x75')
lbl_ip = tk.Label(home, text="Enter Server IP")
lbl_ip.pack()
ent_ip = tk.Entry(home)
ent_ip.pack()
btn_enter = tk.Button(home, text="Enter", command=retrieve_server_ip)
btn_enter.pack()
tk.mainloop()
get_server_ip()
print (server_ip)
Ответ №1:
Объявите, что переменная является глобальной, прежде чем использовать ее, вот так:
def get_server_ip():
def retrieve_server_ip():
global server_ip
server_ip = ent_ip.get()
home.destroy()
return server_ip
Ответ №2:
Вместо этого вы можете вернуть значение из функции:
import tkinter as tk
def get_server_ip():
server_ip = None
def retrieve_server_ip():
nonlocal server_ip
server_ip = ent_ip.get()
home.destroy()
home = tk.Tk()
home.title("Enter Server Ip Address")
home.geometry('100x75')
lbl_ip = tk.Label(home, text="Enter Server IP")
lbl_ip.pack()
ent_ip = tk.Entry(home)
ent_ip.pack()
btn_enter = tk.Button(home, text="Enter", command=retrieve_server_ip)
btn_enter.pack()
tk.mainloop()
return server_ip
server_ip = get_server_ip()
print (server_ip)
Комментарии:
1. Ваш код получит,
None
посколькуserver_ip
это локальная переменная внутриretrieve_server_ip()
функции. Добавитьnonlocal server_ip
внутри этой функции.2. Спасибо, что сработало. По какой-то причине я никогда не слышал о нелокальной переменной, пока вы не упомянули об этом. Не могу поверить, что я это пропустил.