Zentrieren der Windows Titel Bar

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Highlander23
User
Beiträge: 1
Registriert: Dienstag 14. Februar 2023, 13:13

Hallo zusammen,
ich beschäftige mich seit Kurzem mit Python und dem QtDesigner. Meine Frage ist eigentlich nur eine optische: wie kann ich erreichen, dass der Text in der Titel-Zeile des Fensters zentriert und nicht (wie bei mir) linksbündig, also gleich neben dem Icon angezeigt wird? Ich hatte erst gedacht, dass das gar nicht geht, allerdings in verschiedenen Beispielen (Tutorials) erscheinen einige Titelzeilen zentriert. Nur wie und wo das eingestellt wird, habe ich bislang nicht gefunden.
Für eine kurze Hilfestellung wäre ich sehr dankbar.
Liebe Grüße aus den schottischen Highlands
sagt der Highlander
Benutzeravatar
__blackjack__
User
Beiträge: 13077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Highlander23: Das ist nur bedingt eine Python-Frage. Das entscheidet das Qt-Theme das man verwendet, und das kann sich auch an der Plattform orientieren auf der es ausgeführt wird, wie das dort üblich ist. Das ist etwas was ich als Anwendungsentwickler nicht vorschreiben wollen würde. Der Anwender hat da ja etwas ausgewählt/eingestellt was ihm am besten passt — wer bin ich das überstimmen zu wollen‽
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Ernie1412
User
Beiträge: 161
Registriert: Freitag 10. Januar 2020, 20:38

man kann die Title Bar deaktivieren
self.setWindowFlags(Qt.FramelessWindowHint)
und sich mit Qlabel eine eigene machen.
# Benutzerdefinierte Titelleiste erstellen
self.title_widget = QWidget(self)
self.setCentralWidget(self.title_widget)
self.title_layout = QHBoxLayout(self.title_widget)
self.title_layout.setContentsMargins(0, 0, 0, 0)
self.title_label = QLabel("Titeltext", self.title_widget)
self.title_label.setAlignment(Qt.AlignHCenter)
self.title_layout.addWidget(self.title_label)
self.title_widget.setLayout(self.title_layout)

# Fensterkonfiguration
self.setWindowFlags(Qt.FramelessWindowHint)
für minimieren, maximieren und Fenster schliessen , musste dir Buttons auch selber machen ähnlich wie Qlabel
Benutzeravatar
__blackjack__
User
Beiträge: 13077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Ernie1412: Wobei das komisch wird wenn man die Titelzeile nicht deaktivieren kann. „Hint“ heisst auf Deutsch „Hinweis“, und nur den kann man der Fensterverwaltung geben. Es kann sein, dass die dem Hinweis folgt — muss sie aber nicht.

Selbst wenn sie es tut: Müsste man sich dann auch um alle möglichen anderen Sachen plötzlich selbst kümmern. Zum Beispiel wie das aussieht wenn das Fenster nicht den Fokus hat. Viele Fensterverwaltungen/Themes stellen Titelzeilen von Fenstern im Fokus anders dar als solche die keinen Fokus haben, damit der Benutzer das Fenster mit dem Fokus leicht(er) findet. Und das verhalten vom Doppelklick auf die Titelzeile muss man implementieren. Da muss man dann erst einmal herausfinden was das eigentlich ist, also was der Benutzer des Systems da eingestellt hat. Und drauf klicken und verschieben erwartet der Benutzer wohl auch. Zusätzlich muss man noch die normale Titelzeile weiterhin verwalten, weil oft der Text von dort an anderer Stelle angezeigt wird, beispielsweise in einer Taskleiste oder in einer Liste oder einer Baumansicht in einer Taskmanager-Anwendung und so weiter. Die wissen ja nichts von dem Label, das man sich da selbst gebastelt hat.

Und so wie Du das da machst, als „central widget“ bedeutet das ja, dass man keine Menüleiste haben kann, denn die wäre dann ja *über* der Titelzeile. Oder man müsste dann auch noch anfangen sich die Menüleiste selbst zu basteln.

Da muss man entweder sehr viel noch zusätzlich selbst implementieren, damit sich das so verhält wie der Benutzer das von einem Fenster erwartet, oder man hat eine Anwendung die sich im besten Fall einfach komisch verhält, als würde sie nicht zum System passen, und schlechtesten Fall den Benutzer so nervt, dass er sie nicht verwendet. Und das alles nur weil der Programmierer *der Anwendung* der Meinung war er müsste was für seine eine Anwendung erzwingen was der *Benutzer* sich nach seinen Vorlieben einmal für *alle* Anwendungen einstellen kann.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten