6

我最近一直在学习 python,现在我想(尝试)创建我的第一个真正的应用程序,一个 Linux 的字幕播放器。到目前为止,我一直在使用 Greenfish 字幕播放器,它是针对 Windows 用户的,在 Linux 中不能正常工作。

我想在 qt 中创建应用程序,因为我发现透明窗口在 tkinter 中是不可能的,但是如果有人知道更好的框架,请建议!

现在,在开始之前,我已经研究了几个小时的网络,以了解如何让我的应用程序显示在全屏 Flash 视频上,这似乎是不可能的。然而,前面提到的 GF 字幕播放器在 Windows 中可以做到这一点,但在 Linux 中却没有(可能也是因为它是通过 wine 运行的)。

所以我的问题是可以创建一个保留在全屏 Flash 视频上的透明应用程序,如果是这样,你能指出我正确的方向吗?

提前致谢。

编辑:这里有一些我一直在尝试的示例代码。这段代码产生的窗口不会停留在全屏视频上方

import sys
from PyQt4 import QtGui, QtCore

class mymainwindow(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self, None, QtCore.Qt.WindowStaysOnTopHint)

app = QtGui.QApplication(sys.argv)
mywindow = mymainwindow()
mywindow.show()
app.exec_()
mywindow.show()
4

2 回答 2

12

PyQt5 更新pip install PyQt5

import sys

from PyQt5 import QtGui, QtCore, uic
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QMainWindow, QApplication


class MainWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        self.setWindowFlags(
            QtCore.Qt.WindowStaysOnTopHint |
            QtCore.Qt.FramelessWindowHint |
            QtCore.Qt.X11BypassWindowManagerHint
        )
        self.setGeometry(
            QtWidgets.QStyle.alignedRect(
                QtCore.Qt.LeftToRight, QtCore.Qt.AlignCenter,
                QtCore.QSize(220, 32),
                QtWidgets.qApp.desktop().availableGeometry()
        ))

    def mousePressEvent(self, event):
        QtWidgets.qApp.quit()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    mywindow = MainWindow()
    mywindow.show()
    app.exec_()
于 2020-02-01T18:13:15.887 回答
7

下面的示例代码将创建一个居中的无框窗口,该窗口应位于 Linux 上所有其他窗口的顶部(您可以单击该窗口将其关闭)。

import sys
from PyQt4 import QtGui, QtCore

class mymainwindow(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.setWindowFlags(
            QtCore.Qt.WindowStaysOnTopHint |
            QtCore.Qt.FramelessWindowHint |
            QtCore.Qt.X11BypassWindowManagerHint
            )
        self.setGeometry(QtGui.QStyle.alignedRect(
            QtCore.Qt.LeftToRight, QtCore.Qt.AlignCenter,
            QtCore.QSize(220, 32),
            QtGui.qApp.desktop().availableGeometry()))

    def mousePressEvent(self, event):
        QtGui.qApp.quit()

app = QtGui.QApplication(sys.argv)
mywindow = mymainwindow()
mywindow.show()
app.exec_()
于 2014-09-21T00:32:30.420 回答