这个程序是单击按钮时写入“clicked”的wx.textctrl。
此代码运行时没有错误。
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) #line 12
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): #line 27
self.tc.WriteText("clicked\n") #line 28
if __name__=="__main__":
app = wx.App()
Mainwindow(None, -1, u"sample")
app.MainLoop()
但如果此代码以这种方式更改,则会出错。
更改为第12行。
btn.Bind(wx.EVT_BUTTON, Click_btn.click_btn)
改为第27和28行。
class Click_btn:
def click_btn(self, event):
self.tc.WriteText("clicked\n")
错误是:Typeerror:必须使用Click_btn实例作为第一个参数调用unbound方法click_btn()(改为获取CommandEvent实例)
我不知道如何应对这个错误。
*后记
我读了答案,这段代码改变了。但它没有运行......
更改为第12行。
button = Click_btn()
btn.Bind(wx.EVT_BUTTON, button.click_btn)
更改为第27和28行。
class Click_btn(Mainwindow):
def click_btn(self, event):
Mainwindow.tc.WriteText("clicked\n")
请教点我应该改变。
答案 0 :(得分:2)
class Click_btn:
@classmethod
def click_btn(cls, event):
cls.tc.WriteText("clicked\n") #this will probably break now
这将允许您在类而不是类
的实例上调用它该课程为Click_btn
实例将是btn = Click_btn()
(btn是Click_btn的实例)
答案 1 :(得分:1)
首先,您应该从object
开始上课:
class Click_btn:
def click_btn(self, event):
self.tc.WriteText("clicked\n")
但那不是问题。要获得绑定方法,您必须像这样编写Bind
:
# create an instance
button = Click_btn()
# and now assign the click_btn method of that instance
btn.Bind(wx.EVT_BUTTON, button.click_btn)