我目前正在为Raspberry pi开发一个应用程序,但是在python中调用函数时遇到了一些问题。因为getInfo()函数使初始化时间过长。任何建议/帮助都将受到高度赞赏。
继承人代码:
from PyQt4 import QtCore, QtGui
from PyQt4.QtGui import *
import sys
import os
from os import system
from ffvideo import VideoStream
from threading import Thread
from time import sleep
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
_fromUtf8 = lambda s: s
vidDuration = []
vidCodec = []
frameMode = []
filespath = []
class VideoForm(QtGui.QMainWindow):
mycounter = 0
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.setWindowState(QtCore.Qt.WindowMaximized)
self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
self.setupUi(self)
def setupUi(self, MainWindow):
MainWindow.setObjectName(_fromUtf8("MainWindow"))
MainWindow.resize(750, 650)
MainWindow.setStyleSheet(_fromUtf8("QMainWindow {border-image: url(bg.jpg) ;}"))
self.centralwidget = QtGui.QWidget(MainWindow)
#self.centralwidget.setStyleSheet(_fromUtf8("background-color: rgb(0, 0, 0);"))
self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
self.horizontalLayout = QtGui.QHBoxLayout(self.centralwidget)
self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout"))
self.gridLayout_4 = QtGui.QGridLayout()
self.gridLayout_4.setObjectName(_fromUtf8("gridLayout_4"))
self.widget_2 = QtGui.QWidget(self.centralwidget)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.widget_2.sizePolicy().hasHeightForWidth())
self.widget_2.setSizePolicy(sizePolicy)
self.widget_2.setObjectName(_fromUtf8("widget_2"))
self.horizontalLayout_2 = QtGui.QHBoxLayout(self.widget_2)
self.horizontalLayout_2.setMargin(0)
self.horizontalLayout_2.setObjectName(_fromUtf8("horizontalLayout_2"))
self.widget = QtGui.QWidget(self.widget_2)
self.widget.setObjectName(_fromUtf8("widget"))
self.horizontalLayout_4 = QtGui.QHBoxLayout(self.widget)
self.horizontalLayout_4.setMargin(0)
self.horizontalLayout_4.setObjectName(_fromUtf8("horizontalLayout_4"))
self.gridLayout_5 = QtGui.QGridLayout()
self.gridLayout_5.setObjectName(_fromUtf8("gridLayout_5"))
self.widget_3 = QtGui.QWidget(self.widget)
self.widget_3.setObjectName(_fromUtf8("widget_3"))
self.horizontalLayout_3 = QtGui.QHBoxLayout(self.widget_3)
self.horizontalLayout_3.setMargin(0)
self.horizontalLayout_3.setObjectName(_fromUtf8("horizontalLayout_3" "border: 0px solid transparent;" "background: transparent;"))
self.gridLayout_7 = QtGui.QGridLayout()
self.gridLayout_7.setObjectName(_fromUtf8("gridLayout_7"))
self.lblTitle = QtGui.QLabel(self.widget_3)
self.lblTitle.setStyleSheet(_fromUtf8("color: rgb(255, 255, 255);" "border: 0px solid transparent;" "background: transparent;"))
self.lblTitle.setObjectName(_fromUtf8("lblTitle"))
self.gridLayout_7.addWidget(self.lblTitle, 2, 0, 1, 1)
self.lblGenre = QtGui.QLabel(self.widget_3)
self.lblGenre.setStyleSheet(_fromUtf8("color: rgb(255, 255, 255);" "border: 0px solid transparent;" "background: transparent;"))
self.lblGenre.setObjectName(_fromUtf8("lblGenre"))
self.gridLayout_7.addWidget(self.lblGenre, 3, 0, 1, 1)
self.btnPreview = QtGui.QToolButton(self.widget_3)
self.btnPreview.setFocusPolicy(QtCore.Qt.NoFocus)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(_fromUtf8("icons/movies-high.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.btnPreview.setIcon(icon)
self.btnPreview.setIconSize(QtCore.QSize(400, 400))
self.btnPreview.setToolButtonStyle(QtCore.Qt.ToolButtonIconOnly)
self.btnPreview.setObjectName(_fromUtf8("btnPreview"))
self.gridLayout_7.addWidget(self.btnPreview, 1, 0, 1, 1)
self.btnPreview.setStyleSheet(_fromUtf8("color: rgb(255, 255, 255);" "border: 0px solid transparent;" "background: transparent;"))
self.horizontalLayout_5 = QtGui.QHBoxLayout()
self.horizontalLayout_5.setObjectName(_fromUtf8("horizontalLayout_5"))
self.btnUp = QtGui.QToolButton(self.widget_3)
self.btnUp.setFocusPolicy(QtCore.Qt.ClickFocus)
self.btnUp.setStyleSheet(_fromUtf8("color: rgb(255, 255, 255);" "border: 0px solid transparent;" "background: transparent;"))
self.btnUp.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)
self.btnUp.setAutoRaise(False)
self.btnUp.setArrowType(QtCore.Qt.UpArrow)
self.btnUp.setObjectName(_fromUtf8("btnUp"))
self.horizontalLayout_5.addWidget(self.btnUp)
self.btnDown = QtGui.QToolButton(self.widget_3)
self.btnDown.setFocusPolicy(QtCore.Qt.ClickFocus)
self.btnDown.setStyleSheet(_fromUtf8("color: rgb(255, 255, 255);" "border: 0px solid transparent;" "background: transparent;"))
self.btnDown.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)
self.btnDown.setAutoRaise(False)
self.btnDown.setArrowType(QtCore.Qt.DownArrow)
self.btnDown.setObjectName(_fromUtf8("btnDown"))
self.horizontalLayout_5.addWidget(self.btnDown)
self.btnPlay = QtGui.QToolButton(self.widget_3)
self.btnPlay.setFocusPolicy(QtCore.Qt.ClickFocus)
self.btnPlay.setStyleSheet(_fromUtf8("color: rgb(255, 255, 255);" "border: 0px solid transparent;" "background: transparent;"))
self.btnPlay.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)
self.btnPlay.setAutoRaise(False)
self.btnPlay.setArrowType(QtCore.Qt.RightArrow)
self.btnPlay.setObjectName(_fromUtf8("btnPlay"))
self.horizontalLayout_5.addWidget(self.btnPlay)
self.btnBack = QtGui.QToolButton(self.widget_3)
self.btnBack.setFocusPolicy(QtCore.Qt.ClickFocus)
self.btnBack.setStyleSheet(_fromUtf8("color: rgb(255, 255, 255);" "border: 0px solid transparent;" "background: transparent;"))
self.btnBack.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)
self.btnBack.setAutoRaise(False)
self.btnBack.setArrowType(QtCore.Qt.LeftArrow)
self.btnBack.setObjectName(_fromUtf8("btnBack"))
self.horizontalLayout_5.addWidget(self.btnBack)
self.gridLayout_7.addLayout(self.horizontalLayout_5, 5, 0, 1, 1)
self.lblDuration = QtGui.QLabel(self.widget_3)
self.lblDuration.setStyleSheet(_fromUtf8("color: rgb(255, 255, 255);" "border: 0px solid transparent;" "background: transparent;"))
self.lblDuration.setObjectName(_fromUtf8("lblDuration"))
self.gridLayout_7.addWidget(self.lblDuration, 4, 0, 1, 1)
self.horizontalLayout_3.addLayout(self.gridLayout_7)
self.gridLayout_5.addWidget(self.widget_3, 0, 0, 1, 1)
self.horizontalLayout_4.addLayout(self.gridLayout_5)
self.horizontalLayout_2.addWidget(self.widget)
self.gridLayout_4.addWidget(self.widget_2, 1, 1, 1, 1)
self.label = QtGui.QLabel(self.centralwidget)
self.label.setStyleSheet(_fromUtf8("color: rgb(255, 255, 255);" "border: 0px solid transparent;" "background: transparent;"))
self.label.setObjectName(_fromUtf8("label"))
self.gridLayout_4.addWidget(self.label, 2, 0, 1, 1)
self.label_2 = QtGui.QLabel(self.centralwidget)
self.label_2.setStyleSheet(_fromUtf8("font: 40pt \"Ubuntu\";\n"
"color: rgb(17, 246, 255);" "border: 0px solid transparent;" "background: transparent;"))
self.label_2.setObjectName(_fromUtf8("label_2"))
self.gridLayout_4.addWidget(self.label_2, 0, 0, 1, 1)
self.lw = QtGui.QListWidget(self.centralwidget)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.lw.sizePolicy().hasHeightForWidth())
self.lw.setSizePolicy(sizePolicy)
self.lw.setFocusPolicy(QtCore.Qt.NoFocus)
self.lw.setStyleSheet(_fromUtf8("font: 22pt \"Ubuntu\";\n" "color: rgb(255, 255, 255);" "border: 1px solid white;" "background: transparent;"))
self.lw.setFrameShape(QtGui.QFrame.StyledPanel)
self.lw.setLineWidth(1)
self.lw.setMidLineWidth(0)
self.lw.setIconSize(QtCore.QSize(32, 32))
self.lw.setSpacing(1)
self.lw.setModelColumn(0)
self.lw.setUniformItemSizes(True)
self.lw.setObjectName(_fromUtf8("lw"))
self.gridLayout_4.addWidget(self.lw, 1, 0, 1, 1)
self.horizontalLayout.addLayout(self.gridLayout_4)
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
self.lw.setCurrentRow(0)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
MainWindow.setTabOrder(self.btnUp, self.btnDown)
MainWindow.setTabOrder(self.btnDown, self.btnPlay)
MainWindow.setTabOrder(self.btnPlay, self.btnBack)
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
self.lblTitle.setText(QtGui.QApplication.translate("MainWindow", "Title :", None, QtGui.QApplication.UnicodeUTF8))
self.btnPreview.setText(QtGui.QApplication.translate("MainWindow", "VIDEO", None, QtGui.QApplication.UnicodeUTF8))
self.btnUp.setText(QtGui.QApplication.translate("MainWindow", "UP", None, QtGui.QApplication.UnicodeUTF8))
self.btnUp.setShortcut(QtGui.QApplication.translate("MainWindow", "Up", None, QtGui.QApplication.UnicodeUTF8))
self.btnDown.setText(QtGui.QApplication.translate("MainWindow", "DOWN", None, QtGui.QApplication.UnicodeUTF8))
self.btnDown.setShortcut(QtGui.QApplication.translate("MainWindow", "Down", None, QtGui.QApplication.UnicodeUTF8))
self.btnPlay.setText(QtGui.QApplication.translate("MainWindow", "PLAY", None, QtGui.QApplication.UnicodeUTF8))
self.btnPlay.setShortcut(QtGui.QApplication.translate("MainWindow", "Return", None, QtGui.QApplication.UnicodeUTF8))
self.btnBack.setText(QtGui.QApplication.translate("MainWindow", "MAIN MENU", None, QtGui.QApplication.UnicodeUTF8))
self.btnBack.setShortcut(QtGui.QApplication.translate("MainWindow", "Backspace", None, QtGui.QApplication.UnicodeUTF8))
self.label_2.setText(QtGui.QApplication.translate("MainWindow", "VIDEO LIST", None, QtGui.QApplication.UnicodeUTF8))
self.btnUp.clicked.connect(self.UpNavi)
self.btnDown.clicked.connect(self.DownNavi)
self.btnBack.clicked.connect(self.BackToMain)
def BackToMain(self, MainWindow):
self.close()
def DownNavi(self,MainWindow):
if self.mycounter < self.lw.count() - 1:
self.mycounter += 1
self.lw.setCurrentRow(self.mycounter)
title = self.lw.item(self.mycounter).text()
duration = vidDuration[self.mycounter]
self.lblGenre.setText("Duration : %.2f" % duration)
title = title[:-4]
self.lblTitle.setText("Title : " + str(title[0:50]))
def UpNavi(self,MainWindow):
if self.mycounter > 0:
self.mycounter -= 1
self.lw.setCurrentRow(self.mycounter)
title = self.lw.item(self.mycounter).text()
duration = vidDuration[self.mycounter]
self.lblGenre.setText("Duration : %.2f" % duration)
title = title[:-4]
self.lblTitle.setText("Title : " + str(title[0:50]))
def getFiles(self, MainWindow):
self.filespath = []
self.filecounter = 0
rootDir = '/media'
for dirName, subdirList, fileList in os.walk(rootDir):
for fname in fileList:
ext = fname[-3:]
if ext in ['FLV','avi', 'mp4', 'mkv', 'vob','3gp','flv']:
self.filespath.append(os.path.join(dirName, fname))
self.lw.addItem(fname)
self.filecounter += 1
self.lw.setCurrentRow(0)
title = self.lw.item(0).text()
vs= VideoStream(self.filespath[0])
duration = vs.duration
self.lblGenre.setText("Duration : %.2f" % duration)
title = title[0:-4]
self.lblTitle.setText("Title : " + str(title[0:50]))
itemcount = self.lw.count()
if itemcount > 1:
itemcount = str(itemcount) + " Videos Available"
elif itemcount == 0:
itemcount = str(itemcount) + " Videos Available"
else:
itemcount = str(itemcount) + " Video Available"
self.label.setText(QtGui.QApplication.translate("MainWindow", itemcount, None, QtGui.QApplication.UnicodeUTF8))
def getInfo(self):
rootDir = '/media'
for dirName, subdirList, fileList in os.walk(rootDir):
for fname in fileList:
ext = fname[-3:]
if ext in ['avi', 'mp4', 'mkv', 'vob','3gp','flv']:
filespath.append(os.path.join(dirName, fname))
vs = VideoStream(os.path.join(dirName, fname))
vidDuration.append(vs.duration)
vidCodec.append(vs.codec_name)
frameMode.append(vs.frame_mode)
if __name__=='__main__':
app = QtGui.QApplication(sys.argv)
ex = VideoForm()
ex.show()
ex.getFiles(ex)
ex.getInfo()
sys.exit(app.exec_())