2012-06-24 22 views
1

我有一個筆記本,它有它自己的類,在那個筆記本我有一個checkbutton,我試圖綁定該檢查按鈕顯示靜態文本一個單獨的小組,在一個單獨的班級。添加一個靜態文本到單獨的類中的一個單獨的面板(wxpython)

Ex。

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....) 

那麼如何在'Button Page'中綁定這個按鈕來在PanelPage上顯示一個statictext,如果它們在2個獨立的類中。我用它來製作按鈕的父母(自我),但是看到在這種情況下這樣做沒有任何意義......

編輯:好吧我其實已經想通了。但由於某些原因,wx.StaticText不響應EVT調用。任何想法,爲什麼這是?方法呢?

回答

0

我不明白你想要什麼。 StaticText只是一個標籤。用戶不會與標籤進行交互,所以這個小部件確實沒有任何事件。您可能能夠爲標籤所在的屏幕部分綁定一些鼠標事件,但我認爲就是這樣。

一個讓wxPython中的兩個類彼此交談的好方法是使用pubsub。下面是你http://www.blog.pythonlibrary.org/2010/06/27/wxpython-and-pubsub-a-simple-tutorial/

編輯教程:要改變一個筆記本中所顯示的網頁,你會想使用筆記本的爲setSelection()方法或ChangeSelection方法。假設兩個面板都在同一個筆記本中,您只需調用Notebook實例即可更改頁面。即使沒有pubsub,這也可以工作。

但是,如果你正在談論筆記本外的事情,那麼pubsub方法肯定是要走的路。

+0

他不想直接與標籤互動,只需在另一個面板上按下按鈕時更新/顯示 – GP89

+0

好的。這就說得通了。 –

0

對於一些骯髒的解決方案,您可以通過init方法將StaticText的引用傳遞給您的'Button Page',然後您可以將Button Page類中的方法綁定到EVT_BUTTON事件,並從那裏的標籤上呼叫SetLabel

一個稍微好一點的解決方案,雖然是在父級執行此操作,但ButtonPage和PanelPages是筆記本上的兄弟節點,所以您可以綁定ButtonPage中的按鈕和筆記本類,並使用與上述相同的方法。有一位父母在做這件事,而不是通過一個兄弟姐妹的對象/方法的參考。

我只是想,如果只是一個小項目,我會提到這一點,你需要得到的東西很快工作

或者米凱什解決方案是多一點的工作,以建立並獲得與交手(但它的值得)。它更具可讀性,使用上面的解決方案將會使代碼「耦合」很多,如果事情在未來發生變化,你將會陷入一團糟。

相關問題