使用 wxPython Phoenix 创建媒体播放器时出现类型错误
Typerror when creating media player with wxPython Pheonix
一直在尝试使用 wx.media 模块在 wx.Python Phoenix (Python 3.5.2) 中创建媒体播放器以播放电影预告片。
当 运行 以下代码时,它会引发 TypeError
:
TypeError: __init__() takes 1 positional argument but 2 were given
我似乎无法找到引发此错误的位置。
我是面向对象编程的新手,所以代码中也可能存在其他逻辑错误。
以下是到目前为止的代码:
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()`
代码应打开一个 window,在其中按下 'Play' 按钮 (button1),应播放名为 'Trailer.wmv' 的电影预告片。
任何有关打字错误或预告片播放的帮助将不胜感激。
将 media.__init__()
函数中的 super()
调用更改为:
super().__init__()
你有:
button1.Bind(wx.EVT_BUTTON,media)
其中 media
是 class。这样做没关系,尽管有点不合常规。问题是事件处理程序总是使用一个参数来调用,该参数表示已发送事件的详细信息。所以 wxPython 试图调用 media(event)
,因为它是一个 class,Python 变成 media.__init__(self, event)
并且你的代码只接受一个参数,所以它引发异常。
也就是说,更好的设计是在框架的 __init__
中创建媒体控件作为面板的子项,然后只执行 Load
和 Play
按钮事件处理程序。
一直在尝试使用 wx.media 模块在 wx.Python Phoenix (Python 3.5.2) 中创建媒体播放器以播放电影预告片。
当 运行 以下代码时,它会引发 TypeError
:
TypeError: __init__() takes 1 positional argument but 2 were given
我似乎无法找到引发此错误的位置。 我是面向对象编程的新手,所以代码中也可能存在其他逻辑错误。 以下是到目前为止的代码:
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()`
代码应打开一个 window,在其中按下 'Play' 按钮 (button1),应播放名为 'Trailer.wmv' 的电影预告片。 任何有关打字错误或预告片播放的帮助将不胜感激。
将 media.__init__()
函数中的 super()
调用更改为:
super().__init__()
你有:
button1.Bind(wx.EVT_BUTTON,media)
其中 media
是 class。这样做没关系,尽管有点不合常规。问题是事件处理程序总是使用一个参数来调用,该参数表示已发送事件的详细信息。所以 wxPython 试图调用 media(event)
,因为它是一个 class,Python 变成 media.__init__(self, event)
并且你的代码只接受一个参数,所以它引发异常。
也就是说,更好的设计是在框架的 __init__
中创建媒体控件作为面板的子项,然后只执行 Load
和 Play
按钮事件处理程序。