2012-10-06 23 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() 

錯誤面板立即消失。

也許Click_btn類錯了。

我應該在哪裏更換?

回答

0

您的Click_btn類是您的Mainwindow類的一個子類,它將3個參數與init及其本身一起使用。當你創建一個新的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() 
相關問題