2012-10-06 3 views
0

이 프로그램은 버튼을 클릭하면 wx.textctrl이 "클릭 된"것으로 기록됩니다.wxpython을 사용하는이 프로그램은 실행되지 않습니다

실행되지 않습니다.

import wx 

class Mainwindow(wx.Frame): 

    def __init__(self, parent, id, title): 
     wx.Frame.__init__(self, parent, id, title, size=(300, 300)) 
     panel = wx.Panel(self, -1) 

     vbox = wx.BoxSizer(wx.VERTICAL) 

     hbox1 = wx.BoxSizer(wx.HORIZONTAL) 
     btn = wx.Button(panel, -1, 'OK', size=(70, 30)) 
     button = Click_btn() 
     btn.Bind(wx.EVT_BUTTON, button.click_btn) 
     hbox1.Add(btn, 0) 
     vbox.Add(hbox1, 0) 

     hbox2 = wx.BoxSizer(wx.HORIZONTAL) 
     self.tc = wx.TextCtrl(panel, -1, style=wx.TE_MULTILINE) 
     hbox2.Add(self.tc, 1, wx.EXPAND) 
     vbox.Add(hbox2, 1, wx.EXPAND) 

     panel.SetSizer(vbox) 

     self.Centre() 
     self.Show(True) 

class Click_btn(Mainwindow): 
    def click_btn(self, event): 
     Mainwindow.tc.WriteText("clicked\n") 

if __name__=="__main__": 
    app = wx.App() 
    Mainwindow(None, -1, u"sample") 
    app.MainLoop() 

오류 패널 disapper.

아마도 Click_btn 클래스가 잘못되었습니다.

어디서 변경해야합니까?

답변

0

당신은 당신의 코드에서 여러 개념을 엉망 :

  • Click_btn 아마 MainWindow에서 파생되지해야하지만, wx.Button에서.
  • click_btnMainWindow에 액세스하지 말고 MainWindow의 인스턴스에 액세스해야합니다.
  • 가장 간단한 해결책은 MainWindow의 메서드로 이벤트 처리기를 구현하고 해당 이벤트 핸들러를 버튼에 바인딩하는 것입니다.

나는 http://wiki.wxpython.org/Getting%20Startedhttp://www.diveintopython.net/object_oriented_framework/index.html을 읽은 다음 다시 시도해 볼 것을 제안합니다.

0

Click_btn 클래스는 Mainwindow 클래스의 하위 클래스이며, 에 3 개의 인수가 포함되어 있습니다. 새 Click_btn을 만들면 어떤 인수도 전달하지 않습니다.

자체 클래스에서 click_btn을 사용하는 것은 실제로 의미가 없습니다. Mainwindow 클래스로 옮깁니다. 다음 작동해야합니다 :

import wx 

class Mainwindow(wx.Frame): 

    def __init__(self, parent, id, title): 
     wx.Frame.__init__(self, parent, id, title, size=(300, 300)) 
     panel = wx.Panel(self, -1) 

     vbox = wx.BoxSizer(wx.VERTICAL) 

     hbox1 = wx.BoxSizer(wx.HORIZONTAL) 
     btn = wx.Button(panel, -1, 'OK', size=(70, 30)) 
     btn.Bind(wx.EVT_BUTTON, self.click_btn) 
     hbox1.Add(btn, 0) 
     vbox.Add(hbox1, 0) 

     hbox2 = wx.BoxSizer(wx.HORIZONTAL) 
     self.tc = wx.TextCtrl(panel, -1, style=wx.TE_MULTILINE) 
     hbox2.Add(self.tc, 1, wx.EXPAND) 
     vbox.Add(hbox2, 1, wx.EXPAND) 

     panel.SetSizer(vbox) 

     self.Centre() 
     self.Show(True) 

    def click_btn(self, event): 
     self.tc.WriteText("clicked\n") 


if __name__=="__main__": 
    app = wx.App() 
    Mainwindow(None, -1, u"sample") 
    app.MainLoop() 
관련 문제