Python 使用qt创建透明覆盖

Python 使用qt创建透明覆盖,python,window,pyqt4,stayontop,Python,Window,Pyqt4,Stayontop,我最近一直在学习python,现在我想(尝试)创建我的第一个真正的应用程序,一个Linux字幕播放器。到目前为止,我一直在使用Greenfish字幕播放器,它是针对Windows用户的,不能在Linux中正常工作 我想在qt中创建应用程序,因为我发现透明窗口在tkinter中是不可能的,但是如果有人知道更好的框架,请建议 现在,在开始之前,我已经研究了几个小时的网络,以发现如何让我的应用程序显示在一个全屏幕的flash视频,这似乎是不可能的。不过,前面提到的GF字幕播放器在Windows中可以做

我最近一直在学习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()

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


PyQt5的更新
pip安装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_()

将透明窗口作为屏幕堆栈顶部的部分覆盖应该没有问题。在Qt中,您需要做的就是设置一个透明的窗口背景色(例如,通过样式表),然后提升窗口,使其位于其他所有内容之上。我不知道你在哪里找到的,但是QWidget文档已经具备了你所需要的一切。事实上,字幕“player”在Qt中大约有100行:)到目前为止,我尝试了:QtCore.Qt.WindowStaysOnTopHint,它将窗口设置在所有其他窗口之上,但是它消失在全屏幕视频后面。在视频设置为全屏模式后,我必须把它放在最上面吗?正如前面的评论员所建议的,这应该是一件相当简单的事情。请发布一篇演示您遇到的问题的文章,而不是强迫人们猜测您的代码出了什么问题。对不起,我还没有开始编写代码,我正在尝试我在最初的文章中编辑的这段代码。只有在游戏打开窗口时才可以执行此操作,未处于全屏模式。@user2054758您是否找到了为全屏应用程序创建覆盖的解决方案?您必须使用一些基于OpenGL或directx的外部覆盖库。
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_()