Найти - Пользователи
Полная версия: tkinter, ругается на Entry.get() если дочернее окно открыто из функции
Начало » GUI » tkinter, ругается на Entry.get() если дочернее окно открыто из функции
1
Makoron
Код:
__author__ = 'Eugene'
from tkinter import *
from tkinter import ttk
def button_new_user_clicked():
    print ("Процедура создания нового пользователя")
    a = entry_fio.get()
    print(a)
def button_new_config_clicked(event):  # Создание нового пользователя
    root2 = Toplevel()
    root2.title("Создание нового пользователя")
    Label(root2, text="Фамилия и инициалы пользователя").grid(row=0, column=0)
    entry_fio = ttk.Entry(root2, width=50).grid(row=0, column=1)
    btn3 = ttk.Button(root2, text="Создать пользователя", command=button_new_user_clicked).grid(row=5, columnspan=2)
root = Tk()
btn1 = ttk.Button(root, text="Создать файл нового пользователя")
btn1.bind("<Button-1>", button_new_config_clicked)
btn1.pack(side="left", expand=TRUE)
root.mainloop()

Ругается на:
File “CUsers/AdminS/for_forum.py”, line 7, in button_new_user_clicked
a = entry_fio.get()
NameError: name ‘entry_fio’ is not defined

Как вытащить значение из поля? Всю голову сломал…
Griffon
entry_fio - локальная переменная и находится в области видимости button_new_config_clicked.
Почитайте про область видимости переменных.
Paranoia_Agent
__author__ = 'Eugene'
from tkinter import *
from tkinter import ttk
def button_new_user_clicked(entry_fio):
    print ("Процедура создания нового пользователя")
    a = entry_fio.get()
    print(a)
 
def button_new_config_clicked(event):  # Создание нового пользователя
    root2 = Toplevel()
    root2.title("Создание нового пользователя")
    Label(root2, text="Фамилия и инициалы пользователя").grid(row = 0, column = 0)
    entry_fio = ttk.Entry(root2, width = 50)
    entry_fio.grid(row = 0, column = 1)
    btn3 = ttk.Button(root2, text = "Создать пользователя", command = lambda : button_new_user_clicked(entry_fio)).grid(row = 5, columnspan = 2)
 
root = Tk()
btn1 = ttk.Button(root, text = "Создать файл нового пользователя")
btn1.bind("<Button-1>", button_new_config_clicked)
btn1.pack(side = "left", expand = TRUE)
root.mainloop()
- Старайтесь не пользоваться конструкцией вида: “from module import *”
- В вашем случае entry_fio возвратит None, нельзя в одной строке объявлять и паковать виджет.
- entry_fio, как уже сказали, - локальная переменная, она видна только в области функции button_new_config_clicked
4kpt_III
Paranoia_Agent
- В вашем случае entry_fio возвратит None, нельзя в одной строке объявлять и паковать виджет.

Почему же нельзя? Можно. Если явный доступ к нему не нужен (или хватит доступа через children или event). Просто в этом случае присваивать к переменной бессмысленно. Как Вы написали с ней будет ассоциировано None. А в остальном все абсолютно верно.

Автору топика можно еще порекомендовать почитать PEP8.
Paranoia_Agent
4kpt_III
Я не совсем правильно сформулировал свою мысль, я это и имел ввиду
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB