|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Jun 2007
Messaggi: 11
|
[Python] Problema con pyqt4
Salve a tutti,
sto iniziando da poco ad imparare come usare le QT con il linguaggio python. Premetto che non ho mai usato le QT in altri contesti e sono poco esperta nell'uso di classi in generale. Il problema nel mio codice è questo: se inserisco una Menubar, poi non riesco ad inserire più di un widget (impostato come central widget con setCentralWidget). Se provo ad esempio ad inserire un'hbox o una griglia con due pulsanti, essi non vengono visualizzati. Ho provato a spostare la creazione del menu in una classe apposita, facendo avvenire la creazione nel suo __init__, ma non è servito. Al momento l'ho spostata in una funzione che si trova all'interno della stessa classe degli altri widget, col risultato che viene visualizzato il solo menu. Ecco il codice interessato: Codice:
class MainWindow(QtGui.QMainWindow, QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self, parent)
QtGui.QWidget.__init__(self, parent)
self.resize(700, 600)
self.hbox = QtGui.QHBoxLayout()
self.CreateMenus()
self.button = QtGui.QPushButton('prova')
self.button2 = QtGui.QPushButton('prova2')
self.hbox.addWidget(self.button)
self.hbox.addWidget(self.button2)
self.setLayout(self.hbox)
def CreateMenus(self):
self.quit = QtGui.QAction(QtGui.QIcon('icons/info.png'), 'Quit', self)
self.quit.setShortcut('Ctrl+Q')
self.connect(self.quit, QtCore.SIGNAL('triggered()'), QtCore.SLOT('close()'))
self.pref = QtGui.QAction(QtGui.QIcon('icons/info.png'), 'Preferences', self)
self.pref.setShortcut('Ctrl+P')
self.info = QtGui.QAction(QtGui.QIcon('icons/info.png'), 'Information', self)
self.info.setShortcut('Ctrl+I')
self.statusBar()
self.menubar = self.menuBar()
self.file = self.menubar.addMenu('&File')
self.mod = self.menubar.addMenu('&Edit')
self.about = self.menubar.addMenu('&About')
self.file.addAction(self.quit)
self.mod.addAction(self.pref)
self.about.addAction(self.info)
app = QtGui.QApplication(sys.argv)
main = MainWindow()
main.show()
sys.exit(app.exec_())
Un ringraziamento a chi mi risponderà, Lisa |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Aug 2003
Città: Barletta (BA)
Messaggi: 939
|
Stai sbagliando un pò di cose, il codice esatto è:
Codice:
from PyQt4 import QtCore, QtGui
import sys
class MainWindow(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.resize(700, 600)
self.createCentralWidget()
self.createMenus()
def createCentralWidget(self):
self.widget = QtGui.QWidget(self)
self.hbox = QtGui.QHBoxLayout()
self.button = QtGui.QPushButton('prova', self.widget)
self.button2 = QtGui.QPushButton('prova2', self.widget)
self.hbox.addWidget(self.button)
self.hbox.addWidget(self.button2)
self.widget.setLayout(self.hbox)
self.setCentralWidget(self.widget)
def createMenus(self):
self.quit = QtGui.QAction(QtGui.QIcon('icons/info.png'), 'Quit', self)
self.quit.setShortcut('Ctrl+Q')
self.connect(self.quit, QtCore.SIGNAL('triggered()'), QtCore.SLOT('close()'))
self.pref = QtGui.QAction(QtGui.QIcon('icons/info.png'), 'Preferences', self)
self.pref.setShortcut('Ctrl+P')
self.info = QtGui.QAction(QtGui.QIcon('icons/info.png'), 'Information', self)
self.info.setShortcut('Ctrl+I')
self.statusBar().show()
self.menubar = self.menuBar()
self.file = self.menubar.addMenu('&File')
self.mod = self.menubar.addMenu('&Edit')
self.about = self.menubar.addMenu('&About')
self.file.addAction(self.quit)
self.mod.addAction(self.pref)
self.about.addAction(self.info)
app = QtGui.QApplication(sys.argv)
main = MainWindow()
main.show()
sys.exit(app.exec_())
Sbagli argomenti da passare a QMainWindow: http://www.riverbankcomputing.co.uk/...ml#QMainWindow Il parent glielo passi già con self Stai cercando di dare un layout a QMainWindow, ma QMainWindow ha già il suo layout: http://www.riverbankcomputing.co.uk/...w.html#details Devi prima creare un widget, impostarne il layout, inserire nel layout i vari elementi e poi impostarlo come central widget Quando crei un nuovo widget (qualsiasi) devi sempre dire a chi appartiene: self.widget = QtGui.QWidget(self) Ha self perchè appartiene a QMainWindow, self.button = QtGui.QPushButton('prova', self.widget) self.button2 = QtGui.QPushButton('prova2', self.widget) Hanno self.widget perchè appartengono a self.widget Questi gli errori, i consigli: Inizia con la maiuscola solo le classi, mai i metodi Usa self solo quando serve, per una questione di prestazioni Usa sempre nomi esplicativi Vedrai che è tutto molto facile, basta capire la documentazione: http://www.riverbankcomputing.co.uk/.../pyqt4ref.html http://www.riverbankcomputing.co.uk/...l/modules.html http://www.riverbankcomputing.co.uk/...l/classes.html e fare un pò di pratica. Benvenuta in Python + QT4
__________________
In a world without fences, who needs Gates? Power by: Fedora 8 - Mac OS X 10.4.11 Ultima modifica di nico159 : 29-08-2009 alle 20:24. |
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Jun 2007
Messaggi: 11
|
Grazie mille per tutte le dritte (e i link)...stavo quasi per rinunciarci! ^^ Adesso già vedo le cose un po' più chiaramente.
Lisa |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
Come hai fatto per poterle usare? ho scaricato sip e qt4 e ho lanciato i configure.. ma niente. come se fa?
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Aug 2003
Città: Barletta (BA)
Messaggi: 939
|
Stai su Windows? Che versione di Python usi?
__________________
In a world without fences, who needs Gates? Power by: Fedora 8 - Mac OS X 10.4.11 |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
si windows. 2.6. ti ho aggiunto a msn
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Aug 2003
Città: Barletta (BA)
Messaggi: 939
|
__________________
In a world without fences, who needs Gates? Power by: Fedora 8 - Mac OS X 10.4.11 |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
grazie, provato il codice sopra e adesso funziona. mi darò da fare a imparare python + qt4
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Aug 2003
Città: Barletta (BA)
Messaggi: 939
|
Personalmente ti consiglio PostgreSQL
__________________
In a world without fences, who needs Gates? Power by: Fedora 8 - Mac OS X 10.4.11 |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Io sono affezionato a FireBird. E c'è anche in versione embedded.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:00.




















