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

Я пытаюсь использовать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 пустой. Но тогда как мне получить доступ к входным данным после их ввода?

 Bryan Oakley24 мая 2012 г., 00:51
В твоем примере, что именно ты ожидаешь? Вы не дали виджету ввода никакого текста, прежде чем позвонитьget так что, конечно, он возвращает пустую строку.

Ответы на вопрос(4)

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

v = StringVar()

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

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

Для получения дополнительной информации см.эта страниц на Effbot.org.

 Bryan Oakley24 мая 2012 г., 01:03
A StringVar не обязательно, строго говоря. Они удобны, но для этого вопроса они совершенно лишние.

*

master = Tk()
entryb1 = StringVar

Label(master, text="Input: ")..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, тогда вы не использовали функцию ".get" с установленной вами текстовой переменной

Решение Вопроса

вы не понимаете, когда выполняются команды. В вашем примере вы называете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()

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

 Bryan Oakley23 мар. 2014 г., 01:37
@ Deep-B: спасибо, что поймали это.
 CodingCat24 мая 2012 г., 09:21
Ах я вижу. Я еще не очень разбираюсь в занятиях (все еще очень начинающий в программировании в целом), но я вижу проблему. Я просто сделаю "Анализ!" и вставьте функцию get (), которая должна работать. Спасибо
 Deep-B23 мар. 2014 г., 00:56
Вам может понадобиться добавить self в качестве параметра при вызове init суперкласса: tk.Tk .__ init __ (self). В остальном очень полезный пример!
 Deep-B23 мар. 2014 г., 01:41
И, ну, вы ошиблись приложением в последней строке. <_ < "

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

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()

Ваш ответ на вопрос