Поверх всех окон в PyQt5

Нужно, чтобы сама программа была поверх всех остальных окон в windows. Флаг Qt.WindowStaysOnTopHint стоит, второй раз окно вроде не вызывается, чтобы его сбить.

# -*- coding: utf-8 -*-

import sys
from PyQt5 import QtWidgets
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QWidget
from queenui import Ui_MainWindow
from configparser import ConfigParser

config_file = 'data/settings.ini'
config = ConfigParser()
config.read(config_file)


class MyWin(QtWidgets.QMainWindow, QWidget):

    def __init__(self):
        QtWidgets.QWidget.__init__(self)
        self.setAcceptDrops(True)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.queenBrowser.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self.setAttribute(Qt.WA_TranslucentBackground, True)
        self.ui.queenBrowser.setText('test text')
        self.setWindowFlags(Qt.WindowStaysOnTopHint | Qt.Tool | Qt.FramelessWindowHint)
        self.show()

def move_right_bottom_corner(win):
    screen_geometry = QApplication.desktop().availableGeometry()
    screen_size = (screen_geometry.width(), screen_geometry.height())
    win_size = (win.frameSize().width(), win.frameSize().height())
    x = screen_size[0] - win_size[0]
    y = screen_size[1] - win_size[1]
    win.move(x, y)


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    w = MyWin()
    move_right_bottom_corner(w)
    sys.exit(app.exec_())



Ui:

from PyQt5 import QtCore, QtWidgets
import configparser


config = configparser.ConfigParser()
config.read(r'data\settings.ini')
backgroundImage = config.get("Theme", "background")


class Ui_MainWindow(object):

    def setupUi(self, MainWindow):
        MainWindow.setObjectName('1UI')
        MainWindow.setMinimumSize(QtCore.QSize(424, 424))
        MainWindow.setMaximumSize(QtCore.QSize(424, 424))

        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName('centralwidget')

        self.textBrowser = QtWidgets.QLineEdit(self.centralwidget)
        self.textBrowser.setGeometry(QtCore.QRect(170, 383, 251, 41))
        self.textBrowser.setReadOnly(False)
        self.textBrowser.setObjectName('textBrowser')

        self.queenBrowser = QtWidgets.QTextBrowser(self.centralwidget)
        self.queenBrowser.setGeometry(QtCore.QRect(200, 190, 222, 71))
        self.queenBrowser.setReadOnly(True)
        self.queenBrowser.setObjectName('queenBrowser')          
        self.background = QtWidgets.QLabel(self.centralwidget)
        self.background.resize(424, 433)
        if backgroundImage == 'default':
            self.background.setStyleSheet("image: url(data/images/background.png);")
        if backgroundImage == 'dark':
            self.background.setStyleSheet("image: url(data/images/background2.png);")
        MainWindow.setCentralWidget(self.centralwidget)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)


Ответы (1 шт):

Автор решения: S. Nick

Не изменяйте код, сгенерированный Qt Designer. Создайте другой класс, который наследуется от соответствующего виджета, и используйте созданный класс для его заполнения.

QMainWindow наследуется от QWidget

введите сюда описание изображения

Чтобы queenBrowser отображался поверх background :

self.queenBrowser = QtWidgets.QTextBrowser(self.background)

main.py

import sys
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QWidget
from configparser import ConfigParser

config_file = 'data/settings.ini'
config = ConfigParser()
config.read(config_file)
backgroundImage = config.get("Theme", "background")


#from queenui import Ui_MainWindow
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName('1UI')
        MainWindow.setMinimumSize(QtCore.QSize(424, 424))
        MainWindow.setMaximumSize(QtCore.QSize(424, 424))

        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName('centralwidget')

        self.textBrowser = QtWidgets.QLineEdit("QLineEdit", self.centralwidget)
        self.textBrowser.setGeometry(QtCore.QRect(170, 383, 251, 41))
        self.textBrowser.setReadOnly(False)
        self.textBrowser.setObjectName('textBrowser')

#        self.queenBrowser = QtWidgets.QTextBrowser(self.centralwidget)
#        self.queenBrowser.setGeometry(QtCore.QRect(200, 190, 222, 71))  
#        self.queenBrowser.setReadOnly(True)
#        self.queenBrowser.setObjectName('queenBrowser')    
             
        self.background = QtWidgets.QLabel(self.centralwidget)
        self.background.resize(424, 433)
# + vvv        
        self.queenBrowser = QtWidgets.QTextBrowser(self.background)
        self.queenBrowser.setGeometry(QtCore.QRect(200, 190, 222, 71))  
        self.queenBrowser.setReadOnly(True)
        self.queenBrowser.setObjectName('queenBrowser')         
# + ^^^        
        MainWindow.setCentralWidget(self.centralwidget)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)


class MyWin(QtWidgets.QMainWindow):                              # ???, QWidget):
    def __init__(self):
        QtWidgets.QWidget.__init__(self)
        self.setAcceptDrops(True)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.queenBrowser.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self.setAttribute(Qt.WA_TranslucentBackground, True)
        self.ui.queenBrowser.setText('test text')

#                                                      VVVVVVV <------------------------ ?????
#        self.setWindowFlags(Qt.WindowStaysOnTopHint | Qt.Tool | Qt.FramelessWindowHint)
        self.setWindowFlags(Qt.WindowStaysOnTopHint | Qt.FramelessWindowHint)

# +++ vvv
        if backgroundImage == 'default':
            self.ui.background.setStyleSheet("image: url(background.png);") # установите свой путь
# ----> vvvv            
        elif backgroundImage == 'dark':
            self.ui.background.setStyleSheet("image: url(im.png);")         # установите свой путь
# +++ ^^^            
#        self.show()

def move_right_bottom_corner(win):
    screen_geometry = QApplication.desktop().availableGeometry()
    screen_size = (screen_geometry.width(), screen_geometry.height())
    win_size = (win.frameSize().width(), win.frameSize().height())
    x = screen_size[0] - win_size[0]
    y = screen_size[1] - win_size[1]
    win.move(x, y)


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    w = MyWin()
    
    move_right_bottom_corner(w)
    w.show()

    sys.exit(app.exec_())

settings.ini

[Theme]
background = default

введите сюда описание изображения

→ Ссылка