如何从所有类之外访问内部类?

问题描述 投票:0回答:1

我有一个包含所有其他类的类(MainApplication),以及一个位于外部类之外的 if 语句。我正在努力弄清楚如何从该 if 语句访问“开始”,以便程序启动。

import tkinter as tk

class MainApplication(tk.Frame):
    def __init__(self, parent, *args, **kwargs):
        tk.Frame.__init__(self, parent, *args, **kwargs)
        self.parent = parent
        class charName (object):
            def __init__ (self, master):
                Top = self.Top = tk.Toplevel(master)
                self.l= tk.Label(Top, text="Test")
                self.l.pack()
                self.e = tk.Entry(Top)
                self.e.pack()
                self.b = tk.Button(Top, text="Next", command=self.Cleanup,)
                self.b.pack()
                Top.mainloop
            
            def Cleanup (self):
                self.value = self.e.get()
                self.command = print("Works!")
                self.Top.destroy




        class Start (object):
            def __init__(self, master):
                self.master=master
                self.b = tk.Button(root, 
                            text="Get Started!", 
                            command=self.popup,)
                
                self.b.pack()
                
                    
            def popup (self):
                self.w = charName(self.master)
                self.b["state"] = "disabled" 
                self.master(self.w.Top)
                self.b["state"] = "normal"
                
                
if __name__ == "__main__":
    root=tk.Tk()
    m=Start(root)
    root.mainloop()

我尝试摆脱 MainApplication,效果很好。 除此之外,我不确定我还能做什么。我从另一篇文章中读到,MainApplication 代码可以用于组织对象(我不太确定我在做什么),但我试图使这部分代码打开一个屏幕,允许您输入角色名称,然后(用不同的代码)选择种族、阶级和其他创建 DnD 角色所需的必需品,并使用代码来组织按钮的位置。

另外,抱歉这篇文章太长了。我是 python (和这个)的新手,不太确定我知道我在做什么,需要什么或不需要什么。感谢您的耐心等待。

import tkinter as tk


class charName (object):
    def __init__ (self, master):
        Top = self.Top = tk.Toplevel(master)
        self.l= tk.Label(Top, text="Test")
        self.l.pack()
        self.e = tk.Entry(Top)
        self.e.pack()
        self.b = tk.Button(Top, text="Next", command=self.Cleanup,)
        self.b.pack()
        Top.mainloop
    
    def Cleanup (self):
        self.value = self.e.get()
        self.command = print("Works!")
        self.Top.destroy




class Start (object):
    def __init__(self, master):
        self.master=master
        self.b = tk.Button(root, 
                    text="Get Started!", 
                    command=self.popup,)
        
        self.b.pack()
        
            
    def popup (self):
        self.w = charName(self.master)
        self.b["state"] = "disabled" 
        self.master(self.w.Top)
        self.b["state"] = "normal"
                
                
if __name__ == "__main__":
    root=tk.Tk()
    m=Start(root)
    root.mainloop()
python tkinter python-typing inner-classes
1个回答
0
投票

如果要调用内部类的构造函数,必须先实例化外部类:

class Outer():
    class Inner():
        def __init__(self, num):
            print(num)
            
outer = Outer()
outer.Inner(1) # prints 1
© www.soinside.com 2019 - 2024. All rights reserved.