Python 2.7:更新Tkinter Label控件内容
我正在尝试让我的Tkinter标签控件更新,但原本以为这很简单,现在却搞不清楚了。
我的代码是:
import Tkinter as tk
import json, htmllib, formatter, urllib2
from http_dict import http_status_dict
from urllib2 import *
from contextlib import closing
class Application(tk.Frame):
def __init__(self, master=None):
tk.Frame.__init__(self, master)
self.grid()
self.createWidgets()
def createWidgets(self):
StatusTextVar = tk.StringVar()
self.EntryText = tk.Entry(self)
self.GetButton = tk.Button(self, command=self.GetURL)
self.StatusLabel = tk.Label(self, textvariable=StatusTextVar)
self.EntryText.grid(row=0, column=0)
self.GetButton.grid(row=0, column=1, sticky=tk.E)
self.StatusLabel.grid(row=1, column=0, sticky=tk.W)
def GetURL(self):
try:
self.url_target = ("http://www." + self.EntryText.get())
self.req = urllib2.urlopen(self.url_target)
StatusTextVar = "Success"
except:
self.StatusTextVar = "Wrong input. Retry"
pass
app = Application()
app.mainloop()
我试过好几种方法,但要么标签不更新,要么解释器报错。
注意:在这个片段中,我删掉了尽可能多的代码,以免让人困惑。
1 个回答
2
你需要使用 StringVar
的 set
方法来改变标签的文本。此外:
StatusTextVar = "Success"
这里没有引用到 self,所以不会改变任何状态。
你应该先把所有的 StatusTextVar
改成 self.StatusTextVar
,然后再更新 set
方法的调用:
self.StatusTextVar = "Success"
self.StatusTextVar = "Wrong input. Retry"
改成
self.StatusTextVar.set("Success")
self.StatusTextVar.set("Wrong input. Retry")
更新所有的 StatusTextVar
实例并使用 set
方法后,我得到了:
import Tkinter as tk
import json, htmllib, formatter, urllib2
from urllib2 import *
from contextlib import closing
class Application(tk.Frame):
def __init__(self, master=None):
tk.Frame.__init__(self, master)
self.grid()
self.createWidgets()
def createWidgets(self):
self.StatusTextVar = tk.StringVar()
self.EntryText = tk.Entry(self)
self.GetButton = tk.Button(self, command=self.GetURL)
self.StatusLabel = tk.Label(self, textvariable=self.StatusTextVar)
self.EntryText.grid(row=0, column=0)
self.GetButton.grid(row=0, column=1, sticky=tk.E)
self.StatusLabel.grid(row=1, column=0, sticky=tk.W)
def GetURL(self):
try:
self.url_target = ("http://www." + self.EntryText.get())
self.req = urllib2.urlopen(self.url_target)
self.StatusTextVar.set("Success")
except:
self.StatusTextVar.set("Wrong input. Retry")
pass
root = tk.Tk()
app = Application(master=root)
app.mainloop()
这样就能正常工作了,和预期的一样。