Функция get Tkinter Entry ничего не возвращает

Я пытаюсь использовать виджет Entry, чтобы получить данные пользователя, а затем распечатать их. Почему функция get Tkinter Entry ничего не возвращает? Это не " не помогите мне.

Это мой код

message = ''
    # start_chatting function
    def start_chatting ():
        global message
        master2 = tk.Tk()
        master2.geometry("1280x720")
        master2.title("Messenger")
        label = tk.Label(master2, text = "Messenger!!!",bg = '#1e00ff',fg ='yellow',width = 35, height = 5).place(x = 500, y = 0)
        username_label = tk.Label(master2,text = usernames[position_counter],bg = '#91806d',fg ='white',width = 10, height = 2).place(x = 0, y = 100)
        v = StringVar()
        L1 = Label(master2, text = "Type your message : ").place(x=0, y = 680)
        e = Entry(master2,textvariable = v)
        e.insert(END, '')
        e.pack()
        e.place(x = 115, y = 680)
        submit_button = Button(master2,text = "Submit",command = submit_f).place(x = 200, y = 680)
        message = message+ v.get()
        master2.mainloop()

#submit_f function  
def submit_f ():
    global message
    print(message)

Имейте в виду, что это часть моего кода, а не все.
Заранее спасибо!


person Nikos Allamanis    schedule 24.12.2019    source источник
comment
e.get() - это одно, v.get() видимо другой зверь. В вашем коде вы вызываете метод StringVar get, а не Entry   -  person ForceBru    schedule 24.12.2019
comment
Я попробовал e.get (), но получил тот же результат.   -  person Nikos Allamanis    schedule 24.12.2019
comment
Что ж, если единственный код, который пытается получить значение, - это message = message+ v.get(), тогда он будет выполнен даже до появления графического интерфейса, так что у вас даже не будет возможности ввести что-либо. Ваш submit_f должен get извлекать данные из Entry каждый раз, когда вы нажимаете кнопку   -  person ForceBru    schedule 24.12.2019
comment
Отступ в коде выглядит нарушенным.   -  person Bryan Oakley    schedule 24.12.2019


Ответы (1)


Функция ничего не печатает, потому что вы изменили значение message в текущей функции, в которой определено поле ввода.

Итак, когда вы пишете v.get(), он обычно возвращает пустой текст. Переменная message должна вызываться каждый раз при нажатии кнопки submit. Следовательно, переменную message следует изменить внутри функции submit_f().

Вот решение,

import tkinter
from tkinter import *

message = ''
    # start_chatting function
def start_chatting ():
    global v
    master2 = Tk()
    master2.geometry("1280x720")
    master2.title("Messenger")
    label = Label(master2, text = "Messenger!!!",bg = '#1e00ff',fg ='yellow',width = 35, height = 5).place(x = 500, y = 0)
    username_label = Label(master2,text = usernames[position_counter],bg = '#91806d',fg ='white',width = 10, height = 2).place(x = 0, y = 100)
    L1 = Label(master2, text = "Type your message : ").place(x=0, y = 680)
    v = StringVar()
    e = Entry(master2,textvariable = v)
    e.insert(END, '')
    e.pack()
    e.place(x = 115, y = 680)
    submit_button = Button(master2,text = "Submit",command = submit_f).place(x = 200, y = 680)
    master2.mainloop()

#submit_f function
def submit_f ():
    global message
    message = message + " " + v.get()
    print(message)

start_chatting()
person Divyesh Mehta    schedule 25.12.2019