Python 使用qt创建透明覆盖
我最近一直在学习python,现在我想(尝试)创建我的第一个真正的应用程序,一个Linux字幕播放器。到目前为止,我一直在使用Greenfish字幕播放器,它是针对Windows用户的,不能在Linux中正常工作 我想在qt中创建应用程序,因为我发现透明窗口在tkinter中是不可能的,但是如果有人知道更好的框架,请建议 现在,在开始之前,我已经研究了几个小时的网络,以发现如何让我的应用程序显示在一个全屏幕的flash视频,这似乎是不可能的。不过,前面提到的GF字幕播放器在Windows中可以做到这一点,但在Linux中却不行(可能也是因为它在wine中运行) 所以我的问题是,有没有可能创建一个透明的应用程序,它可以覆盖一个全屏flash视频,如果有,你能给我指出正确的方向吗 提前谢谢 编辑: 这里是我一直在尝试的一些示例代码。这段代码生成的窗口不会停留在全屏幕视频之上Python 使用qt创建透明覆盖,python,window,pyqt4,stayontop,Python,Window,Pyqt4,Stayontop,我最近一直在学习python,现在我想(尝试)创建我的第一个真正的应用程序,一个Linux字幕播放器。到目前为止,我一直在使用Greenfish字幕播放器,它是针对Windows用户的,不能在Linux中正常工作 我想在qt中创建应用程序,因为我发现透明窗口在tkinter中是不可能的,但是如果有人知道更好的框架,请建议 现在,在开始之前,我已经研究了几个小时的网络,以发现如何让我的应用程序显示在一个全屏幕的flash视频,这似乎是不可能的。不过,前面提到的GF字幕播放器在Windows中可以做
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_()