2016-12-25 8 views
0

пытался создать медиаплеер в wx.Python Phoenix (Python 3.5.2) с помощью модуля wx.media, чтобы играть в трейлер фильма. При выполнении следующего кода он поднимает TypeError: Я не могу TypeError: __init__() takes 1 positional argument but 2 were givenTyperror при создании медиаплеера с помощью wxPython Pheonix

найти, откуда возникает эта ошибка. Я новичок в объектно-ориентированном программировании, поэтому вполне возможно, что в коде есть и другие логические ошибки. Ниже приведен код до сих пор:

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()` 

Код должен открыть окно, в котором при нажатии кнопки «Play» (button1) трейлер фильма под названием «Trailer.wmv» должны быть воспроизведены. Любая помощь с тираром или воспроизведением трейлера будет оценена по достоинству.

ответ

2

У вас есть:

button1.Bind(wx.EVT_BUTTON,media) 

где media является класс. Это нормально, хотя немного нетрадиционных. Проблема заключается в вызове обработчиков событий с параметром, который представляет детали для отправленного события. Поэтому wxPython пытается вызвать media(event), который, поскольку это класс, Python превращается в media.__init__(self, event), и ваш код принимает только один параметр, поэтому он вызывает исключение.

Тем не менее, лучше дизайн будет создать элемент управления медиа в врезки __init__ как ребенок панели, а затем сделать только Load и Play в обработчике кнопки события.

0

Изменение super() вызова в вашей media.__init__() функции:

super().__init__()

+0

Просто сделал, к сожалению, то же самое TypeError возникает –

+0

Пожалуйста, пост полный отслеживающий – MrLeeh

+0

Это полная TraceBack к тому времени, вы нажимаете кнопку: http://imgur.com/a/AhRwW –