变量更改时,Tkinter更新标签

时间:2015-08-09 20:00:58

标签: python tkinter label

我正在开发一款点击游戏代码。我自己做了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()

提前致谢:)

1 个答案:

答案 0 :(得分:0)

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

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(....)

我理解这段代码非常基础(它不会起作用),而....的使用是为了显示使用变量之类的地方。这纯粹是为了向您展示如何绑定小部件。