【问题标题】:python qt, display text/label above another widget(phonon)python qt,在另一个小部件(声子)上方显示文本/标签
【发布时间】:2011-04-11 04:47:19
【问题描述】:

我正在使用 PySide 制作视频播放器,它是一个绑定到 Qt 框架的 python。我正在使用 phonon(一个模块)来显示视频,并且我想在视频上方显示文本作为字幕。如何在我的声子小部件上方放置另一个小部件。 opengl 是一种选择吗?

【问题讨论】:

    标签: python qt pyqt widget pyside


    【解决方案1】:

    如果您只是创建标签并将声子小部件设置为父小部件,则标签应显示在其上方。

    QLabel *label = new QLabel(phononWidget);
    label->setText("Text over video!");
    

    (我意识到这是 C++ 并且您正在使用 Python,但它应该是相似的)

    更新: 以上不适用于硬件加速视频播放。另一种可行的方法是创建一个图形场景并将视频小部件或播放器添加到场景中,并为文本使用QGraphicsTextItem。将视口设置为QGLWidget 将启用硬件加速:

    QGraphicsScene *scene = new QGraphicsScene(this);
    
    Phonon::VideoPlayer *v = new Phonon::VideoPlayer();
    v->load(Phonon::MediaSource("video_file"));
    
    QGraphicsProxyWidget *pvideoWidget = scene->addWidget(v);
    
    QGraphicsView *view = new QGraphicsView(scene);
    view->setViewport(new QGLWidget); //Enable hardware acceleration!
    
    QGraphicsTextItem *label = new QGraphicsTextItem("Text Over Video!", pvideoWidget);
    label->moveBy(100, 100);
    
    v->play();
    

    【讨论】:

    • 另请注意,由于标签不在布局中,您需要手动管理其位置。
    • 好吧,我把 self.label = QtGui.QLabel("你好,这是字幕", self.videoWidget) 但它看起来像一个黑盒子
    • 这适用于大多数普通小部件。我想作为一个视频小部件,可能会有一些硬件加速或覆盖的东西让事情变得有点棘手。我没有使用过声子的东西,如果我发现任何东西,我会看看文档并提出其他建议。
    • 我已经用一个可行的选项更新了我的答案。我在这里试过,但你失去了硬件加速:(
    • 你认为除了使用opengl来访问ardwareacceleration之外,你认为有可能做你所说的吗?
    猜你喜欢
    • 2011-01-18
    • 2015-03-24
    • 2012-08-05
    • 1970-01-01
    • 2019-02-19
    • 2017-08-10
    • 2018-03-08
    • 2021-12-25
    • 1970-01-01
    相关资源
    最近更新 更多