0

这是情况

class App(wx.Frame):
    def __init__(self,parent,id=-1,title='Test App'):
        wx.Frame.__init__(self,parent,id,title,size=((1050,690)))

        self.mode = 'Test'


class SetModes:
    def __init__(self):
        self.GetModes = App(None,-1)

        self.appmode = ''

    def SetMode(self):
        self.appmode = self.GetModes.mode

现在这只是一个示例脚本,因为我已经知道这行不通,但它显示了我本质上想要做的事情。让我澄清一下:

我想从应用程序类中获取和设置一些变量。我希望能够从我的“SetModes”课程中做到这一点。问题是我无法创建它的实例,因为我无法为实例分配父级,因此 self.GetModes 方法不起作用,它告诉我实例不能“没有”父级,所以这是否意味着如果我只想使用它的一些变量和函数,我就无法创建我的 App 类的实例?

那么我该如何让它发挥作用。我可以让一个班级与需要父母的班级进行交流吗?

4

2 回答 2

1

我认为您的部分问题是框架需要从wx.App实例内部初始化,然后MainLoop()必须调用(请参阅本教程。请注意框架如何具有父级None)。

之后,像 jdi 这样的解决方案将起作用。但是,如果可以避免的话,我仍然不喜欢使用引用。对于在直接孩子上调用函数的父母来说,这没关系,但我个人的规则是我的班级不能看到他们不直接拥有的任何对象(即不了解孩子的孩子)。

我是PubSub的忠实粉丝,用于在不相关的类之间进行通信。与wx.Event对象不同,不需要任何层级关系。与 jdi 提出的参考解决方案不同,类根本不需要了解彼此的结构。

归根结底,在您的应用程序中,没有实例可以SetModes存在实例吗?如果不是,您可以将' 逻辑合并到 ' 中吗?如果是,那么明确处理的编码是糟糕的设计。AppSetModesAppSetModesApp

使用PubSub,您从 发送请求消息SetModesApp看到消息,然后可以发送响应消息,由SetModes. 完全分离,完全异步。SetModes不需要了解任何关于App的信息,只需要了解消息格式。

于 2012-06-29T06:39:02.713 回答
0

仅仅因为 wx.Frame 需要父级,并不意味着您不能在另一个未关联的类中分配对它的引用。只需像往常一样将您的 App 实例作为父对象,但将引用传递给您的 SetModes:

app = App(parent)
setModes = SetModes()
setModes.GetModes = app

这归结为您的程序的设计问题。小部件需要父母。

于 2012-06-29T05:36:54.653 回答