Tkinter - Функция Entry .get()

class FCMenu:
def __init__(self,master):
    frame=Frame(master)
    frame.pack()
    Label(frame, text="What is the number?").grid(row=0)
    self.num = IntVar()
    self.entry = Entry(frame,textvariable=self.num).grid(row=1)
    button = Button(frame, text="Factorize", command=self.calc).grid(row=2)
    self.resultvar = StringVar()
    Label(frame, textvariable=self.resultvar).grid(row=3)

def calc(self):
    e = int(self.entry.get())
    print(e,self.num.get())
    ...

Я пытаюсь создать Python GUI с tkinter, как показано выше. Тем не менее, каждый раз, когда я звоню .get() на запись или переменную text, это не удается. Сама запись объясняет, что нет .get() функция для NoneType. Если я удаляю это и использую только self.num.get(), он печатает 0 или 0.0, в зависимости от того, превращаю я его в целое число или нет. Если я поверну self.num к StringVar, он ничего не печатает вообще. Просто я не могу найти способ получить ввод, который я хочу получить.

1 ответ

Решение

Сделал упрощенную версию вашего кода, и он правильно печатает как Entry виджет изменен. Может быть ошибка в другом месте вашего кода? Или неправильный отступ? Вот код, с которым я тестировал (это код 2.7, но он также работал с версией 3.5):

import Tkinter as tk

class FCMenu:
    def __init__(self, master):
        frame = tk.Frame(master)

        self.num = tk.IntVar()
        self.entry = tk.Entry(frame, textvariable=self.num)
        self.button = tk.Button(frame, text='Calc', command=self.calc)

        frame.pack()
        self.entry.pack()
        self.button.pack()

    def calc(self):
        print(self.num.get(), self.entry.get())

root = tk.Tk()
frame = FCMenu(root)
root.mainloop()

Он печатает с обоих self.num.get() а также self.entry.get(), Первый Int а второй как String похоже на то.

Другие вопросы по тегам