首页 文章

Python - Tkinter - StringVar中的标签文本不显示/更新

提问于
浏览
0

我正在尝试转换我之前编写的一个简单的命令行程序,以获得GUI . 在开始向现有/工作代码添加内容之前,我想在Tkinter中构建GUI . 我终于开始取得进展,直到让事情显示出我想要的方式,直到我得到小部件,我想让他们的显示文本根据变量的内容而改变 .

从我在这里和各种文档中读到的,这样做的方法是 StringVar ,我试图这样做,但是当我运行程序时, status_msg Label小部件的文本没有't show up at all. I tried putting a set() call to update the variable in several places, and while it appears to update the variable, the label doesn't显示完全在窗口 . 最后,我尝试添加一个"Add Key"按钮调用的函数来强制设置调用并尝试使标签显示,但它仍然不起作用,尽管它确实打印出我对控制台的期望 .

我无法弄清楚我做错了什么 . 这是我的代码:

import tkinter as tk

numkeys = 0
keystring = str(numkeys) + " entries ready for parsing"
class Application(tk.Frame):
    def __init__(self, master=None):
        tk.Frame.__init__(self, master)
        self.grid()
        self.createWidgets()

    def createWidgets(self):
        self.numkeys = tk.StringVar()
        self.numkeys.set(keystring)

        api_frame = tk.LabelFrame(self, text="Key Entry", padx = 5, pady = 5)
        api_frame.grid(padx = 10, pady = 10)
        key1_lbl = tk.Label(api_frame, text = "Entry 1:", anchor = tk.W)
        key1_lbl.grid(row = 0, column = 0)
        self.key = tk.Entry(api_frame, width = 18)
        self.key.grid(row = 0, column = 1)
        key2_lbl = tk.Label(api_frame, text="Entry 2:")
        key2_lbl.grid(row = 0, column = 2, padx = 5)
        self.key2 = tk.Entry(api_frame, width = 45)
        self.key2.grid(row = 0, column = 3, padx = 2, columnspan = 3)
        status_msg = tk.Label(api_frame, textvariable = self.numkeys.get())
        status_msg.grid(row = 1, column = 0, columnspan = 3)
        btn_submit = tk.Button(api_frame, text="Add Key", width = 12, command = self.test)
        btn_submit.grid(row = 1, column = 4, pady = 5)
        btn_start = tk.Button(api_frame, text="Parse Keys", width = 12, command = None)
        btn_start.grid(row = 1, column = 5, pady = 5)

        #self.numkeys.set(keystring)

    def test(self):
        self.numkeys.set(keystring)
        root.update_idletasks()
        print("test function ran")
        print(app.numkeys.get())

root = tk.Tk()
app = Application(master=root)
app.master.title('Tk test')
app.mainloop()

1 回答

  • 1

    更换

    textvariable = self.numkeys.get()
    

    通过

    textvariable = self.numkeys
    

相关问题