2014-07-21 2 views
0

저는 파이썬에 익숙하지 않고 배우려고합니다. 양식의 정보를 기록하는 데스크톱 응용 프로그램을 만들고 있습니다. 다른 프레임에서 재사용 할 몇 개의 패널 객체를 만들고 싶습니다. MyFrame 클래스의 패널 객체에서 이벤트를 바인딩하고 싶습니다. 이것이 가능한지 확실하지 않습니다. 여기 내 코드입니다 :Python이 다른 파일의 이벤트를 바인딩합니다.

main.py :

import wx 
from testPanel import testPanel 

class MyFrame(wx.Frame): 
    def OnClick(self,event): 
     print "Clicked" 

    def __init__(self, parent, ID, title): 
     wx.Frame.__init__(self, parent, ID, title=title, size=(500,200)) 
     ... 
     myList = ['Project1', 'Project2', 'Project3', 'Project4'] 
     myPanel = testPanel(self,-1,name="myPanel",lbl="Label: ", List=myList) 
     self.authorTxt = wx.TextCtrl(self, size=(140,-1)) 
     self.button =wx.Button(self, label="Save") 
     self.Bind(wx.EVT_BUTTON, self.OnClick, self.button) 
     ... 
     box = wx.BoxSizer(wx.VERTICAL) 
     box.Add(myPanel, 1, wx.EXPAND) 
     box.Add(self.authorTxt, 1, wx.EXPAND) 
     box.Add(self.button, 1, wx.EXPAND) 
     ... 

testPanel.py

import wx 
class testPanel(wx.Panel): 
    def EvtComboBox(self, event): 
     print"%s was selected" % event.GetString() 

    def __init__(self, parent, ID, name, lbl, List = []): 
     wx.Panel.__init__(self, parent, ID) 
     sizer = wx.BoxSizer(wx.HORIZONTAL) 
     lbl = wx.StaticText(self, label=lbl, size=(-1,1)) 
     cb = wx.ComboBox(self, size=(-1, 1), choices=List, style=wx.CB_DROPDOWN) 
     self.Bind(wx.EVT_COMBOBOX, self.EvtComboBox, cb) 
     ... 

나는 "authorTxt"편집 및 콤보 상자 항목은에 따라 편집 할 텍스트 필드를 만들려고 노력하고 있어요 선택된. main.py의 testPanel.py에서 ComboBox 이벤트를 바인딩하는 방법이 있습니까?

도움이 될 것입니다. 그럼 당신이 할 수있는

self.cb = ... 

:

답변

1

나는 다음과 같은 찾고있는 생각 :

먼저, 당신은 testPanel에 CB를 정의 할 때로 할

self.Bind(wx.EVT_COMBOBOX, self.EvtComboBox, myPanel.cb) 

경우 self.EvtComboBox은 MyFrame에서 정의해야하는 새로운 기능입니다.

저 sa ID는, 내가보기 엔 당신이이 상황에서 PubSub를 사용하는 것이 좋습니다 :

http://wiki.wxpython.org/WxLibPubSub

http://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern

편집 : CB는 testPanel

+0

의 구성원이어야 응답 해 주셔서 감사합니다 필요! MyFrame에'self.Bind (wx.EVT_COMBOBOX, self.EvtComboBox, myPanel.cb)'를 추가 한 후 다음 오류가 발생했습니다. self.Bind (wx.EVT_COMBOBOX, self.EvtComboBox, myPanel.cb) AttributeError : type object ' testPanel '에는'cb '속성이 없습니다 – user908759

+0

굉장! 감사! PubSub 체크 아웃하겠습니다. – user908759

관련 문제