Hallo zusammen,
ich will mich an der Umsetzung eines C# WinForms Programmes nach PySide versuchen und stolpere dabei ziemlich am Anfang direkt über mein Problem...
Das Hauptfenster habe ich als QMainWindow angelegt. Darüber wird modal eine Parametermaske aufgerufen. Im alten Programm habe ich darin eine Toolbar mit Icons fürs Speichern, Löschen etc..
Soweit ich das sehen recherchieren konnte, gibt es bei QDialog nicht die Möglichkeit eine Toolbar einzublenden, korrekt? Als einzige Alternative wäre eine vhboxlayout möglich welche "normale" Buttons dann behinhaltet... Oder gibt es noch eine andere Möglichkeit?
Wenn ich statt QDialog ein 2tes QMainWindow anlege für die Paramtermaske, kann ich zwar die Toolbar wieder nutzen, aber habe keine Möglichkeit gefunden, das Fenster ebenfalls modal anzuzeigen. Ist das nicht vorgesehen oder habe ich bislang das passende nur nicht gefunden?
Danke im voraus für Eure Antworten und vorab schon mal einen guten Rutsch
Markus
Toolbar QDialog vs QMainWindows Modal
Also ich finde da zumindest leads, die du ausprobieren könntest. https://stackoverflow.com/questions/213 ... -modal-one
Danke für den Hinweis.. hab gegoogelt, aber trotz setzen des Attributes bleibt das Fenster nicht modal... Hast Du eine Ahnung was ich falsch mache?
Beispiel Window, dass von dem eigentlichen Hauptfenster aufgerufen wird und modal angezeigt werden soll...
Aufruf aus Hauptfenster
Beispiel Window, dass von dem eigentlichen Hauptfenster aufgerufen wird und modal angezeigt werden soll...
Code: Alles auswählen
class TagWindow(QMainWindow):
def __init__(self):
super().__init__()
# self.setModal(True)
self.setFixedSize(500, 600)
self.setWindowTitle("Tag-Verwaltung")
self.modal = QDialog(self)
self.modal.setWindowModality(Qt.WindowModality.WindowModal)
Code: Alles auswählen
def showTags(self):
"""Aufruf der Tag-Verwaltung"""
self.tag_window = TagWindow()
self.tag_window.show()
Sorry, aber irgendwie kapier ich das gerade nicht.
Kannst Du bitte konkret mal schreiben wo ich was setzen müsste? Passende Beispiele finde ich irgendwie nicht.
Hab jetzt noch folgendes versucht, beides aber auch ohne Erfolg...
Das mit dem Dialog hatte ich nur genommen, weil es in einem Beispiel so war aber auch mit QMainWindow gehts nicht
und dann habe ich noch versucht, es da im Hauptfenster zu ändern wo das "Unterfenster" aufgerufen wird, auch ohne Erfolg...
verglichen mit C# und Java wundert mich doch, dass es hier anscheinend relativ umständlich ist das eine oder andere (Toolbar im "normalen Fenster" oder modales QMainWindow) hinzubekommen...
Kannst Du bitte konkret mal schreiben wo ich was setzen müsste? Passende Beispiele finde ich irgendwie nicht.
Hab jetzt noch folgendes versucht, beides aber auch ohne Erfolg...
Das mit dem Dialog hatte ich nur genommen, weil es in einem Beispiel so war aber auch mit QMainWindow gehts nicht
Code: Alles auswählen
class TagWindow(QMainWindow):
def __init__(self):
super().__init__()
# self.setModal(True)
self.setFixedSize(500, 600)
self.setWindowTitle("Tag-Verwaltung")
self.modal = QMainWindow(self)
self.modal.setWindowModality(Qt.WindowModality.WindowModal)
Code: Alles auswählen
def showTags(self):
"""Aufruf der Tag-Verwaltung"""
self.tag_window = TagWindow()
self.tag_window.setWindowModality(Qt.WindowModality.WindowModal)
self.tag_window.show()
self.modal war nur aus einem Beispiel, dass ich gefunden hatte...
Hab das jetzt entfernt, aber auch ohne Erfolg..
"Unterfenster" sieht jetzt nur noch so aus...
Hier habe ich mit und ohne setWindowModality das Ganze versucht
Hauptfenster sieht jetzt so aus aber auch ohne Erfolg
Die meisten Beispiele die ich finde, beziehen sich auf QMainWindow und QDialog, was mir leider wegen der fehlenden Toolbar nicht wirklich hilft...
Hab das jetzt entfernt, aber auch ohne Erfolg..
"Unterfenster" sieht jetzt nur noch so aus...
Code: Alles auswählen
class TagWindow(QMainWindow):
def __init__(self):
super().__init__()
# self.setModal(True)
self.setFixedSize(500, 600)
self.setWindowTitle("Tag-Verwaltung")
self.setWindowModality(Qt.WindowModality.WindowModal)
Hauptfenster sieht jetzt so aus aber auch ohne Erfolg
Code: Alles auswählen
def showTags(self):
"""Aufruf der Tag-Verwaltung"""
self.tag_window = TagWindow()
self.tag_window.setWindowModality(Qt.WindowModality.WindowModal)
self.tag_window.show()
Wenn’s nicht geht, dann “will” qt das vielleicht einfach nicht. Das Framework macht halt viele Annahmen, wie Anwendungen sein sollten. Gerade mit QMainWindow.
Laut https://doc.qt.io/qt-6/qtoolbar.html kannst du deine Toolbar aber auch im QDialog haben.
Laut https://doc.qt.io/qt-6/qtoolbar.html kannst du deine Toolbar aber auch im QDialog haben.
- __blackjack__
- User
- Beiträge: 13174
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Also bei mir funktioniert das problemlos und auch einfach ein `QMainWindow` modal zu machen. Nicht so viel Beispiele im Netz suchen sondern mal nachlesen was das bedeutet was man da macht. In diesem Beispiel was Qt.WindowModality.WindowModal für einen Effekt hat: Das blockiert Eingaben beim Elternwidget, dessen Grosseltern und so weiter, und bei den ganzen Geschwistern. Da zumindest im gezeigten Code kein Elternwidget gesetzt wird, blockiert das folgerichtig gar nichts. Sobald man das aber tut, funktioniert es auch.
Code: Alles auswählen
#!/usr/bin/env python3
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton
def main():
app = QApplication(sys.argv)
window = QMainWindow()
window.setCentralWidget(
QPushButton(
"Push me!",
clicked=lambda: QMainWindow(
window, windowModality=Qt.WindowModality.WindowModal
).show(),
)
)
window.show()
sys.exit(app.exec())
if __name__ == "__main__":
main()
“There will always be things we wish to say in our programs that in all known languages can only be said poorly.” — Alan J. Perlis