Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » tkinter, ругается на Entry.get() если дочернее окно открыто из функции [RSS Feed]

#1 Апрель 27, 2015 10:14:08

Makoron
Зарегистрирован: 2015-04-27
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

tkinter, ругается на Entry.get() если дочернее окно открыто из функции

Код:

__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

Как вытащить значение из поля? Всю голову сломал…

Офлайн

#2 Апрель 27, 2015 16:34:56

Griffon
От: Ukrain, Zaporozhie
Зарегистрирован: 2009-03-04
Сообщения: 324
Репутация: +  11  -
Профиль   Отправить e-mail  

tkinter, ругается на Entry.get() если дочернее окно открыто из функции

entry_fio - локальная переменная и находится в области видимости button_new_config_clicked.
Почитайте про область видимости переменных.



Офлайн

#3 Май 2, 2015 06:14:08

Paranoia_Agent
Зарегистрирован: 2014-06-25
Сообщения: 75
Репутация: +  5  -
Профиль   Отправить e-mail  

tkinter, ругается на Entry.get() если дочернее окно открыто из функции

__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

Офлайн

#4 Май 2, 2015 11:49:32

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

tkinter, ругается на Entry.get() если дочернее окно открыто из функции

Paranoia_Agent
- В вашем случае entry_fio возвратит None, нельзя в одной строке объявлять и паковать виджет.

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

Автору топика можно еще порекомендовать почитать PEP8.

Офлайн

#5 Май 4, 2015 15:06:44

Paranoia_Agent
Зарегистрирован: 2014-06-25
Сообщения: 75
Репутация: +  5  -
Профиль   Отправить e-mail  

tkinter, ругается на Entry.get() если дочернее окно открыто из функции

4kpt_III
Я не совсем правильно сформулировал свою мысль, я это и имел ввиду

Офлайн

  • Начало
  • » GUI
  • » tkinter, ругается на Entry.get() если дочернее окно открыто из функции[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version