0

我试图SetLabel()在一个不是框架类的类中使用 wxPython。这基本上是我的框架:

class tradeWindow(wx.Frame):
    def __init__(self, parent, id):
        wx.Frame.__init__(self, parent, id, "Exchange", size = (500, 190), pos = (390, 300), style = wx.MINIMIZE_BOX | wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX | wx.CLIP_CHILDREN)
        panel = wx.Panel(self)
        self.priceLabel = wx.StaticText(self, -1, label = x, pos = (84, 10))

现在我想从课外设置 priceLabel 的标签。在课堂内,self.priceLabel.SetLabel(x)可以使用,但tradeWindow.priceLabel.SetLabel(x)不能在课堂外使用。

4

1 回答 1

0

要在类之外设置类属性,您必须传递一个引用或使用类似 pubsub 的东西。假设您有从第一帧 (tradeWindow) 生成的第二帧。创建第二个框架时,将“self”作为对原始框架的引用传递给它:

self.newFrame = NewFrame(self)

然后在你的 NewFrame 的初始化中,你会有这样的东西:

def __init__(self, parentFrame):
    wx.Frame.__init__(self, None, title="New Frame")
    self.parentFrame = parentFrame

然后你可以做self.parentFrame.priceLabel.SetLabel

另一种解决方案是在创建向其发布消息的侦听器时使用 pubsub 之类的东西。当侦听器收到消息时,它会触发一个事件,您可以使用该事件来设置标签。您可以在此处阅读有关 pubsub 的更多信息:http: //www.blog.pythonlibrary.org/2010/06/27/wxpython-and-pubsub-a-simple-tutorial/

于 2013-03-13T18:11:38.273 回答