| Se invece vogliamo inserire un altro layout, al su | | Se invece vogliamo inserire un altro layout, al su |
| o posto si usa *addLayout()*.:: | | o posto si usa *addLayout()*.:: |
| | | |
| cWidget.setLayout(hBox) | | cWidget.setLayout(hBox) |
| | | |
| La hbox è il layout principale (quello che prima h | | La hbox è il layout principale (quello che prima h |
| o definito “genitore”) e quindi va impostato come | | o definito “genitore”) e quindi va impostato come |
| centrale con questa chiamata. | | centrale con questa chiamata. |
n | Le box sono comode quando si tratta di inserire in | n | Le box sono comode quando si tratta di inserire in |
| fila pochi widget, ma per grafiche complesse è co | | fila pochi widget, ma per grafiche complesse è co |
| nsigliabile usare le grid, o tabelle. Vediamo un e | | nsigliabile usare le grid, o tabelle. Vediamo un e |
| sempio di utilizzo: | | sempio di utilizzo::: |
| | | |
t | | t | #!/usr/bin/python
|
| | |
|
| | | import sys
|
| | | from PyQt4 import QtGui, QtCore
|
| | |
|
| | | class MainWindow(QtGui.QMainWindow):
|
| | | def __init__(self):
|
| | | QtGui.QMainWindow.__init__(self)
|
| | |
|
| | | self.resize(350, 250)
|
| | | self.setWindowTitle('Grid example' |
| | | )
|
| | |
|
| | | cWidget = QtGui.QWidget(self)
|
| | |
|
| | | grid = QtGui.QGridLayout(cWidget) |
| | | # dichiarazione della griglia
|
| | |
|
| | | checkBox = QtGui.QCheckBox("Normal |
| | | checkbox", cWidget)
|
| | | checkBox.setChecked(True)
|
| | |
|
| | | triCheck = QtGui.QCheckBox("Trista |
| | | te checkbox", cWidget)
|
| | | triCheck.setTristate(True)
|
| | | triCheck.setCheckState(QtCore.Qt.P |
| | | artiallyChecked)
|
| | |
|
| | | vBox = QtGui.QVBoxLayout()
|
| | | radio1 = QtGui.QRadioButton("Radio |
| | | button 1", cWidget)
|
| | | radio2 = QtGui.QRadioButton("Radio |
| | | button 2", cWidget)
|
| | | radio3 = QtGui.QRadioButton("Radio |
| | | button 3", cWidget)
|
| | | radio1.setChecked(True)
|
| | | vBox.addWidget(radio1)
|
| | | vBox.addWidget(radio2)
|
| | | vBox.addWidget(radio3)
|
| | |
|
| | | vBox2 = QtGui.QVBoxLayout()
|
| | | toggle = QtGui.QPushButton("Toggle |
| | | button")
|
| | | toggle.setCheckable(True)
|
| | | flat = QtGui.QPushButton("Flat but |
| | | ton")
|
| | | flat.setFlat(True)
|
| | | vBox2.addWidget(toggle)
|
| | | vBox2.addWidget(flat)
|
| | |
|
| | | textEdit = QtGui.QTextEdit(cWidget |
| | | )
|
| | |
|
| | | grid.addWidget(triCheck, 0, 0)
|
| | | grid.addWidget(checkBox, 0, 1)
|
| | | grid.addLayout(vBox, 1, 0)
|
| | | grid.addLayout(vBox2, 1, 1)
|
| | | grid.addWidget(textEdit, 2, 0, 1, |
| | | 2)
|
| | |
|
| | | cWidget.setLayout(grid)
|
| | | self.setCentralWidget(cWidget)
|
| | |
|
| | | app = QtGui.QApplication(sys.argv)
|
| | | main = MainWindow()
|
| | | main.show()
|
| | | sys.exit(app.exec_())
|
| | |
|
| | | .. img:: 10
|
| | | :nolink:
|
| | |
|
| | | Per prima cosa introduciamo brevemente i widgets n |
| | | uovi:::
|
| | |
|
| | | checkBox = QtGui.QCheckBox("Normal |
| | | checkbox", cWidget)
|
| | | checkBox.setChecked(True)
|
| | |
|
| | | Una checkbox può avere due stati: checked o unchec |
| | | ked. Il cambio di stato è “catturato” dal segnale |
| | | *stateChanged()*.
|
| | | Le Qt mettono a disposizione un secondo tipo di ch |
| | | eckbox, detto *tristate* perchè appunto possiede t |
| | | re stati diversi: la si può vedere nel secondo ese |
| | | mpio.::
|
| | |
|
| | | radio1 = QtGui.QRadioButton("Radio |
| | | button 1", cWidget)
|
| | |
|
| | | A differenza delle checkbox, quando ci sono divers |
| | | i radio button, solo uno può essere selezionato.
|
| | | Un toggle button è definito dal metodo *setCheckab |
| | | le()*, mentre l'ultimo è un flat button.
|
| | |
|
| | | Torniamo però a parlare delle griglie.
|
| | | Se *addWidget()* (o il corrispondente *addLayout() |
| | | *) è usato per delle griglie, oltre all'oggetto da |
| | | aggiungere, bisogna anche specificare la posizion |
| | | e. La definizione completa è:
|
| | |
|
| | | *QGridLayout.addWidget (self, QWidget, int row, in |
| | | t column, int rowSpan, int columnSpan, Qt.Alignmen |
| | | t=0)*
|
| | |
|
| | | Dove *row* e *column* indicano la riga e la colonn |
| | | a in cui inserire il widget, *rowSpan* e *columnSp |
| | | an* nell'esempio sono usati solo a proposito della |
| | | *textEdit*: se vogliamo che essa occupi uno spazi |
| | | o maggiore di quello assegnato ad una singola cell |
| | | etta, bisogna indicare esattamente quante righe o |
| | | colonne si vuole far occupare al widget. La nostra |
| | | *textEdit* occupa quindi una sola riga ma due col |
| | | onne.
|
| | | I metodi per impostare le proprietà delle griglie |
| | | sono tanti, eccone alcuni:
|
| | | *setHorizontalSpacing*: imposta la distanza fra du |
| | | e widget orizzontali.
|
| | | *setVerticalSpacing*: imposta la distanza fra due |
| | | widget verticali.
|
| | | *setSpacing*: le due precedenti, combinate.
|
| | | *setColumnMinimumWidth*: larghezza minima della co |
| | | lonna specificata come primo parametro.
|
| | | *setRowMinimumWidth*: stessa cosa per una riga.
|
| | | *int columnCount*: ritorna il numero di colonne de |
| | | lla griglia.
|
| | | *int rowCount*: ritorna il numero di righe.
|