未定义PyQt QObject

2024-05-15 07:36:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用HTML/CSS/Javascript和Python(使用PyQt4)创建a simple media and metdata application。我想用声子做一个视频播放器,但我没有任何使用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:要显示窗口,但它是空的。它应该包含一个视频播放器和按钮。在


Tags: importselfui视频initdefsys播放器
1条回答
网友
1楼 · 发布于 2024-05-15 07:36:15

首先,您必须为您的video.ui生成python代码,为此使用pyuic4工具。在

pyuic4 -x video.ui -o video.py

上面的行将生成一个名为video.py的模块,其中包含一个名为UI\u的类

然后您可以像这样修改代码:

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

就像你之前看到的。在

相关问题 更多 >