Почему функция 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 вы установили