Почему распечатка e_name.get () работает, а печать присвоения переменной этому же .get () - нет? - PullRequest
0 голосов
/ 27 февраля 2020

Я пытаюсь получить имя от пользователя с функцией Entry () из Tkinter, а затем назначить его переменной Name, чтобы я мог использовать его позже. Чтобы проверить, работает ли назначение, я вызываю функцию ready, которая делает Label с моей переменной. Когда я использую 'e_name.get ()' в 'command =', это работает, но когда я использую 'name', это не так. Я думаю, что я запутался в порядке строк кода, но я не уверен.

Вот код python:

from tkinter import *

root = Tk()

e_name = Entry(root, width=50)
e_name.pack()
name = e_name.get()

def ready():
    test = Label(root, text= name)      #and this works >>> test = Label(root, text= e_name.get()) 
    test.pack()

ready_button = Button(root, text="Next", command=ready)
ready_button.pack()

root.mainloop()

1 Ответ

0 голосов
/ 27 февраля 2020

Объявите имя как глобальное для доступа к нему вне функции ready ():

1) Инициализируйте name = '' перед def ready ()

2) Добавьте глобальное имя в качестве первой строки в ready ()

3) Добавить новую кнопку «Получить имя»

4) Добавить новую метку под кнопкой «Получить имя», чтобы отобразить глобальную переменную имени после нажатия кнопки «Получить имя»

5) Добавьте функцию get_name (), которая использует глобальное имя для настройки новой метки с последним значением, сохраненным функцией ready ().

Это не красиво, но этот рабочий код демонстрирует, как использовать имя вне готовой функции благодаря глобальной. Проверьте это, отредактировав значение записи, нажав кнопку «Далее», а затем кнопку «Получить имя». Клики Get Name изменят метку непосредственно под ней, чтобы отразить последнее значение, сохраненное в глобальном имени функцией ready ().

Если вы отредактируете значение записи и нажмете кнопку «Получить имя», оно не будет отображать новое значение (оно будет продолжать показывать предыдущее значение) в новой метке, пока вы не нажмете кнопку «Далее», потому что именно там происходит глобальное изменение. Имя переменной изменено. Я думаю, что это поведение, которое вы хотите:

Вот полный рабочий код:

from tkinter import *

root = Tk()

e_name = Entry(root, width=50)
e_name.pack()

name = ''

def ready():
    global name
    name = e_name.get()
    test = Label(root, text= name)      #and this works >>> test = Label(root, text= e_name.get()) 
    test.pack()

def get_name():
    global name
    test2.configure(text= name)

ready_button = Button(root, text="Next", command=ready)
ready_button.pack()

name_button = Button(root, text="Get Name", command=get_name)
name_button.pack()

test2 = Label(root)
test2.pack()

root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...