使用qt创建透明叠加层

时间:2014-09-20 14:57:57

标签: python window pyqt4 stayontop

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

我想在qt中创建应用程序,因为我发现在tkinter中无法实现透明窗口,但如果有人知道更好的框架,请提示!

现在开始之前,我已经研究了几个小时的网络,发现如何让我的应用程序显示在一个完整的屏幕Flash视频上,似乎这是不可能的。然而,前面提到的GF字幕播放器设法在Windows中这样做,但不是在Linux中(也许这也是因为它正在通过葡萄酒运行)。

所以我的问题是有可能创建一个透明的应用程序,它仍然是一个完整的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()

2 个答案:

答案 0 :(得分:7)

更新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_()

答案 1 :(得分:4)

下面的示例代码将创建一个居中的无框窗口,该窗口应该位于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_()