我希望能够使用传递给它的类的实例调用子例程,然后使用实例名称的字符串来影响更新哪个tkinter标签
我知道这是一个奇怪的具体和复杂的方式问一些事情,可能很简单,但我不善于在谷歌表达我需要什么
我正在做一个辐射启发的游戏,我想让玩家选择一个敌人射击和更新他们的生命计。到目前为止,我已经完成了射击子程序背后的所有数学运算,我只是不知道如何在最后找到正确的label小部件
from tkinter import *
Root = Tk()
PlrWeapon = ["Pipe Revolver Rifle",6,5,0]
class Raider:
Species = "Human"
def __init__(self, Name, Level, MaxHealth, Health, Alive, Unique, Weapon, Armour):
self.Name = Name
self.Level = Level
self.MaxHealth = MaxHealth
self.Health = Health
self.Alive = Alive
self.Unique = Unique
self.Weapon = Weapon
self.Armour = Armour
def Shoot(self):
Damage = 0
for i in range(1,4):
Difference = PlrWeapon[i] - self.Armour[i]
if Difference >= 0:
Damage = Damage + Difference
self.Health = self.Health - Damage
if self.Health <= 0:
self.Alive = False
Enemy1 = Raider("Tessa",
5,
50,
50,
True,
False,
["Pipe Pistol",3,2,0],
["Armourless",0,0,0])
Enemy2 = Raider("Bobby",
5,
50,
50,
True,
False,
["Pipe Rifle",5,4,0],
["Leather",2,3,1])
Shoot(Enemy1)
Enemy1Name = Label(Root, text=Enemy1.Name)
Enemy1Name.grid(row=0, column=0)
Enemy1Health = Label(Root, text=Enemy1.Health)
Enemy1Health.grid(row=0, column=1)
Enemy2Name = Label(Root, text=Enemy2.Name)
Enemy2Name.grid(row=1, column=0)
Enemy2Health = Label(Root, text=Enemy2.Health)
Enemy2Health.grid(row=1, column=1)
Root.mainloop()
理想情况下,在Shoot()
例程的末尾,会有这样一个部分
def Shoot(self):
Damage = 0
for i in range(1,4):
Difference = PlrWeapon[i] - self.Armour[i]
if Difference >= 0:
Damage = Damage + Difference
self.Health = self.Health - Damage
if self.Health <= 0:
self.Alive = False
## start of wishful thinking ##
str(self)+"Health".config(text=self.Health)
如果你能理解我想表达的意思,并且有一个解决方案,我会非常感谢你的帮助。谢谢
如果我理解正确,那么您需要更改与传递给
Shoot
方法的Raider
对象相关的健康标签这里有一个可行的解决方案,但我不确定这是否是一个建议的方法,因为你必须非常小心
tkinter将小部件存储为树结构,其中
Tk()
窗口的根由.
表示。然后它的子对象将被表示为.unique_widget1_id
,而widget1的子对象将被表示为.unique_widget1_id.unique_widget2_id
。默认情况下,tkinter创建类似于.140343920750152
的id,可以通过widget.__str__()
方法看到但是您可以在创建小部件时向其添加用户定义的名称,如本解决方案所示(请确保每个小部件都有一个唯一的名称,以避免出现问题)。如果您创建两个具有相同名称的小部件,那么它将只创建第一个小部件,第二个小部件将只是对同一个小部件的引用)。然后您可以在任何小部件/窗口上调用
nametowidget()
方法,并提供相对/绝对路径来获取小部件对象(并在小部件上执行操作)如果你有问题请告诉我
PS:小部件名称不能以大写字母开头
相关问题 更多 >
编程相关推荐