# -*- coding: utf-8 -*-
import wx, wx.media
import sqlite3
import os
import time
class MainFream(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None)
self.leftPanel = wx.Panel(self, size=(0,0))
self.media = wx.media.MediaCtrl(self,
#szBackend=wx.media.MEDIABACKEND_GSTREAMER,
szBackend=wx.media.MEDIABACKEND_WMP10,
size=(0,0),
style=wx.SIMPLE_BORDER | wx.ALIGN_CENTER_HORIZONTAL)
#Penael Sizer
self.hBoxSizer = wx.BoxSizer(wx.HORIZONTAL)
self.hBoxSizer.Add(self.leftPanel, 1, wx.EXPAND, 1)
self.hBoxSizer.Add(self.media, 1, wx.EXPAND, 1)
self.SetSizer(self.hBoxSizer)
#Video Image File Folder Serach & Load Play
self.mediaCounter = 0
self.folderSerach = [f for f in os.listdir() if f.endswith(('.wmv','mp4','avi','.jpg'))]
self.media.Load(self.folderSerach[self.mediaCounter])
self.media.Bind(wx.media.EVT_MEDIA_LOADED, self.mediaPlay, self.media)
self.media.Bind(wx.media.EVT_MEDIA_FINISHED, self.mediaLoop, self.media)
def auto(self):
self.TextShow()
wx.CallLater(1000, self.auto) #60min
def mediaPlay(self, event):
self.folderSerach = [x for f in os.listdir() for x in os.path.splitext(f) if x.endswith(('.wmv','mp4','avi','.jpg'))]
for i in self.folderSerach:
if i == '.jpg':
self.media.Play()
time.sleep(10)
print('test1')
else:
self.media.Play()
print('test2')
def mediaLoop(self, evnet):
self.media.Stop()
self.mediaCounter += 1
if self.mediaCounter > len(self.folderSerach) -1: self.mediaCounter = 0
self.folderSerach = [f for f in os.listdir() if f.endswith(('.wmv','mp4','avi','.jpg'))]
self.media.Load(self.folderSerach[self.mediaCounter])
if __name__ == '__main__':
app = wx.App()
fream = MainFream()
fream.Show(True)
app.MainLoop()
I am creating a panel to search and play jpg, avi, mp4, etc. in folders.
In the def mediaPlay()
section, jpg makes the picture file visible for 10 seconds, and the movie is played until the end of the playing time.
The question is, if = '.jpg'
, only one print ('test1')
statement needs to be executed, and 'test2' will be displayed at the same time. So time.sleep()
is applied to the if or else
statement. Why is this?
In this function you are overwriting self.folderSerach
with a list of file suffixes.
def mediaPlay(self, event):
self.folderSerach = [x for f in os.listdir() for x in os.path.splitext(f) if x.endswith(('.wmv','mp4','avi','.jpg'))]
for i in self.folderSerach:
if i == '.jpg':
self.media.Play()
time.sleep(10)
print('test1')
else:
self.media.Play()
print('test2')
replace it with:
def mediaPlay(self, event):
if self.folderSerach[self.mediaCounter].endswith('.jpg'):
self.media.Play()
time.sleep(10)
print('test1')
else:
self.media.Play()
print('test2')
This overwriting of self.folderSerach
means that you are having to re-load it again in def medialoop
(remove that code)
Also, os.listdir()
(at least on Linux) requires an argument i.e. os.listdir('./')
And, remove the def auto
function it is not used