更新python tkinter标签

2024-03-29 02:04:28 发布

您现在位置:Python中文网/ 问答频道 /正文

from tkinter import *
import time

master = Tk()

def uiPrint():
    print("")
    print(click)


click = 0
mult = 1
clickView = click

def doubClicks():
    global click
    global mult
    if click < 5:
        print("Not enough clicks!")
    elif click >= 5:
        mult = mult*2
        click = click - 5
        print("Double Clicks Purchased!")

def buttonCommand():
    clickView = IntVar()
    Label(master, textvariable =clickView).pack()
    clickView.get()
    global click
    global mult
    click += 1*(mult)
    uiPrint()

mainClickButton = Button(master, text="Click!", command = buttonCommand)
mainClickButton.pack()

purchaseDoubleClickButton = Button(master, text="Purchase Double Clicks", command = doubClicks)
purchaseDoubleClickButton.pack()


master.title("Clicker")
master.geometry("%sx%s+%s+%s" % (200,70,512,512))
mainloop()

问题是:

tkinter窗口上的标签告诉您有多少次单击,该标签保持在0,doesent update。有什么问题?可能遗漏了一些非常明显的东西


Tags: importmastertkinterdefglobalpackclickdouble
1条回答
网友
1楼 · 发布于 2024-03-29 02:04:28

我认为您应该更新IntVar的同一个实例,以使内容更新了。什么您应该做的是在主程序中创建IntVar,并在buttonCommand()函数中将其用作全局变量:

def buttonCommand():    
    global click
    global mult
    global clickView
    click += 1*(mult)
    clickView.set(click)
    uiPrint()

mainClickButton = Button(master, text="Click!", command = buttonCommand)
mainClickButton.pack()

purchaseDoubleClickButton = Button(master, text="Purchase Double Clicks", command = doubClicks)
purchaseDoubleClickButton.pack()

clickView = IntVar()
clickView.set(click)
Label(master, textvariable = clickView).pack()    

编辑: 要在购买双击时更新标签,请使用与“双击”功能相同的方法:

def doubClicks():
    global click
    global mult
    global clickView
    if click < 5:
        print("Not enough clicks!")
    elif click >= 5:
        mult = mult*2
        click = click - 5
        print("Double Clicks Purchased!")
    clickView.set(click)

另一种方法是使用OOP,因此创建“clicker”类而不是使用globals:

from Tkinter import *

class Clicker():
    def __init__(self, master):            
        self.click = 0
        self.mult = 1
        self.clickView = StringVar() 
        self.clickView.set(self.click)

        self.mainClickButton = Button(master, text="Click!", command =  self.buttonCommand)
        self.mainClickButton.pack()

        self.purchaseDoubleClickButton = Button(master, text="Purchase Double Clicks", command = self.doubClicks)
        self.purchaseDoubleClickButton.pack()

        Label(master, textvariable = self.clickView).pack()


    def uiPrint(self):
        print("")
        print(self.click)

    def doubClicks(self):
        if self.click < 5:
            print("Not enough clicks!")
        elif self.click >= 5:
            self.mult = self.mult*2
            self.click = self.click - 5
            print("Double Clicks Purchased!")
            self.clickView.set(self.click)

    def buttonCommand(self):              
        self.click += 1*(self.mult)
        self.clickView.set(self.click)
        self.uiPrint()


if __name__ == '__main__':
    master = Tk()        
    master.title("Clicker")
    master.geometry("%sx%s+%s+%s" % (200,70,512,512))  
    clicker = Clicker(master)

    mainloop() 

相关问题 更多 >