Виджет входа tkinter не обновляется

Я искал везде в Интернете, но, к сожалению, нигде не нашел Я нахожу ответ на этот вопрос:

после установки текстовой переменной виджета tkinter Entry () в текстовую переменную.

текстовая переменная не обновляется после того, как я ввел текст в запись.

код ниже:

def saveFileName(self):
    if (self.save_file_name != ""):
        self.window.destroy()
        self.name_not_set = False
        print("saving...")
    else:
        print("notsaving...entry empty")
        pass
def cancel(self):
    self.name_not_set = False
    self.exit = True
    self.window.destroy()
    print("exiting...")
def askForFilename(self):
    self.window = tk.Tk()
    self.window.wm_title("enter a file name")
    label = Label(self.window,text = "please enter a file name:").pack(side = "top")
    entry = Entry(self.window,textvariable=self.save_file_name).pack()
    save = Button(self.window,text = "save",command=self.saveFileName).pack()
    cancel = Button(self.window,text = "cancel",command=self.cancel).pack()
    self.window.mainloop()

Необходимые переменные определены, и эти методы являются частью класса, который является экземпляром tk.TK ().

Виджет входа tkinter не обновляетсяВиджет входа tkinter не обновляется эта проблема очень надоедает :( очень грустный :(

Заранее спасибо и счастливого Рождества!

Покажите, пожалуйста, как вы определили переменную.

Bryan Oakley 19.11.2018 02:10

Обратите внимание, что такие операторы, как label = Label(self.window,text = "please enter a file name:").pack(side = "top"), присваивают результат вызова pack переменной с именем label, что часто может вызывать проблемы (возможно, ваши).

martineau 19.11.2018 02:48
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
1 468
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Текстовая переменная, связанная с Entry, должна быть StringVar(). Я не вижу такого объявления в вашем коде.

self.save_file_name = StringVar()

Чтобы установить и получить значение StringVar(), вы должны использовать метод set() или get(), например.

def saveFileName(self):
    if (self.save_file_name.get() != ""):
        self.window.destroy()
        # etc, etc.

Кроме того, не создавайте более одного экземпляра Tk(), как в:

def askForFilename(self):
    self.window = tk.Tk()

Вместо этого используйте Toplevel(). Или даже лучше: используйте диалоги файлов tkinter.

Спасибо! Я установил переменную StringVar в поле данных. который я не включил в свой код выше, извините за инклюзивность (если это слово), но проблема, похоже, вторая, о чем вы упомянули. Я забыл вызвать .get () в StringVar,: D

C Lu 23.11.2018 03:43

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