QGridLayout in einem MainWindow verwenden

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Pythoguras
User
Beiträge: 8
Registriert: Donnerstag 19. September 2013, 11:35

Hallo zusammen,

ich bin derzeit dabei, mir die Grundlagen der GUI-Programmierung mit PyQt anzueignen und nutze dazu dieses Tutorial. Mithilfe des Kapitels über Rasterlayout habe ich versucht, dieses in einem eigenen Testprogramm umzusetzen und habe dabei gemerkt, dass folgender Code nicht funktioniert (ein Fenster wird zwar gezeichnet, aber ohne Button):

Code: Alles auswählen

import sys
from PyQt4 import QtGui

class Testfenster(QtGui.QMainWindow):
	def __init__(self, parent=None):
		QtGui.QMainWindow.__init__(self, parent)

	# Fenster
		self.setWindowTitle('Testfenster')
		grid = QtGui.QGridLayout()
		grid.addWidget(QtGui.QPushButton('Testbutton'), 1, 1)
		self.setLayout(grid)

app = QtGui.QApplication(sys.argv)

main = Testfenster()
main.show()

sys.exit(app.exec_())
Ändere ich QMainWindow in QWidget, so funktioniert es tadellos. Bedeutet das, dass man in einem MainWindow keine Grid-Layouts verwenden kann? Oder funktioniert es nur mit Box-Layouts?

Mfg
Pythoguras
Zuletzt geändert von Anonymous am Donnerstag 19. September 2013, 12:46, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
BlackJack

@Pythoguras: Das hat nichts mit dem GridLayout zu tun, sondern grundsätzlich damit, dass man bei einem Hauptfenster nicht einfach so Elemente hinzufügen kann, sondern dort das „Central Widget” mit entsprechendem Inhalt setzen muss. Siehe auch die Qt-Dokumentation: https://qt-project.org/doc/qt-4.8/qmain ... ml#details
Pythoguras
User
Beiträge: 8
Registriert: Donnerstag 19. September 2013, 11:35

Ok, also könnte ich ein Objekt vom Typ QWidget innerhalb des MainWindows platzieren und als CentralWidget setzen, sodass ich dort dann Elemente in einem Grid-layout platzieren kann?

Mfg
Pythoguras
snow
User
Beiträge: 25
Registriert: Mittwoch 4. Juli 2012, 08:52

Genau.

Hier mal ein Minimalbeispiel:

Code: Alles auswählen

#!/usr/bin/env
from PySide import QtGui
import sys

app = QtGui.QApplication(sys.argv)
mainWindow = QtGui.QMainWindow()
layout = QtGui.QGridLayout()
plain = QtGui.QPlainTextEdit()
button = QtGui.QPushButton('button')

layout.addWidget(plain, 0, 0)
layout.addWidget(button, 0, 1)

centralWidget = QtGui.QWidget()
centralWidget.setLayout(layout)
mainWindow.setCentralWidget(centralWidget)

mainWindow.show()

sys.exit(app.exec_())

if __name__ == '__main__':
    pass
Antworten