2016-12-24 68 views
0

我想知道如何在wxpython for python 3.4(Phoenix版本3.0.3)中使用綁定方法和功能區按鈕,因爲我嘗試了所有可能的菜單方式和按鈕但是我有一個錯誤的時候的樣子:如何綁定事件到功能區按鈕點擊wxpython-phoenix

文件「C:\ Anaconda3 \ LIB \站點包\ WX \ core.py」,線1200,在_EvtHandler_Bind 斷言源是無或hasattr(來源,'GetId') 斷言錯誤

請幫助簡單的例子,如果可能的話。提前致謝。

回答

0

我找到了解決我的問題,通過使用

import wx.ribbon as RB 

代替:

import wx.lib.agw.ribbon as RB 

,並綁定:

import wx 
import wx.ribbon as RB 
# Class code goes here... 
self.ribbon = RB.RibbonBar(self,wx.NewId()) 
self.page_home = RB.RibbonPage(self.ribbon, wx.NewId(), "Home") 
self.panel1 = RB.RibbonPanel(self.page_home, wx.ID_ANY, "Panel#1") 
self.button_bar1 = RB.RibbonButtonBar(self.panel1) 
bmp = wx.ArtProvider.GetBitmap(wx.ART_NEW, wx.ART_OTHER, wx.Size(32, 32)) 
self.button_bar1_Exit = self.button_bar1.AddButton(wx.ID_ANY, "Exit", bmp, 'Close Window') 
self.button_bar1.Bind(RB.EVT_RIBBONBUTTONBAR_CLICKED, self.on_button_bar1) 
def on_button_bar1(self, event): 
    button = event.GetButton() 
    if button == self.button_bar1_Exit: 
     self.Close() 

我會離開我的答案,爲我工作完全沒有接受它一段時間給更好的想法的機會,如果沒有,我會接受我的。

+0

我其實不是很專業與wxPython的,這樣我的問題的一部分,任何一個可以告訴我是什麼 – Hzine

+0

遺憾的區別,但我的意思是「wx.ribbon」和「wx.lib之間。 agw.ribbon「?如果有必要另外提問,請告訴我。 – Hzine

+0

'wx.ribbon'包含C++ ribbon類的包裝。 'wx.lib.agw.ribbon'包含一個只用Python代碼編寫的替代實現。通常情況下,這樣的內容大多與封裝的C++版本兼容,但是它們往往更易於Python開發人員進行調試,使用自己的自定義代碼進行擴展等。 – RobinDunn

0

如果您爲其分配ID而不是使用wx.ID_ANY,則可以將特定事件處理程序綁定到每個按鈕。它比單個事件處理程序中的/ elif/else塊的大小和增長更清潔。

import wx 
import wx.ribbon as RB 

BUTTON_EXIT_ID = wx.NewId() 

# Class code goes here... 
self.ribbon = RB.RibbonBar(self,wx.NewId()) 
self.page_home = RB.RibbonPage(self.ribbon, wx.NewId(), "Home") 
self.panel1 = RB.RibbonPanel(self.page_home, wx.ID_ANY, "Panel#1") 
self.button_bar1 = RB.RibbonButtonBar(self.panel1) 
bmp = wx.ArtProvider.GetBitmap(wx.ART_NEW, wx.ART_OTHER, wx.Size(32, 32)) 
self.button_bar1_Exit = self.button_bar1.AddButton(BUTTON_EXIT_ID, "Exit", bmp, 'Close Window') 
self.button_bar1.Bind(RB.EVT_RIBBONBUTTONBAR_CLICKED, self.on_exit, id=BUTTON_EXIT_ID) 

def on_exit(self, event): 
    self.Close()