簡體   English   中英

PyQt-未定義QObject

[英]PyQt - QObject is not defined

我正在使用HTML / CSS / Javascript和Python(使用PyQt4)創建一個簡單的媒體和metdata應用程序 我正在嘗試使用聲子來制作視頻播放器,但是我對PyQt4沒有任何經驗。 這是我的代碼:

#!/usr/bin/env python
import sys
from PyQt4 import QtCore, QtGui, uic, phonon

class videoPlayer(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QMainWindow.__init__(self, parent)
        ui = uic.loadUi("video.ui")
        media = phonon.Phonon.MediaObject()
        playQuery = False
        ui..ppButton.clicked.connect(self.playPause)

    def playVideo():            
        media.play()    

    def pauseVideo():    
        media.pause()

    def playPause():
        if playQuery:
            pauseVideo()
        else:
            playVideo()

    def changeVideoSource(target):
        media.setCurrentSource(phonon.Phonon.MediaSource(target))

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    videoPlayer = videoPlayer()
    videoPlayer.show()
    app.exec_()

我非常迷茫和困惑,如果有人可以告訴我我做錯了什么,那將不勝感激。

編輯:有UiType而不是Ui 更改了它,但是我仍然遇到我不理解的錯誤,因為video.ui有一個名為ppButton的按鈕。

編輯2:有顯示的窗口,但它為空。 它應包含視頻播放器和按鈕。

首先,您必須為video.ui生成python代碼。為此,請使用pyuic4工具。

pyuic4 -x video.ui -o video.py

上一行將生成一個名為video.py的模塊,其中將包含一個名為UI_的類。

那么您可以像這樣修改您的代碼:

import sys
from PyQt4 import QtCore, QtGui, uic, phonon
from video import UI_MyVideoWindow     # Lets call it MyVideoWindow for the example.

class videoPlayer(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QMainWindow.__init__(self, parent)

        self.ui = UI_MyVideoWindow()
        self.ui.setUp(self)       # Now you can access you widgets from self.ui
                                  # Example: self.ui.ppButton

        media = phonon.Phonon.MediaObject(self)   # this object needs a parent.
        playQuery = False


    def playVideo():            
        media.play()    

    def pauseVideo():    
        media.pause()


    def on_ppButton_clicked():
        """
        When you generate code using QtDesigner, connections are made automagically ;)
        Just write your slots following the below format:

        on_<widget_name>_<signal_name>
        """

        if playQuery:
            pauseVideo()
        else:
            playVideo()

    def changeVideoSource(target):
        media.setCurrentSource(phonon.Phonon.MediaSource(target))

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    videoPlayer = videoPlayer()
    videoPlayer.show()
    app.exec_()

關於此方法的唯一問題是,每次修改video.ui時都必須更新video.py模塊。 但這是非常容易的工作,只需使用以下命令再次生成即可:

pyuic4 -x video.ui -o video.py

如您所見。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM