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 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(

GUI图像

为了更容易理解我要做的事情,我将链接主窗口和角色选择窗口中的图像

(显示播放器)


(显示可用字符)

您可以尝试类似的方法。初始化类后,可以在外部将更改应用于类变量

下面是一个简单的例子

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