es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

PyQt5: WindowStaysOnTopHint no funciona, otros indicadores funcionan correctamente.

Estoy construyendo una aplicación con una interfaz gráfica de usuario en Pyqt5 y estoy tratando de hacer que flote sobre otras ventanas, pero simplemente no funciona. He intentado configurar otras banderas al mismo tiempo, pero la única que no funciona es WindowStaysOnTopHint.

Aquí tienes un ejemplo simple con el que he estado trabajando, FramelessWindowHint: funciona bien, WindowStaysOnTopHint no funciona. Pensé que tal vez esto era algo relacionado con Linux, que no lo permitiría codificarlo directamente y tendría que usarse a través del menú de la propia ventana, pero un programa similar en Java funciona perfectamente, y la ventana se mantiene en la parte superior.

from PyQt5 import QtGui, QtCore
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QSizeGrip
import sys

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.title = "PyQt5 Size Grip"
        self.top = 200
        self.left = 500
        self.width = 640
        self.height = 480
        self.setWindowTitle(self.title)
        self.setWindowIcon(QtGui.QIcon("icon.png"))
        self.setGeometry(self.left, self.top, self.width, self.height)
        flags = QtCore.Qt.WindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.WindowStaysOnTopHint)
        self.setWindowFlags(flags)
        vboxlayout = QVBoxLayout()
        sizegrip = QSizeGrip(self)
        #sizegrip.setVisible(True)
        vboxlayout.addWidget(sizegrip)
        self.setLayout(vboxlayout)
        self.show()

if __name__ == "__main__":
    App = QApplication(sys.argv)
    window = Window()
    sys.exit(App.exec())

Cualquier ayuda aquí sería muy apreciada, ya que esta es una característica fundamental y odiaría tener que reescribir todo esto en Java 🙂

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que la bandera WindowStaysOnTopHint no está funcionando en tu aplicación PyQt5. Has intentado establecer otras banderas al mismo tiempo, pero funcionan bien.

    Una posible solución es intentar agregar la bandera Qt.Tool a las banderas de la ventana. Esta bandera le indica al administrador de ventanas que la ventana debe ser tratada como una ventana de herramientas, lo que puede ayudar a que flote por encima de otras ventanas.

    Puedes modificar tu código para incluir esta bandera de la siguiente manera:

    flags = QtCore.Qt.WindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.WindowStaysOnTopHint | QtCore.Qt.Tool)
    self.setWindowFlags(flags)
    

    Si esto no funciona, puedes probar otras alternativas, como utilizar la API de QWindow para crear tu ventana o utilizar un entorno de escritorio diferente.

Comments are closed.