2016-12-25 67 views
0

創建媒體播放器時,一直試圖以播放電影預告片創建使用wx.media模塊wx.Python鳳凰(Python的3.5.2)中的媒體播放器。 當運行下面的代碼它提出了一個TypeError:我似乎 TypeError: __init__() takes 1 positional argument but 2 were givenTyperror與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或拖車播放將不勝感激。

回答

2

您有:

button1.Bind(wx.EVT_BUTTON,media) 

其中media是一個類。這是可以做的,雖然有點不合常規。問題是事件處理程序總是通過一個參數來調用,該參數表示發送的事件的詳細信息。所以wxPython試圖調用media(event)這是因爲它是一個類,Python變成了media.__init__(self, event)並且你的代碼只接受一個參數,所以它引發了一個異常。

這就是說,一個更好的設計是建立在框架的__init__作爲面板的子媒體控制,然後做只是在按鍵事件處理LoadPlay

0

更改super()呼叫您media.__init__()功能:

super().__init__()

+0

只是做,不幸的是同一類型錯誤出現 –

+0

請張貼完整回溯 – MrLeeh

+0

這是由當時的完整回溯你按下按鈕: http://imgur.com/a/AhRwW –