【问题标题】:Buttons in a for loop to update labels in a for loop?for循环中的按钮更新for循环中的标签?
【发布时间】:2020-11-29 15:38:55
【问题描述】:

尝试获取单个按钮以更新 tkinter 中的单个标签。

这是我的代码:

from tkinter import *

root = Tk()

class bballPlayer:
    def __init__(self, preName, lastName):
        self.preName = preName
        self.lastName = lastName
        self.points = 0
    
    def incrementOnePoint(self):
        self.points += 1
    
    def getPoints(self):
        return self.points

players = []
player = bballPlayer('Tyler','Herro')
players.append(player)
player = bballPlayer('Duncan','Robinson')
players.append(player)
player = bballPlayer('Jimmy','Buckets')
players.append(player)
    
def addOnePoint():
    p.incrementOnePoint()
    global pointslabel
    pointslabel.config(text=str(p.points))

rowNumber = 0
for p in players:
    pointslabel = Label(root, text=str(p.points))
    pointslabel.grid(row=rowNumber, column=1)
    rowNumber += 1

rowNumber = 0
for p in players:
    btn = Button(root, text='Add Point', command=addOnePoint)
    btn.grid(row=rowNumber, column=0)
    rowNumber += 1

root.mainloop()

当您运行代码时,在下一列中的三个标签旁边的列中有三个按钮。我想要做的是让每个按钮更改它旁边的标签。

当我运行代码时,会发生什么情况是每个按钮都修改了最后一个标签,而其他两个标签没有改变。

任何帮助都很棒,谢谢!

【问题讨论】:

标签: python for-loop user-interface button tkinter


【解决方案1】:

这对你有用。我认为您不了解按钮的工作原理。一旦你 .grid() 它们就在那里,但是当你创建一个同名的按钮时,你会失去对第一个按钮的引用。通过创建关联数组,您可以访问该按钮。您缺少的另一部分是您必须将某些内容传递给您的回调函数,以使其知道您正在引用哪个玩家。

from tkinter import *
from functools import partial

root = Tk()


class bballPlayer:
    def __init__(self, preName, lastName):
        self.preName = preName
        self.lastName = lastName
        self.points = 0

    def incrementOnePoint(self):
        self.points += 1

    def getPoints(self):
        return self.points


players = []
player = bballPlayer('Tyler', 'Herro')
players.append(player)
player = bballPlayer('Duncan', 'Robinson')
players.append(player)
player = bballPlayer('Jimmy', 'Buckets')
players.append(player)


def addOnePoint(num):
    global points_labels
    players[num].incrementOnePoint()
    points_labels[num].config(text=str(players[num].points))


points_buttons = []
points_labels = []
for x in range(len(players)):
    points_buttons.append(Button(root, text='Add Point', command=partial(addOnePoint, x)))
    points_buttons[x].grid(row=x, column=0)
    points_labels.append(Label(root, text=str(players[x].points)))
    points_labels[x].grid(row=x, column=1)


root.mainloop()

【讨论】:

  • 伙计,我感激不尽。你刚刚解决了我一个多星期以来一直在研究的问题。非常感谢你!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-18
  • 1970-01-01
  • 2016-03-20
  • 2021-12-25
  • 1970-01-01
  • 2021-07-12
  • 1970-01-01
相关资源
最近更新 更多