Почему функция get записи Tkinter ничего не возвращает?

Я пытаюсь использовать Entry поле для ручного ввода, а затем работать с этими данными.

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

Я надеюсь, что кто-то может сказать мне, что я делаю неправильно. Вот мини-файл:

from tkinter import *


master = Tk()

Label(master, text="Input: ").grid(row=0, sticky=W)

entry = Entry(master)
entry.grid(row=0, column=1)

content = entry.get()
print(content)  # does not work

mainloop()

это дает мне Entry поле я могу ввести, но я ничего не могу сделать с данными после его ввода в.

Я подозреваю, что мой код не работает, потому что изначально entry пусто. Но как мне получить доступ к входным данным после их ввода?

4 ответов


похоже, вы можете быть смущены, когда команды выполняются. В вашем примере, вы вызываете get метод перед GUI имеет возможность отображаться на экране (что происходит после вызова mainloop.

попробуйте добавить кнопку, которая вызывает get метод. Это намного проще, если вы пишете свое приложение как класс. Например:

import tkinter as tk

class SampleApp(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.entry = tk.Entry(self)
        self.button = tk.Button(self, text="Get", command=self.on_button)
        self.button.pack()
        self.entry.pack()

    def on_button(self):
        print(self.entry.get())

app = SampleApp()
app.mainloop()

запустите программу, введите в виджет ввода, затем нажмите на кнопку.


вы также можете использовать StringVar переменная, даже если это не обязательно:

v = StringVar()

e = Entry(master, textvariable=v)
e.pack()

v.set("a default value")
s = v.get()

дополнительные сведения см. В разделе на этой странице on effbot.org.


простой пример без классов:

from tkinter import *    
master = Tk()

# Create this method before you create the entry
def return_entry(en):
    """Gets and prints the content of the entry"""
    content = entry.get()
    print(content)  

Label(master, text="Input: ").grid(row=0, sticky=W)

entry = Entry(master)
entry.grid(row=0, column=1)

# Connect the entry with the return button
entry.bind('<Return>', return_entry) 

mainloop()

*

master = Tk()
entryb1 = StringVar

Label(master, text="Input: ").grid(row=0, sticky=W)

Entry(master, textvariable=entryb1).grid(row=1, column=1)

b1 = Button(master, text="continue", command=print_content)
b1.grid(row=2, column=1)

def print_content():
    global entryb1
    content = entryb1.get()
    print(content)

master.mainloop()

то, что вы сделали неправильно, не было помещено в функцию Define, тогда вы не использовали ".получить " функция с textvariable вы установили