试图制作一个可更新的记分板同伴程序,与朋友一起玩游戏.对于编程非常陌生,因此为了学习/第一步/故障排除,设置一个包含球员姓名的按钮,一个显示他们积分总数的标签,以及一个可以根据需要的点数增加而 Select 的复选框.一旦 Select 了想要的加分,就可以按下玩家的按钮,并且应该更新分数.一旦代码正常工作,我就可以扩展球员按钮、显示的分数和复选框的数量.我遇到的问题是,变量(SCORE1)似乎是我创建的函数(SCORE_SUM)的"未解析引用"(在PyCharm中显示的错误),而另一个变量(SCORE_UPDATE)不会导致错误.

from tkinter import *
root = Tk()

score1 = IntVar()

score_update = IntVar()


def score_sum():
    if score_update == 1:
        newscore = score1 + 1
        score1 = newscore
    else:
        print("No points scored.")


playername = Button(root, text="Player Name", command=score_sum)
playername.pack()

playerscore = Label(root, textvariable=score1)
playerscore.pack()

plusone = Checkbutton(root, text="1 point", variable=score_update, onvalue=1, offvalue=0)
plusone.pack()

root.mainloop()

我开始逐行编写这段代码,知道在排除故障之前我希望最终代码是什么样子.一旦遇到错误,就删除该行,希望它能清除错误.由于我让PyCharm连夜打开,我试着关闭并重新打开,绝望地希望这个错误能被清除.不确定要更改什么,因为一个变量起作用而另一个变量不起作用.

推荐答案

这个问题与全局变量无关,而是与您如何处理这两个IntVar有关.执行此操作时:

score1 = IntVar()

您正在创建一个tkinter IntVar对象的instance,并将其存储在名为score1的变量中.正因为如此,当你做一些像这样的事情

score1 = newscore

你是replacing,IntVar的对象,无论newscore是什么.

相反,你需要像这样使用他们专用的getset方法:

from tkinter import *
root = Tk()

score1 = IntVar()
score_update = IntVar()


def score_sum():
    # use 'get' to query the existing value(s)
    if score_update.get() == 1:
        newscore = score1.get() + 1
        # use 'set' to update the IntVar with a new value
        score1.set(newscore)
    else:
        print("No points scored.")


playername = Button(root, text="Player Name", command=score_sum)
playername.pack()

playerscore = Label(root, textvariable=score1)
playerscore.pack()

plusone = Checkbutton(root, text="1 point", variable=score_update, onvalue=1, offvalue=0)
plusone.pack()

root.mainloop()

像这样使用getset允许您读/写存储在这IntVar个实例中的值,进而允许您的其他tkinter小部件与这些值进行适当的交互.

值得一提的是,其他的tkinter变量类,StringVarBooleanVar,等等,都有相似的行为

Python相关问答推荐

如何根据另一列值用字典中的值替换列值

Deliveryter Notebook -无法在for循环中更新matplotlib情节(保留之前的情节),也无法使用动画子功能对情节进行动画

Python虚拟环境的轻量级使用

avxspan与pandas period_range

如果条件不满足,我如何获得掩码的第一个索引并获得None?

使用Python更新字典中的值

当点击tkinter菜单而不是菜单选项时,如何执行命令?

如何从列表框中 Select 而不出错?

Pandas Data Wrangling/Dataframe Assignment

在pandas数据框中计算相对体积比指标,并添加指标值作为新列

如何在BeautifulSoup/CSS Select 器中处理regex?

具有相同图例 colored颜色 和标签的堆叠子图

提高算法效率的策略?

在Docker容器(Alpine)上运行的Python应用程序中读取. accdb数据库

使用polars. pivot()旋转一个框架(类似于R中的pivot_longer)

Python如何导入类的实例

操作布尔值的Series时出现索引问题

具有不匹配列的2D到3D广播

在一个数据帧中,我如何才能发现每个行号是否出现在一列列表中?

我怎样才能让深度测试在OpenGL中使用Python和PyGame呢?