显示主窗口然后调用函数pyqt

时间:2014-09-16 16:09:07

标签: python python-2.7 pyqt4

我目前正在为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_())

0 个答案:

没有答案