#python #wxpython #media-player
#python #wxpython #медиаплеер
Вопрос:
Я хочу написать код, который может сразу начать воспроизведение видео после загрузки файла. Но wx.media вообще не воспроизводит видеофайл. Я могу загрузить файл, но не воспроизвести его.
import wx
import wx.media
class Panel1(wx.Panel):
def __init__(self, parent, id):
wx.Panel.__init__(self, parent, -1, style=wx.TAB_TRAVERSAL | wx.CLIP_CHILDREN)
# Create some controls
try:
self.mc = wx.media.MediaCtrl(self, style=wx.SIMPLE_BORDER)
except NotImplementedError:
self.Destroy()
raise
self.mc.Load('output2.avi')#video file path
self.mc.Play()
app = wx.App()
# create a window/frame, no parent, -1 is default ID
frame = wx.Frame(None, -1, "play audio and video files", size=(600, 600))
# call the derived class
Panel1(frame, -1)
frame.Show(1)
app.MainLoop()
Я был бы очень благодарен всем вам, если бы вы могли помочь мне в этом. Как воспроизвести файл сразу после загрузки в media.
Ответ №1:
Вы можете сделать это:
self.Bind(wx.media.EVT_MEDIA_LOADED, self.OnMediaLoaded)
def OnMediaLoaded(self, event):
self.mc.Play()
self.mc.Load('output2.avi')
Ответ №2:
Я не могу найти, в чем проблема в вашем коде. Возможно, avi-ролик короткий и сразу останавливается. Или, может быть, проблема с настройкой wxphyton.
Итак, я создал небольшое приложение с помощью wxFormBuilder. Он имеет правильную настройку wxpython и после воспроизведения фильма продолжает перезапускать фильм.
Я использую этот avi-фильм для тестирования. Это 2 файла python, которые показывают фильм сразу после запуска.
Сгенерированный wxFormBuilder код:
# -*- coding: utf-8 -*-
###########################################################################
## Python code generated with wxFormBuilder (version 3.9.0 Nov 17 2019)
## http://www.wxformbuilder.org/
##
## PLEASE DO *NOT* EDIT THIS FILE!
###########################################################################
import wx
import wx.xrc
###########################################################################
## Class wxfbFrameMain
###########################################################################
class wxfbFrameMain ( wx.Frame ):
def __init__( self, parent ):
wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 500,300 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )
self.SetSizeHints( wx.DefaultSize, wx.DefaultSize )
bSizer5 = wx.BoxSizer( wx.VERTICAL )
self.statictext_player = wx.StaticText( self, wx.ID_ANY, u"Player", wx.DefaultPosition, wx.DefaultSize, 0 )
self.statictext_player.Wrap( -1 )
bSizer5.Add( self.statictext_player, 0, wx.ALL, 5 )
self.SetSizer( bSizer5 )
self.Layout()
self.Centre( wx.BOTH )
def __del__( self ):
pass
Приложение на Python:
import os
import wx
import wx.media
from wxfbTest import wxfbFrameMain
class FrameMain(wxfbFrameMain):
def __init__(self):
super(FrameMain, self).__init__(None)
avi_file = r'file_example_AVI_480_750kB.avi'
sizer = self.statictext_player.GetContainingSizer()
self.media_ctrl = self.mc = wx.media.MediaCtrl(self, style=wx.SIMPLE_BORDER)
sizer.Add( self.media_ctrl, 50, wx.ALL | wx.EXPAND, 5 )
if os.path.exists(avi_file):
self.media_ctrl.Load(avi_file)
self.Bind(wx.media.EVT_MEDIA_STOP, self._on_media_stop)
self.Show()
self.media_ctrl.Play()
def _on_media_stop(self, event):
self.media_ctrl.Play()
if __name__=='__main__':
app = wx.App()
frame_main = FrameMain()
app.MainLoop()