Python t(champ[“text”]) 如果名称=“\uuuuu main\uuuuuuuu”: root=tk.tk() 根标题(“冠军”) 根部几何形状(“1000x570+450+200”) 根目录。可调整大小(False,False) app=main应用程序(根) 应用程序配置(后台=“#34495e”) app.pack(fill=“两者”,expand=True) app.mainloop()
GUI图像 为了更容易理解我要做的事情,我将链接主窗口和角色选择窗口中的图像 (显示播放器)Python t(champ[“text”]) 如果名称=“\uuuuu main\uuuuuuuu”: root=tk.tk() 根标题(“冠军”) 根部几何形状(“1000x570+450+200”) 根目录。可调整大小(False,False) app=main应用程序(根) 应用程序配置(后台=“#34495e”) app.pack(fill=“两者”,expand=True) app.mainloop(),python,oop,user-interface,button,tkinter,Python,Oop,User Interface,Button,Tkinter,GUI图像 为了更容易理解我要做的事情,我将链接主窗口和角色选择窗口中的图像 (显示播放器) (显示可用字符)您可以尝试类似的方法。初始化类后,可以在外部将更改应用于类变量 下面是一个简单的例子 class A(): def __init__(self): self.champ = None def get_name(self): B() def test(self): print(self.champ) class B(
(显示可用字符)您可以尝试类似的方法。初始化类后,可以在外部将更改应用于类变量 下面是一个简单的例子
class A():
def __init__(self):
self.champ = None
def get_name(self):
B()
def test(self):
print(self.champ)
class B():
def __init__(self):
print("Assingin name")
f.champ = "Hero1"
return
if __name__ == "__main__":
f = A()
f.test()
f.get_name()
f.test()
在您的场景中,您将更改app.whatever,因为您的主程序全局初始化为app。因此,只需创建一个要填充的列表或独立变量或dict,就可以通过从二级类向它们赋值来传递它们
我相信扩展以适合您的确切用例是完全可能的,我可以在以后提供一个更健壮的解决方案 您只需将单击按钮的实例传递给
ChampionWindow
类:
class MainApplication(tk.Frame):
def __init__(self, master, *args, **kwargs):
...
# Creating multiple buttons
for i, item in enumerate(self.main_positions):
button_main = tk.Button(self, width=16, height=8, bg="#2c3e50", relief=tk.RIDGE, fg="white",
justify=tk.CENTER, text=f"Champion {i +1}",
command=lambda c=i: self.clicked_main(c))
button_main.grid(row=item[0] + 1, column=item[1], pady=(0, 50))
self.main_buttons_identities.append(button_main)
def clicked_main(self, current_index):
current = self.main_buttons_identities[current_index]
print(current["text"])
ChampionWindow(current) # pass clicked button to ChampionWindow
然后,单击按钮之一时,更新ChampionWindow
中传递的按钮的文本:
# Creating champion select window
class ChampionWindow(tk.Toplevel):
def __init__(self, button, *args, **kwargs):
tk.Toplevel.__init__(self, *args, **kwargs)
self.button = button # save the button for later use
...
def clicked_champion(self, champ_index):
champ = self.champions_buttons_identities[champ_index]
print(champ["text"])
self.button["text"] = champ["text"] # update passed button
如果我不全局初始化程序会更好吗?不。我不是一流的专家,但我相信你所做的被认为是在if\u name\u块下初始化程序的最佳实践。
class MainApplication(tk.Frame):
def __init__(self, master, *args, **kwargs):
...
# Creating multiple buttons
for i, item in enumerate(self.main_positions):
button_main = tk.Button(self, width=16, height=8, bg="#2c3e50", relief=tk.RIDGE, fg="white",
justify=tk.CENTER, text=f"Champion {i +1}",
command=lambda c=i: self.clicked_main(c))
button_main.grid(row=item[0] + 1, column=item[1], pady=(0, 50))
self.main_buttons_identities.append(button_main)
def clicked_main(self, current_index):
current = self.main_buttons_identities[current_index]
print(current["text"])
ChampionWindow(current) # pass clicked button to ChampionWindow
# Creating champion select window
class ChampionWindow(tk.Toplevel):
def __init__(self, button, *args, **kwargs):
tk.Toplevel.__init__(self, *args, **kwargs)
self.button = button # save the button for later use
...
def clicked_champion(self, champ_index):
champ = self.champions_buttons_identities[champ_index]
print(champ["text"])
self.button["text"] = champ["text"] # update passed button