Python 更改标签上的文本

Python 更改标签上的文本,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,我在使用键绑定更改标签或任何参数的值时遇到问题。 这是我的代码: 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.__main

我在使用键绑定更改标签或任何参数的值时遇到问题。 这是我的代码:

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导入*
MyGUI类:
定义初始化(自):
self.\uuu main window=Tk()
#self.fram1=帧(self.\uu主窗口)
self.labelText='输入存款金额'
self.depositLabel=Label(self.\u主窗口,text=self.labelText)
self.depositEntry=Entry(self.\uu主窗口,宽度=10)
self.depositEntry.bind(“”,self.depositCallBack)
self.depositLabel.pack()文件
self.depositEntry.pack()
mainloop()
def存储回调(自身、事件):
self.labelText='更改值'
打印(self.labelText)
myGUI=myGUI()
当我运行它时,我单击entrybox并点击enter,希望标签将值更改为“更改值”。但是,虽然它确实打印该文本,但标签保持不变

从其他类似的问题来看,我已经想到了如何在课堂外处理这些问题,但在课堂内处理这些问题时,我遇到了一些困难

另外,顺便问一下,“大师”在特金特扮演什么角色

self.labelText = 'change the value'
上面的句子使labelText更改值,但不更改Label的文本

要更改depositLabel的文本,请使用以下设置之一:

self.depositLabel['text'] = 'change the value'


我想这是另一个。仅供参考。 让我们将一个变量设置为StringVar类的实例

如果您使用Tcl语言编程Tk,您可以要求系统在变量更改时通知您。Tk工具包可以使用此功能(称为跟踪),在修改相关变量时更新某些小部件

无法跟踪Python变量的更改,但是Tkinter 允许您创建可在任何位置使用的变量包装器 可以使用跟踪的Tcl变量

text=StringVar()
self.depositLabel=Label(self.\uu主窗口,text=self.labelText,textvariable=text)
#                                                                   ^^^^^^^^^^^^^^^^^^^
def存储回调(自身、事件):
text.set('更改值')

您还可以在创建标签时定义
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为您做了这件事。

我制作了一个小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()

使用
config
方法更改标签的值:

top = Tk()

l = Label(top)
l.pack()

l.config(text = "Hello World", width = "50")

有很多方法可以解决这样的问题。有很多方法可以做到这一点。我会给你一个最简单的答案来回答这个问题。当更改标签的文本或任何类型的wiget时。我会这样做

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()
因此,当我将这些知识应用到您的代码中时。它看起来像这样

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()
从tkinter导入*
MyGUI类:
定义初始化(自):
self.\uuu main window=Tk()
#self.fram1=帧(self.\uu主窗口)
self.labelText='输入存款金额'
self.depositLabel=Label(self.\u主窗口,text=self.labelText)
self.depositEntry=Entry(self.\uu主窗口,宽度=10)
self.depositEntry.bind(“”,self.depositCallBack)
self.depositLabel.pack()文件
self.depositEntry.pack()
mainloop()
def存储回调(自身、事件):
self.labelText[“text”]=“更改值”
打印(self.labelText)
myGUI=myGUI()

如果这有帮助,请让我知道

对于我得到的第一个建议:self.labelText['text']='change the value'TypeError:'str'对象不支持项目分配我没有键入
self.labelText['text']
,但是
self.depositLabel['text']
。啊,就是这样。非常感谢。你能帮我理解为什么我的技术不起作用吗?或者什么时候使用set(),我在回答中已经解释过了。由于我的词汇量太差,我无法解释更多?谢谢你
master
是小部件打包到的GUI。感谢您提供简洁的解决方案。我建议初学者对代码进行注释以便理解。感谢您的回答,我向任何人推荐这种方法,但它是StringVar()而不是StringVar()。此外,(可能对某些人来说并不明显)我记得
StringVar()
必须从tk导入,或者像这样使用:
tk.StringVar()
如果您将import tkinter编写为tk或类似的东西。再次感谢。我们需要在这里传递
宽度
吗?在这种情况下传递
文本
参数是多余的;对于默认值,最好先通过
text.set()
初始化
text
变量。