Seite 1 von 1

QGridLayout in einem MainWindow verwenden

Verfasst: Donnerstag 19. September 2013, 11:49
von Pythoguras
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

Re: QGridLayout in einem MainWindow verwenden

Verfasst: Donnerstag 19. September 2013, 12:51
von 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

Re: QGridLayout in einem MainWindow verwenden

Verfasst: Donnerstag 19. September 2013, 16:36
von Pythoguras
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

Re: QGridLayout in einem MainWindow verwenden

Verfasst: Donnerstag 19. September 2013, 18:22
von snow
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