2013-03-13 2 views
0

Я пытаюсь использовать wxPython's SetLabel() в классе, который не является классом фрейма. Вот в основном то, что у меня есть для кадра:wxPython SetLabel внешний класс рамки?

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) не работает вне класса.

+0

Не могли бы вы опубликовать минимальный рабочий пример? – Anna

ответ

0

Чтобы установить атрибуты класса вне класса, вам нужно будет передать ссылку или использовать что-то вроде pubsub. Скажем, у вас есть второй кадр, который создается из первого кадра (tradeWindow). При создании второго кадра, передать «я» к нему в качестве ссылки на исходный кадр:

self.newFrame = NewFrame(self) 

Затем в INIT 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/

+0

Но поскольку у него есть 'self', вы можете использовать его только в классе, не так ли? – tkbx

+0

Вы используете «self» для обращения к экземпляру, который в данный момент активен. Таким образом, «я» в NewFrame применяется к методам NewFrame. Но вы заметите, что мы передали это «я» от родителя. Это второй аргумент в инициализации NewFrame (т. Е. ParentFrame). Теперь, если мы создадим parentFrame в переменную экземпляра, выполнив self.parentFrame = parentFrame, тогда мы создадим ссылку на родительский фрейм, который мы можем использовать для изменения или выполнения его методов и виджетов –

Смежные вопросы