Создание прозрачного наложения с помощью qt
Недавно я изучал python, и теперь я хотел (попытаться) создать свое первое реальное приложение, проигрыватель субтитров для Linux. До сих пор я использовал проигрыватель субтитров Greenfish, который предназначен для пользователей Windows и не работает должным образом в Linux.
Я хотел создать приложение в qt, поскольку обнаружил, что прозрачные окна в tkinter невозможны, но, если кто-нибудь знает лучшую среду, пожалуйста, предложите!
Теперь, прежде чем начать, я в течение нескольких часов исследовал сеть, чтобы выяснить, как заставить мое приложение показывать поверх полноэкранного флэш-видео, и кажется, что это невозможно. Однако вышеупомянутому проигрывателю субтитров GF удается сделать это в Windows, но не в Linux(возможно, это также потому, что он работает через Wine).
Итак, мой вопрос: возможно ли создать прозрачное приложение, которое остается поверх полноэкранного флеш-видео, и если да, можете ли вы указать мне правильное направление?
Заранее спасибо.
редактировать: вот пример кода, который я пытался. Окно, созданное этим фрагментом кода, не остается над полноэкранным видео
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()
1 ответ
Приведенный ниже пример кода создаст центрированное безрамное окно, которое должно оставаться поверх всех других окон в 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_()
Обновление для 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_()