2017-06-16 75 views
0
# -*- 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() 

我正在創建一個面板來搜索和播放jpg,avi,mp4等文件夾。Wxpython wx.media視頻和圖像控制有問題

def mediaPlay()部分,jpg使圖片文件可見10秒,並且電影被播放直到播放時間結束。

問題是,if = '.jpg',只有一個print ('test1')聲明需要執行,'test2'將同時顯示。所以time.sleep()適用於if or else聲明。爲什麼是這樣?

+0

什麼是Peneal Sizer,我可以在哪裏買到? –

回答

0

在此功能中,您將用文件後綴列表覆蓋self.folderSerach

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 mediaPlay(self, event): 
    if self.folderSerach[self.mediaCounter].endswith('.jpg'): 
     self.media.Play() 
     time.sleep(10) 
     print('test1') 
    else: 
     self.media.Play() 
     print('test2') 

self.folderSerach這重寫意味着你不必在def medialoop再次重新加載(刪除代碼)

另外,os.listdir()(至少在Linux上)需要一個參數,即os.listdir('./')
並且,刪除def auto函數它不被使用

+0

非常感謝。問題已經解決。我對你瞭解得非常多。 :) –

+0

你好,我有另一個問題。 用一個簡短的'time.sleep'來停止圖像是很好的。再次感謝您的教學。 如果您給Linux一個很長的睡眠時間,該進程可能會掛起或幀畫面變黑。在這種情況下,你需要配置Linux系統嗎?或者它是一個系統性能問題? 除了'time.sleep'之外,還有另外一個函數可以停止圖像嗎? 我也想知道是否整個幀閃爍是正常的過程中轉到圖像 - >視頻 - > ..->這樣通過轉動分支代碼。 –