1

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

前任。

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 个单独的类中)。我习惯于制作按钮(self)的父级,但在这种情况下看到这样做没有任何意义......

编辑:好的,我实际上想通了。但由于某种原因 wx.StaticText 不响应 EVT 调用。任何想法为什么会这样?解决方法?

4

2 回答 2

0

对于一个快速的肮脏解决方案,您可以通过例如 init 方法将对 StaticText 的引用传递给您的“按钮页面”,然后您可以将按钮页面类中的方法绑定到 EVT_BUTTON 事件并SetLabel调用那里的标签。

一个更好的解决方案是在父级别执行此操作,因为 ButtonPage 和 PanelPages 是笔记本上的兄弟姐妹,因此您可以从笔记本类中绑定 ButtonPage 中的按钮,并使用与上面相同的方法. 让父母这样做比通过兄弟对象/方法的引用要好一些。

我只是想如果它只是一个小项目并且你需要快速工作的话我会提到这个

或者,迈克斯解决方案需要更多的工作来设置和掌握(但这是值得的)。它更具可读性,并且使用上面的解决方案将使代码“耦合”很多,如果将来事情发生变化,你会有一些混乱需要解开。

于 2012-06-25T16:10:44.307 回答
0

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

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

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

但是,如果您谈论的是笔记本之外的东西,那么 pubsub 方法绝对是要走的路。

于 2012-06-25T14:42:32.573 回答