Ich habe den Fenstertitel mit dem folgenden Code ein:Wie Fenster Titel in PyQt5 zu zentrieren?
w.setWindowTitle('PyQt5 Lesson 4')
, mit denen ich:
Gibt es eine Möglichkeit in pyqt5 den Titel oder einfach zentrieren zu bewegen?
Ich habe den Fenstertitel mit dem folgenden Code ein:Wie Fenster Titel in PyQt5 zu zentrieren?
w.setWindowTitle('PyQt5 Lesson 4')
, mit denen ich:
Gibt es eine Möglichkeit in pyqt5 den Titel oder einfach zentrieren zu bewegen?
Ich denke, der einzige Weg, dies zu tun wäre zu vermeiden, die Standard MenuBar Ihre Anwendung von Ihrem "SO" haben. Legen Sie das Attribut Ihrer App so fest, dass sie nicht die Standard-Menüleiste verwendet und Ihre eigene erstellt. Versuchen Sie, das Attribut Ihrer App festzulegen und zu überprüfen, ob es für Sie funktioniert.
app = QApplication(sys.argv)
app.setAttribute(Qt.AA_DontUseNativeMenuBar)
oder nur die Windows-Flagge Ihres Haupt-Widget einstellen, wo Ihre Anwendung in ist.
self.setWindowFlags(Qt.FramelessWindowHint)
so etwas, aber du musst immer noch Ihre eigene „Fake Menüleiste“ entwickeln für Sie da insgesamt haben Kontrolle darüber, was Sie damit machen wollen.
Hier ist ein kleines Beispiel, sieht irgendwie hässlich (es gibt viel mehr bessere Praktiken verwendet werden), aber vielleicht schon kann es Ihnen ein paar Ideen, was Sie wirklich brauchen:
import sys
from PyQt5.QtCore import QPoint
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWidgets import QHBoxLayout
from PyQt5.QtWidgets import QLabel
from PyQt5.QtWidgets import QVBoxLayout
from PyQt5.QtWidgets import QWidget
class MainWindow(QWidget):
def __init__(self):
super(MainWindow, self).__init__()
self.layout = QVBoxLayout()
self.layout.addWidget(MyBar(self))
self.layout.addStretch(-1)
self.setLayout(self.layout)
self.layout.setContentsMargins(0,0,0,0)
self.layout.addStretch(-1)
self.setFixedSize(800,400)
self.setWindowFlags(Qt.FramelessWindowHint)
class MyBar(QWidget):
def __init__(self, parent):
super(MyBar, self).__init__()
self.parent = parent
print(self.parent.width())
self.layout = QHBoxLayout()
self.layout.setContentsMargins(0,0,0,0)
self.title = QLabel("My Own Bar")
self.title.setFixedHeight(35)
self.title.setAlignment(Qt.AlignCenter)
self.layout.addWidget(self.title)
self.title.setStyleSheet("""
background-color: black;
color: white;
""")
self.setLayout(self.layout)
self.start = QPoint(0, 0)
self.pressing = False
def resizeEvent(self, QResizeEvent):
super(MyBar, self).resizeEvent(QResizeEvent)
self.title.setFixedWidth(self.parent.width())
def mousePressEvent(self, event):
self.start = self.mapToGlobal(event.pos())
self.pressing = True
def mouseMoveEvent(self, event):
if self.pressing:
self.end = self.mapToGlobal(event.pos())
self.movement = self.end-self.start
self.parent.move(self.mapToGlobal(self.movement))
self.start = self.end
def mouseReleaseEvent(self, QMouseEvent):
self.pressing = False
if __name__ == "__main__":
app = QApplication(sys.argv)
mw = MainWindow()
mw.show()
sys.exit(app.exec_())
Hinweis:Beachten Sie, dass, da es jetzt Frameless ist, es seine Eigenschaft der Bewegung "verliert", so dass ich es neu implementieren musste, das gleiche würde für die Größenänderung und jede andere Eigenschaft, die es Rahmen benötigen würde (zB schließen, Mini und max Tasten) ...
Qt hat keine Kontrolle über das Aussehen der Tit le bar: Alles wird vom Fenstermanager gehandhabt. Wie sehen die Titelleisten von Nicht-Qt-Fenstern in Ihrem Betriebssystem aus? Sie sollten nicht anders aussehen. Wenn Sie es ändern möchten, müssen Sie Ihre Systemeinstellungen entsprechend anpassen. – ekhumoro
Titelleisten von Nicht-Qt-Fenstern sind alle Linkshänder ähnlich wie der Screenshot, den ich zur Verfügung gestellt habe, also gibt es grundsätzlich keine Möglichkeit, dies speziell für meine App zu tun? Gibt irgendeine andere Bibliothek Kontrolle darüber? wenn ja, welche (s) – rikoudosenin
Wahrscheinlich müssten Sie die normale Titelleiste durch eine falsche ersetzen. Siehe [diese Antwort] (https://stackoverflow.com/q/9377914/984421). – ekhumoro