将静态文本添加到单独的类中的单独面板(wxpython)

时间:2012-06-24 05:13:39

标签: wxpython

我有一个笔记本,它有自己的类,在那个笔记本我有一个检查按钮,我试图绑定检查按钮显示静态文本在一个单独的面板上,在一个单独的类中。

实施例

class ButtonPage(wx.Notebook)
    def __init__(etc.....):
        but_img = wx.Bitmap('./button.png',wx.BITMAP_TYPE_PNG)
    self.but_img = wx.StaticBitmap(self,bitmap=but_img,pos=((10,170)),style=wx.NO_BORDER)

class PanelPage(wx.Frame)
    def __init__(etc....)
    self.mainPanel = wx.Panel(self,etc....)

那么如何在“按钮页面”中绑定此按钮以在PanelPage上显示静态文本(如果它们位于2个单独的类中)。我习惯于制作按钮的父级(自我),但在这个例子中看到这样做是没有意义的....

编辑:好的,我确实弄明白了。但由于某种原因,wx.StaticText不响应EVT调用。任何想法为什么会这样?周围的方式?

2 个答案:

答案 0 :(得分:0)

我不明白你想要什么。 StaticText只是一个标签。用户不与标签交互,因此该小部件确实没有任何事件。您可能能够为标签所在的屏幕部分绑定一些鼠标事件,但我认为就是这样。

在wxPython中使两个类相互通信的好方法是使用pubsub。这是您的教程http://www.blog.pythonlibrary.org/2010/06/27/wxpython-and-pubsub-a-simple-tutorial/

编辑:要更改Notebook中显示的页面,您需要使用Notebook的SetSelection()方法或ChangeSelection方法。假设两个面板都在同一个笔记本中,您只需调用Notebook实例来更改页面。即使没有pubsub,这也应该有用。

但是,如果你在谈论笔记本以外的东西,那么pubsub方法绝对是可行的方法。

答案 1 :(得分:0)

对于一个快速的脏解决方案,您可以通过init方法将对StaticText的引用传递到'Button Page',然后您可以将Button Page类中的方法绑定到EVT_BUTTON事件并从那里打电话给SetLabel

一个稍微好一点的解决方案是在父级别执行此操作,通过ButtonPage和PanelPages是笔记本电脑上的兄弟姐妹的声音,因此您可以从笔记本类中绑定ButtonPage中的按钮,并使用相同的方法如上。让父母做这件事而不是通过兄弟姐妹的对象/方法的引用会更好一些。

我只是觉得如果它只是一个小项目而你需要快速开展工作,我会提到这个

另外,Mikes解决方案需要更多的工作来设置并掌握(但值得)。它更具可读性,使用上面的解决方案会将代码“耦合”很多,如果将来发生变化,你可能会有点乱解。