我在使用键绑定来更改标签或任何参数的值时遇到问题。 这是我的代码:
from tkinter import*
class MyGUI:
def __init__(self):
self.__mainWindow = Tk()
#self.fram1 = Frame(self.__mainWindow)
self.labelText = 'Enter amount to deposit'
self.depositLabel = Label(self.__mainWindow, text = self.labelText)
self.depositEntry = Entry(self.__mainWindow, width = 10)
self.depositEntry.bind('<Return>', self.depositCallBack)
self.depositLabel.pack()
self.depositEntry.pack()
mainloop()
def depositCallBack(self,event):
self.labelText = 'change the value'
print(self.labelText)
myGUI = MyGUI()
当我运行它时,我点击了输入框并点击回车,希望标签将值改为'更改值'。但是,虽然它确实打印了该文本,但标签保持不变。
通过查看有关类似问题和问题的其他问题,我已经想出了如何在课堂外使用其中的一些问题,但我在课堂上做这件事时遇到了一些困难。
另外,在旁注中,“主人”在tkinter中扮演什么角色?
答案 0 :(得分:58)
self.labelText = 'change the value'
上面的句子使labelText引用'更改值',但不更改depositLabel的文本。
要更改depositLabel的文本,请使用以下其中一项:
self.depositLabel['text'] = 'change the value'
OR
self.depositLabel.config(text='change the value')
答案 1 :(得分:14)
您还可以在创建标签时定义textvariable
,并更改textvariable以更新标签中的文本。
这是一个例子:
labelText = Stringvar()
depositLabel = Label(self, textvariable=labelText)
depositLabel.grid()
def updateDepositLabel(txt) # you may have to use *args in some cases
labelText.set(txt)
无需手动更新depositLabel
中的文字。 Tk为你做到了。
答案 2 :(得分:2)
我认为这是另一个。仅供参考。 让我们将变量设置为StringVar类的瞬间
如果使用Tcl语言对Tk进行编程,则可以要求系统在变量发生变化时通知您。 Tk工具包可以使用此功能(称为跟踪)在修改关联变量时更新某些小部件。
没有办法跟踪Python变量的变化,但是Tkinter 允许您创建可在Tk的任何地方使用的变量包装器 可以使用跟踪的Tcl变量。
text = StringVar()
self.depositLabel = Label(self.__mainWindow, text = self.labelText, textvariable = text)
^^^^^^^^^^^^^^^^^
def depositCallBack(self,event):
text.set('change the value')
答案 3 :(得分:2)
我制作了一个小的tkinter应用程序,它在点击按钮后设置标签
#!/usr/bin/env python
from Tkinter import *
from tkFileDialog import askopenfilename
from tkFileDialog import askdirectory
class Application:
def __init__(self, master):
frame = Frame(master,width=200,height=200)
frame.pack()
self.log_file_btn = Button(frame, text="Select Log File", command=self.selectLogFile,width=25).grid(row=0)
self.image_folder_btn = Button(frame, text="Select Image Folder", command=self.selectImageFile,width=25).grid(row=1)
self.quite_button = Button(frame, text="QUIT", fg="red", command=frame.quit,width=25).grid(row=5)
self.logFilePath =StringVar()
self.imageFilePath = StringVar()
self.labelFolder = Label(frame,textvariable=self.logFilePath).grid(row=0,column=1)
self.labelImageFile = Label(frame,textvariable = self.imageFilePath).grid(row = 1,column=1)
def selectLogFile(self):
filename = askopenfilename()
self.logFilePath.set(filename)
def selectImageFile(self):
imageFolder = askdirectory()
self.imageFilePath.set(imageFolder)
root = Tk()
root.title("Geo Tagging")
root.geometry("600x100")
app = Application(root)
root.mainloop()
答案 4 :(得分:1)
使用config
方法更改label:
top = Tk()
l = Label(top)
l.pack()
l.config(text = "Hello World", width = "50" , )
答案 5 :(得分:0)
有很多方法可以解决这样的问题。有很多方法可以做到这一点。我将为您提供这个问题的最简单解决方案。真正更改标签或任何假发的文本时。我会这样做的。
Name_Of_Label["text"] = "Your New Text"
因此,当我将此知识应用于您的代码时。看起来像这样。
from tkinter import*
class MyGUI:
def __init__(self):
self.__mainWindow = Tk()
#self.fram1 = Frame(self.__mainWindow)
self.labelText = 'Enter amount to deposit'
self.depositLabel = Label(self.__mainWindow, text = self.labelText)
self.depositEntry = Entry(self.__mainWindow, width = 10)
self.depositEntry.bind('<Return>', self.depositCallBack)
self.depositLabel.pack()
self.depositEntry.pack()
mainloop()
def depositCallBack(self,event):
self.labelText["text"] = 'change the value'
print(self.labelText)
myGUI = MyGUI()
如果这有帮助,请告诉我!