【问题标题】:How to update tkinter label如何更新 tkinter 标签
【发布时间】:2021-08-23 18:49:02
【问题描述】:

所以我正在尝试制作某种基本的自动点击器,其排名会在一定数量的点击后更新,但每当我更新排名时,应该显示它的标签不会改变,我不会'不知道如何更新标签

from tkinter import *

count = 0
rank = "click the button to rank up!"

window = Tk()

if count == 1:
    rank = "wow first click!"

def click():
    global count
    count += 1
    counter = Label(window, text=count).grid(row = 0, column = 1)

clicker = Button(window, text="The Button", padx = 50, pady = 50, command = click).grid(row = 0, column = 0)

rankDisplay = Label(window, text = rank, padx = 100, pady = 25).grid(row = 1, column = 0)
  
window.mainloop()

第一次点击后,排名仍然显示为“点击按钮排名上升”而不是“哇第一次点击”,这几乎是问题

【问题讨论】:

  • if 语句将立即执行,而且您不需要在每次调用函数时都创建标签并且实际上是错误地创建它(与其他方法一样,因为布局管理器方法返回 None ),您只需 .config() 小部件实例,例如,只需立即网格按钮但不指定文本(或使用 0 作为起始文本),然后只需执行 label_instance.config(text=new_text)
  • 哦,好吧,有道理,我想我只是想错了,谢谢你的遮阳篷!

标签: python tkinter tkinter-label


【解决方案1】:

这是代码:

from tkinter import *

count = 0

window = Tk()
def changed(text):
    rankDisplay.config(text=text)
    rankDisplay.grid(row = 1, column = 0)
def click():
    global count
    count += 1
    counter = Label(window, text=count).grid(row = 0, column = 1)
    if count == 1:
        changed("wow first click!")
    return count
clicker = Button(window, text="The Button", padx = 50, pady = 50, command = click).grid(row = 0, column = 0)
rankDisplay = Label(window, text = "", padx = 100, pady = 25)
changed("click the button to rank up!")
  
window.mainloop()

当您单击按钮时,标签文本将“单击按钮以排名”更新为“哇第一次单击”。因为标签的文本是 StringVar(),如果我设置了 stringvar,则标签的文本会更新到字符串变量

【讨论】:

  • 所以如果你点击这个按钮然后它会更新标签“点击按钮排名”到“哇第一次点击”
  • 你应该用解释更新问题
【解决方案2】:

我已经知道这个问题了。为了解决这个问题,你必须为你的标签创建一个全局变量:

global l1
l1 = Label(...)

然后,要修改文本,你必须在你的函数中做:

l1.config(text=str(count))

【讨论】:

    【解决方案3】:

    看到这里你应该对名为rankDisplay的标签使用update方法

    这里是代码:

    from tkinter import *
    
    count = 0
    
    
    
    window = Tk()
    
    rank = StringVar()
    rank.set("Click the button to rank up")
    
    
    def click():
        global count
        count += 1
        counter = Label(window, text=count).grid(row=0, column=1)
        if count == 1:
            rank.set("wow first click!")
            rankDisplay.update()
    
    
    clicker = Button(window, text="The Button", padx=50, pady=50, command=click).grid(row=0, column=0)
    
    rankDisplay = Label(window, textvariable=rank, padx=100, pady=25)
    rankDisplay.grid(row=1, column=0)
    
    window.mainloop()
    

    代码中的修改: 你应该知道 tkinter 中StringVar 的概念才能使用update 方法。链接了解它https://www.pythontutorial.net/tkinter/tkinter-stringvar/#:~:text=The%20Tkinter%20StringVar%20helps%20you,Label%20or%20Entry%20more%20effectively.&text=The%20StringVar%20constructor%20accepts%20three,defaults%20to%20the%20root%20window

    rankDisplay 标签中,您必须使用textvariable 属性而不是text

    只有这些是变化...

    【讨论】:

      猜你喜欢
      • 2015-12-08
      • 2017-04-12
      • 1970-01-01
      • 2017-03-21
      • 1970-01-01
      • 1970-01-01
      • 2014-08-01
      • 2017-11-18
      相关资源
      最近更新 更多