2017-05-27 6 views
0

Ich habe den Fenstertitel mit dem folgenden Code ein:Wie Fenster Titel in PyQt5 zu zentrieren?

w.setWindowTitle('PyQt5 Lesson 4') 

, mit denen ich:

Gui title Layout

Gibt es eine Möglichkeit in pyqt5 den Titel oder einfach zentrieren zu bewegen?

+1

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

+0

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

+0

Wahrscheinlich müssten Sie die normale Titelleiste durch eine falsche ersetzen. Siehe [diese Antwort] (https://stackoverflow.com/q/9377914/984421). – ekhumoro

Antwort

0

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) ...