【问题标题】:How to update class object attributes in Tkinter Labels如何更新 Tkinter 标签中的类对象属性
【发布时间】:2020-04-22 08:09:36
【问题描述】:

我一直在尝试用python制作一个团队排名工具。我创建了一个具有不同属性的团队类,这些属性会影响强度属性。我想用 tkinter 以图形方式列出团队,按照从最高强度到最低强度的顺序,即使我改变了一些团队的属性。我使用带有团队名称、等级和实力的标签作为文本。当我更改团队的名称或实力时,我希望这些标签能够更新。当我将团队属性添加到 GUI 时,它当前不会更新。由于我仍然是 Tkinter 和 Python 的初学者,所以我想知道我的代码有什么问题以及如何修复它。这是我的代码:

# Graphical configuration
root = Tk()
root.title('Robot scouting software\u00A9')
teamtype = 'Competition home'



if teamlisted == need:
    team = Teamsort()

#Competition homepage

g = StringVar()
#Rank Labels
ordinals = ['st', 'nd', 'rd', 'th', 'th', 'th', 'th', 'th', 'th', 'th']
for x in range(0, len(team)):
    g.set(team[x].name)
    Label(root, text = str(x+1)+ordinals[x%10]+' '*(4-len(str(x)))+g.get()+4*' '+str(team[x].strength)).grid(row = x%(len(team)//3+1), column = 2*(x//(len(team)//3+1)))

#black boxes to separate teams

for x in range(0, len(team)):
    Label(root, text = '    ', bg = 'Black').grid(row = x%(len(team)//3+1),
                                                  column = 2*(x//(len(team)//3+1))+1)



root.mainloop()

【问题讨论】:

  • 这是我的第一个 Stack Overflow 问题,所以如果我需要更新我的问题或做一些不同的事情,请告诉我
  • 如果没有人问任何问题,请不要评论您自己的问题,只需编辑它,这也太大了,将其拆分为不起作用的较小部分
  • 好的,谢谢你告诉我

标签: python tkinter


【解决方案1】:

当用于设置文本元素的变量发生变化时,Tkinter 不会重绘。相反,您需要使用变量类。如果你想做一些除了更新标签之外的事情(比如重新排序列表),你需要使用trace 方法。

来源: https://effbot.org/tkinterbook/variable.htm

【讨论】:

  • 我必须为跟踪中的回调编写什么样的函数?
  • 在这种情况下我实际上不会使用它。我会在您用来更改字符串变量的任何函数中重新排序您的列表。
  • 如果我更改团队名称会怎样?还是不显示?
  • 我制作了一个excel电子表格来包含团队数据;然后使用 pandas 将其加载到我的程序中。这样我可以编辑电子表格中的数据,然后将最终版本加载到 python 中以重新排序列表。不确定这是否是最简洁的方法,但它对我有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-21
相关资源
最近更新 更多