情况如下
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
现在这只是一个示例脚本,因为我已经知道这不起作用,但它显示了我本来想要做的事情。让我澄清一下:
我想从app类中获取并设置一些变量。我希望能够从我的'SetModes'类中执行此操作。问题是我无法创建它的实例,因为我无法将父项分配给实例,因此self.GetModes方法不起作用,它告诉我实例不能“不”拥有父项,所以这是否意味着我无法创建我的App类的实例,如果我想要做的就是使用它的一些变量和函数??
那么我该怎么做呢?我可以让班级与需要家长的班级进行交流吗?
答案 0 :(得分:1)
我认为您的部分问题是需要从wx.App
实例内部初始化框架,然后必须调用MainLoop()
(请参阅this tutorial。请注意框架是否具有父None
)。
在那之后,像jdi这样的解决方案将起作用。但是,如果可以避免使用引用,我仍然不喜欢使用引用。对于父母在直接孩子上调用函数,没关系,但我个人的规则是我的班级看不到他们没有直接拥有的任何对象(即没有关于孩子的孩子的知识)。
我非常喜欢PubSub在不相关的课程之间进行交流。与wx.Event
对象不同,不需要任何层次关系。与jdi提出的参考解决方案不同,类不需要对彼此的结构有任何了解。
归结为,在您的应用程序中,SetModes
实例是否存在而不 App
实例?如果不是,您可以将SetModes
'逻辑合并到App
吗?如果是,那么将SetModes
编码为明确处理App
是不好的设计。
使用PubSub
,您可以从SetModes
发送请求消息。 App
会看到该消息,然后可以发送一条响应消息,SetModes
可以看到该消息。完全分离,完全异步。 SetModes
不需要了解App
,只需要了解消息格式。
答案 1 :(得分:0)
仅仅因为wx.Frame需要父级,并不意味着你不能在另一个无关联的类中分配对它的引用。只需将您的App实例与您正常工作的内容相同,但将引用传递给您的SetModes:
app = App(parent)
setModes = SetModes()
setModes.GetModes = app
这归结为程序的设计问题。小部件需要父母。