【问题标题】:Tkinter update label when variable changes变量更改时 Tkinter 更新标签
【发布时间】:2015-11-01 16:53:14
【问题描述】:

我正在开发一个点击游戏的代码。我自己已经完成了 90%,因为我之前从未使用过 Tkinter 模块,所以这确实是一个学习项目,无论如何问题:

我刚刚对自动点击功能和附加到变量(现金金额)的窗口中的标签进行了排序,目前我在 .pack() 处有标签,并设置它创建一个新标签每一秒之后。显然这会造成混乱,这不是您对游戏的期望,所以我想知道是否有办法:

1)每次变量(现金金额)更新时更新标签(如果您能帮助我,这将是理想的)

2)用一行代码删除标签,然后将新标签与当前变量编号一起放入(不如第一个好,但如果第一个不可能,拥有这个仍然很棒)

这是目前为止的代码:

import time
from tkinter import *
root=Tk()

CPS=0
cash=0
mult=1

def blankLine():
    for i in range(16):
        print ("")

def infoprint():
    print("Cash =",cash)
    print("")
    print("Each click is worth",mult,"cash")
    print("")
    print("CPS =",CPS)
    blankLine()

def CashASecond():
    global root
    global cash
    global CPS
    cash += CPS
    root.after(1000, CashASecond)
CashASecond()

def CashLabel():
    label1=Label(root,text=cash)
    label1.pack()
    root.after(1000, CashLabel)
CashLabel()

def ManualClicker():
    global cash
    global mult
    cash += 1*(mult)
    infoprint()
ManualClickerButton=Button(root,text="Click",command=ManualClicker)
ManualClickerButton.pack()

class upgrades():
    def DoubleManualClicker():
        global cash
        global mult
        if cash < 1000:
            print("Not enough cash, sorry")
        elif cash>= 1000:
            print ("Double clicks purchased!")
            mult *= 2
            cash = cash - 1,000
    DoubleManualClickerButton=Button(root,text="Purchase double clicks",command=DoubleManualClicker)
    DoubleManualClickerButton.pack()
    DoubleManualClickerLabel=Label(root,text="Each click is worth twice as much, costs 1,000 \n")
    DoubleManualClickerLabel.pack()

    def clicker():
        global cash
        global mult
        global CPS
        if cash < 25:
            print("Not enough cash, sorry")
        elif cash >=25:
            CPS += 1
            print("CPS is now",CPS)
            cash = cash - 25
    ClickerButton=Button(root,text="Purchase auto clicker", command=clicker)
    ClickerButton.pack()
    ClickerLabel=Label(root,text="+1 CPS, costs 25 \n")
    ClickerLabel.pack()

    def SingleMachine():
        global cash
        global mult
        global CPS
        if cash < 50:
            print("Not enough cash, sorry")
        elif cash >= 50:
            CPS += 3
            print("CPS is now",CPS)
            cash = cash - 50
    SingleMachineButton=Button(root,text="Purcahse Single Cash Printer",command=SingleMachine)
    SingleMachineButton.pack()
    SingleMachineLabel=Label(root,text="+3 CPS, costs 50 \n")
    SingleMachineLabel.pack()

    def LoftOfCashPrinter():
        global cash
        global mult
        global CPS
        if cash < 100:
            print("Not enough cash, sorry")
        elif cash >= 100:
            CPS += 5
            print("CPS is now",CPS)
            cash=cash-100
    LoftOfCashPrinterButton=Button(root,text="Purchase a loft of cash printers",command=LoftOfCashPrinter)
    LoftOfCashPrinterButton.pack()
    loftlabel=Label(root,text="+7 CPS, costs 100 \n")
    loftlabel.pack()


root.title("Cash Clicker! ALPHA! By George Hill")
root.geometry("500x900+900+0")

root.mainloop()

提前致谢:)

【问题讨论】:

  • 我认为这就是您要查找的内容:Stringvar in Tkinter 使用您的labeltextvariable 选项绑定一个Stringvar。现在你可以改变你的字符串变量,你的标签会自动改变

标签: python tkinter label


【解决方案1】:

我之前遇到过这个问题,我设法解决这个问题的方法是使用事件和绑定。请注意,我正在使用类和应用程序。例如

def Click(self, event):
    self.Label['text'] = ....

....
    self.Buy = Button(....)
    self.Buy.grid(....)
    self.Buy.bind('<Button>', self.Click)

    self.Label = Label(....)
    self.Label.grid(....)

我知道这段代码非常基本(它不会工作),使用 .... 是为了显示将在哪里使用变量等。这纯粹是为了向您展示如何绑定小部件。

【讨论】:

  • 1) self.Label 恕我直言是个坏名字。 self.BuyLabelself.LabelForBuyButton 更好。 2)你不需要bindcommand =就可以了。
  • 嘿,谢谢你的回复,但我不太明白这段代码到底在做什么。据我了解,它的作用与我当前的代码相同。对我来说,当一个按钮被点击时,它会创建一个新标签,这不是我想要的
  • 看看这个website,它为您提供了所有可用绑定的完整列表,例如按键和鼠标移动。
猜你喜欢
  • 1970-01-01
  • 2019-06-02
  • 2011-02-05
  • 1970-01-01
  • 2020-05-04
  • 1970-01-01
  • 2011-08-10
  • 1970-01-01
  • 2017-04-12
相关资源
最近更新 更多