javascript - PyQt - QObject 未定义

标签 javascript python css pyqt pyqt4

我正在创建 a simple media and metdata application使用 HTML/CSS/Javascript 和 Python(使用 PyQt4)。我正在尝试使用声子制作视频播放器,但我对 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

如你之前所见。

关于javascript - PyQt - QObject 未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22688854/

相关文章:

python - 使用 Google App Engine 学习 Python 2.7 的最佳方式是什么?

css - Woocommerce Storefront 为主页上的产品类别添加悬停效果

javascript - 为 ajax 调用显示的覆盖层,但在没有 ajax 的情况下调用时不显示

javascript - 如何监视隐藏输入元素的值?

c# - 如何结合按钮中的脚本和 Action

Python:截断的日志记录级别名称(字符串格式)自定义

python - 数据框从内存大小相差很大的文件夹中读取图像

javascript - 如何在不阻止进一步执行的情况下在nodejs中添加数百万个数字?

Css 更改不会生效

html - 如何使用 Font Awesome 图标设置文件上传输入的样式,然后以特定样式显示文件名?