首页 > 解决方案 > tkinter 条目小部件未更新

问题描述

我在网上到处搜索,但不幸的是我在哪里找不到这个问题的答案:

在将 tkinter Entry() 小部件的 textvariable 设置为 textvariable 之后。

在我在条目中输入文本后,文本变量不会更新。

下面的代码:

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() 实例。

我尝试输入一个名字:( 控制台日志 这个问题很麻烦:(很伤心:(

谢谢你,提前祝你圣诞快乐!

标签: pythontkintertkinter-entry

解决方案


与条目关联的文本变量应该是StringVar(). 我在你的代码中没有看到任何这样的声明。

self.save_file_name = StringVar()

要设置和获取 a 的值,StringVar()您必须使用set()orget()方法,例如。

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

另外,不要创建多个Tk()as 的实例:

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

改为使用Toplevel()。甚至更好:使用 tkinter 文件对话框。


推荐阅读