我有一个名为WxFrame的类,它创建了一个wxPython框架。我添加了一个名为createRunButton的方法,它接收self和pydepp,它是PyDEPP类的对象
import wx
class WxFrame(wx.Frame):
def __init__(self, parent, title):
super(WxFrame, self).__init__(parent, title=title)
self.Maximize()
self.Show()
def createRunButton(self,pydepp):
#pydepp.run()
self.runButton = wx.Button(self, label="Run")
self.Bind(wx.EVT_BUTTON, pydepp.run, self.runButton
这是PyDEPP类:
class PyDEPP:
def run(self):
print "running"
我实例化并运行它:
import wx
from gui.gui import WxFrame
from Depp.Depp import PyDEPP
class PyDEPPgui():
"""PyDEPPgui create doc string here ...."""
def __init__(self,pydepp):
self.app = wx.App(False)
##Create a wxframe and show it
self.frame = WxFrame(None, "Cyclic Depp Data Collector - Ver. 0.1")
self.frame.createRunButton(pydepp)
self.frame.SetStatusText('wxPython GUI successfully initialised')
if __name__=='__main__':
#Launch the program by calling the PyDEPPgui __init__ constructor
pydepp = PyDEPP()
pydeppgui = PyDEPPgui(pydepp)
pydeppgui.app.MainLoop()
运行上述代码时出现的错误是: TypeError:run()只取1个参数(给定2个)
但是,如果我注释掉绑定并取消注释pydepp.run()行,那么它可以正常工作。
答案很明显我很确定,但我从未研究过CompSci或OO编码。
答案 0 :(得分:2)
事件作为参数传递给回调函数。这应该有效:
class PyDEPP:
def run(self, event):
print "running"
答案 1 :(得分:1)
当触发事件时,会将两个参数传递给回调函数run():触发事件的对象和wxEvent对象。由于run只接受代码中的一个参数,因此解释器会给出该错误,该错误告诉您已经提供了太多参数。
替换
run(self): # Expects one argument, but is passed two. TypeError thrown
与
run(self, event): # Expects two arguments, gets two arguments. All is well
它应该有用。
这是一个错误告诉你很多关于代码有什么问题的实例。鉴于“run()只需要1个参数(给定2个)”,你会立即知道你不小心通过了额外的参数,或者运行应该期待另一个参数。