Python - Tkinter - 来自StringVar的标签文本不会显示/更新

问题描述:

我试图转换我以前写过的一个简单的命令行程序来创建GUI。在开始将事物添加到我的现有/工作代码之前,我想玩弄在Tkinter中构建GUI。我终于开始取得进展,只要让事情显示我希望他们如何,直到我得到的小部件,我希望他们的显示文本取决于变量的内容变化。Python - Tkinter - 来自StringVar的标签文本不会显示/更新

从我在这里阅读的文档以及各种文档集中,要做到这一点的方法是我试图做的StringVar,但是当我运行程序时,status_msg标签小部件的文本根本没有出现。我尝试过在一些地方放置一个set()调用来更新变量,当它看起来更新变量时,标签并没有显示在窗口中。最后,我尝试添加一个“添加键”按钮调用的函数来强制设置调用,并尝试使标签显示,但它仍然不起作用,尽管它确实打印了我期望的控制台。

我搞不​​清楚我做错了什么。这里是我的代码:

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

通过

textvariable = self.numkeys 
+0

也做了更换

textvariable = self.numkeys.get() 

!在看到这是多么简单之后,我感到有点愚蠢,但非常抱怨。谢谢! – Prodigal