Typerror与wxPython的凤凰
问题描述:
创建媒体播放器时,一直试图以播放电影预告片创建使用wx.media模块wx.Python凤凰(Python的3.5.2)中的媒体播放器。 当运行下面的代码它提出了一个TypeError
:我似乎 TypeError: __init__() takes 1 positional argument but 2 were given
Typerror与wxPython的凤凰
不能从那里引发此错误找到。 我是面向对象编程的新手,所以代码中也有可能存在其他逻辑错误。 下面是到目前为止的代码:
import wx,wx.media
class window(wx.Frame):
def __init__(self,parent,id):
wx.Frame.__init__(self,parent,id,title='Media Player')
panel1=wx.Panel(self)
button1=wx.Button(panel1,-1,'play')
button1.Bind(wx.EVT_BUTTON,media)
class media(wx.media.MediaCtrl):
def __init__(self):
super(media,media).__init__(self)
wx.media.MediaCtrl.Create(self,frame,id=-1,fileName='Trailer.wmv')
wx.media.MediaCtrl.Load(self,'Trailer.wmv')
wx.media.MediaCtrl.ShowPlayerControls(self)
wx.media.MediaCtrl.Play(self)
if __name__=='__main__':
app=wx.App()
frame=window(parent=None, id=-1)
frame.Show()
app.MainLoop()`
的代码应该打开它与“播放”按钮(按钮1)命名为“Trailer.wmv”的电影预告片的新闻应该播放的窗口。 任何帮助typerror或拖车播放将不胜感激。
答
您有:
button1.Bind(wx.EVT_BUTTON,media)
其中media
是一个类。这是可以做的,虽然有点不合常规。问题是事件处理程序总是通过一个参数来调用,该参数表示发送的事件的详细信息。所以wxPython试图调用media(event)
这是因为它是一个类,Python变成了media.__init__(self, event)
并且你的代码只接受一个参数,所以它引发了一个异常。
这就是说,一个更好的设计是建立在框架的__init__
作为面板的子媒体控制,然后做只是在按键事件处理Load
和Play
。
答
更改super()
呼叫您media.__init__()
功能:
super().__init__()
只是做,不幸的是同一类型错误出现 –
请张贴完整回溯 – MrLeeh
这是由当时的完整回溯你按下按钮: http://imgur.com/a/AhRwW –