Barra de título personalizada con marco en PyQt5
Estoy trabajando en una aplicación de toma de notas mínima compatible con Markdown de código abierto para Windows / Linux. Estoy tratando de eliminar la barra de título y agregar mis propios botones. Quiero algo como, una barra de título con solo dos botones personalizados como se muestra en la figura
Actualmente tengo esto:
He intentado modificar las banderas de la ventana:
Sin banderas de ventana, la ventana es redimensionable y móvil. Pero no hay botones personalizados.Utilizandoself.setWindowFlags(QtCore.Qt.FramelessWindowHint)
, la ventana no tiene bordes, pero no puede mover o cambiar el tamaño de la ventanaUtilizandoself.setWindowFlags(QtCore.Qt.CustomizeWindowHint)
, la ventana es redimensionable pero no puede moverse y tampoco puede deshacerse de la parte blanca en la parte superior de la ventana.Cualquier ayuda apreciada. Puedes encontrar el proyecto en GitHubaquí.
Gracias..
Este es mi código de Python:
from PyQt5 import QtCore, QtWidgets, QtWebEngineWidgets, uic
import sys
import os
import markdown2 # https://github.com/trentm/python-markdown2
from PyQt5.QtCore import QRect
from PyQt5.QtGui import QFont
simpleUiForm = uic.loadUiType("Simple.ui")[0]
class SimpleWindow(QtWidgets.QMainWindow, simpleUiForm):
def __init__(self, parent=None):
QtWidgets.QMainWindow.__init__(self, parent)
self.setupUi(self)
self.markdown = markdown2.Markdown()
self.css = open(os.path.join("css", "default.css")).read()
self.editNote.setPlainText("")
#self.noteView = QtWebEngineWidgets.QWebEngineView(self)
self.installEventFilter(self)
self.displayNote.setContextMenuPolicy(QtCore.Qt.NoContextMenu)
#self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
def eventFilter(self, object, event):
if event.type() == QtCore.QEvent.WindowActivate:
print("widget window has gained focus")
self.editNote.show()
self.displayNote.hide()
elif event.type() == QtCore.QEvent.WindowDeactivate:
print("widget window has lost focus")
note = self.editNote.toPlainText()
htmlNote = self.getStyledPage(note)
# print(note)
self.editNote.hide()
self.displayNote.show()
# print(htmlNote)
self.displayNote.setHtml(htmlNote)
elif event.type() == QtCore.QEvent.FocusIn:
print("widget has gained keyboard focus")
elif event.type() == QtCore.QEvent.FocusOut:
print("widget has lost keyboard focus")
return False
El archivo UI se crea en la siguiente jerarquía