Hallo,
Ich möchte gerne grundsätzlich das QBoxLayout verwenden, wofür ich ja den QDialog in die Class, in der ich das Fenster erstelle vererben muss. Nun möchte ich aber zusätzlich auch noch eine MenuBar in das Fenster bringen, wofür ich aber ja QMainWindow vererben muss. Beides einzeln bekomme ich prima hin, aber beides Zusammen, weiß ich nicht, wie ich das mache...
Hoffe mir kann jmd eine schöne Antwort liefern.
Vielen Dank und schönen Sonntag,
Leon
QMainWindow und QDialog
- __blackjack__
- User
- Beiträge: 13919
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@frcom: Die Fragestellung ist irgendwie schräg. Layouts kann man in jedem Widget verwenden, also nicht nur in QDialog. Und wenn Du eine Menüleiste haben möchtest, dann willst Du keinen Dialog haben, denn Dialoge haben keine Menüleisten. Also nimm ein QMainWindow und verwende dort im zentralen Widget welches Layout auch immer Du verwenden möchtest.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
Mh Aber wie binde ich das denn dann ein? Hier mal ein minimalbeispiel zur Veranschaulichung:
Wenn ich jetzt an die Stelle, an der ich den Kommentar MenuBar reingeschieben habe folgendes einbaue, bekomme ich aber eine Fehlermeldung...
Die Fehlermeldung:
Wenn ich in der class window 'window(QMainWindow): ' vererbe, bekomme ich die Menubar, aber den Fehler, dass QBoxLayout kein attribute von window sei...
Hoffe ich habe meine Frage jeztz besser aufgezeigt,
Liebe Grüße
Code: Alles auswählen
from PyQt5.QtWidgets import (QApplication, QDialog, QHBoxLayout, QMainWindow, QGridLayout)
class window(QDialog): #QDialog, um QBoxLayout zu verwenden
def __init__(self, parent=None):
super(window, self).__init__(parent)
self.createTopLeftGroupBox()
#MenuBar
topLayout = QGridLayout()
mainLayout = QGridLayout()
mainLayout.addLayout(topLayout, 0, 0, 1, 2)
mainLayout.addWidget(self.topLeftGroupBox, 1, 0)
if __name__ == '__main__':
app = QApplication(sys.argv)
gallery = window()
gallery.show()
sys.exit(app.exec_())
Code: Alles auswählen
mainMenu = self.menuBar()
fileMenu = mainMenu.addMenu('File')
editMenu = mainMenu.addMenu('Edit')
viewMenu = mainMenu.addMenu('View')
searchMenu = mainMenu.addMenu('Search')
toolsMenu = mainMenu.addMenu('Tools')
helpMenu = mainMenu.addMenu('Help')
Code: Alles auswählen
AttributeError: 'window' object has no attribute 'menuBar'
Hoffe ich habe meine Frage jeztz besser aufgezeigt,
Liebe Grüße
- __blackjack__
- User
- Beiträge: 13919
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@frcom: Ähm, ich habe doch geschrieben das Dialoge keine Menüleiste haben und das Du ein Hauptfenster willst. Und nun zeigst Du einen Dialog und wunderst Dich das der keine Menüleiste hat…
Kein Fenster/Widget hat ein QBoxLayout-Attribut. Keine Ahnung was Du da aus welcher Ausnahme herausgelesen hast. Und noch mal `QBoxLayout` kann man in jedem `QWidget` verwenden. Schau Dir einfach mal in der Dokumentation an wie man bei Hauptfenstern ein/das zentrale Widget setzt.
Kein Fenster/Widget hat ein QBoxLayout-Attribut. Keine Ahnung was Du da aus welcher Ausnahme herausgelesen hast. Und noch mal `QBoxLayout` kann man in jedem `QWidget` verwenden. Schau Dir einfach mal in der Dokumentation an wie man bei Hauptfenstern ein/das zentrale Widget setzt.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
Hallo __blackjack__ ich habe mich der Suche endlich mal angenommen und bin auch direkt fündig geworden. Ich stand einfach völlig auf dem Schlauch und kam nicht auf die Idee eine zweite Class für das zentrale Widget zu bauen... Vielen Dank für deine Tips und Hilfe! Für alle, die auch auf dem Schlauch stehen, habe ich hier noch meine minimallösung... Falls jemand etwas auszusetzen hat, nur her damit!
Code: Alles auswählen
class window(QMainWidget):
def __init__(self, parent=None):
super(window, self).__init__(parent)
mainMenu = self.menuBar()
fileMenu = mainMenu.addMenu('File')
editMenu = mainMenu.addMenu('Edit')
viewMenu = mainMenu.addMenu('View')
searchMenu = mainMenu.addMenu('Search')
toolsMenu = mainMenu.addMenu('Tools')
helpMenu = mainMenu.addMenu('Help')
self.form_widget = main_widget(self)
self.setCentralWidget(self.form_widget)
class main_widget(QDialog):
def __init__(self, parent=None):
super(main_widget, self).__init__(parent)
self.createTopLeftGroupBox()
#...
topLayout = QGridLayout()
mainLayout = QGridLayout()
mainLayout.addLayout(topLayout, 0, 0, 1, 2)
mainLayout.addWidget(self.topLeftGroupBox, 1, 0)
if __name__ == '__main__':
app = QApplication(sys.argv)
gallery = window()
gallery.show()
sys.exit(app.exec_())