Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Tastiera gaming MSI GK600 TKL: switch hot-swap, display LCD e tre modalità wireless
Tastiera gaming MSI GK600 TKL: switch hot-swap, display LCD e tre modalità wireless
MSI FORGE GK600 TKL WIRELESS: switch lineari hot-swap, tripla connettività, display LCD e 5 strati di fonoassorbimento. Ottima in gaming, a 79,99 euro
DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici
DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici
DJI porta un importante aggiornamento alla sua linea di gimbal camera tascabili con Osmo Pocket 4: sensore CMOS da 1 pollice rinnovato, gamma dinamica a 14 stop, profilo colore D-Log a 10 bit, slow motion a 4K/240fps e 107 GB di archiviazione integrata. Un prodotto pensato per i creator avanzati, ma che convince anche per l'uso quotidiano
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori
Il primo headset open-back della linea INZONE arriva a 200 euro con driver derivati dalle cuffie da studio MDR-MV1 e un peso record di soli 199 grammi
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 29-08-2009, 15:00   #1
shainer_dev
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_())
Dove sbaglio?
Un ringraziamento a chi mi risponderà,
Lisa
shainer_dev è offline   Rispondi citando il messaggio o parte di esso
Old 29-08-2009, 19:21   #2
nico159
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_())
Non c'è bisogno di derivare QWidget

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 19:24.
nico159 è offline   Rispondi citando il messaggio o parte di esso
Old 29-08-2009, 19:33   #3
shainer_dev
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
shainer_dev è offline   Rispondi citando il messaggio o parte di esso
Old 31-08-2009, 13:30   #4
ndakota
Senior Member
 
L'Avatar di ndakota
 
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?
ndakota è offline   Rispondi citando il messaggio o parte di esso
Old 31-08-2009, 15:31   #5
nico159
Senior Member
 
Iscritto dal: Aug 2003
Città: Barletta (BA)
Messaggi: 939
Quote:
Originariamente inviato da ndakota Guarda i messaggi
Come hai fatto per poterle usare? ho scaricato sip e qt4 e ho lanciato i configure.. ma niente. come se fa?
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
nico159 è offline   Rispondi citando il messaggio o parte di esso
Old 31-08-2009, 19:31   #6
ndakota
Senior Member
 
L'Avatar di ndakota
 
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
si windows. 2.6. ti ho aggiunto a msn
ndakota è offline   Rispondi citando il messaggio o parte di esso
Old 31-08-2009, 21:02   #7
nico159
Senior Member
 
Iscritto dal: Aug 2003
Città: Barletta (BA)
Messaggi: 939
Quote:
Originariamente inviato da ndakota Guarda i messaggi
si windows. 2.6. ti ho aggiunto a msn
http://www.riverbankcomputing.co.uk/...pl-4.5.4-1.exe
__________________
In a world without fences, who needs Gates?
Power by: Fedora 8 - Mac OS X 10.4.11
nico159 è offline   Rispondi citando il messaggio o parte di esso
Old 01-09-2009, 00:47   #8
ndakota
Senior Member
 
L'Avatar di ndakota
 
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
grazie, provato il codice sopra e adesso funziona. mi darò da fare a imparare python + qt4 e come rdbms che consigli?
ndakota è offline   Rispondi citando il messaggio o parte di esso
Old 02-09-2009, 23:18   #9
nico159
Senior Member
 
Iscritto dal: Aug 2003
Città: Barletta (BA)
Messaggi: 939
Quote:
Originariamente inviato da ndakota Guarda i messaggi
grazie, provato il codice sopra e adesso funziona. mi darò da fare a imparare python + qt4 e come rdbms che consigli?
Personalmente ti consiglio PostgreSQL
__________________
In a world without fences, who needs Gates?
Power by: Fedora 8 - Mac OS X 10.4.11
nico159 è offline   Rispondi citando il messaggio o parte di esso
Old 03-09-2009, 07:09   #10
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
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
cdimauro è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Tastiera gaming MSI GK600 TKL: switch hot-swap, display LCD e tre modalità wireless Tastiera gaming MSI GK600 TKL: switch hot-swap, ...
DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici DJI Osmo Pocket 4: la gimbal camera tascabile cr...
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori Sony INZONE H6 Air: il primo headset open-back d...
Nutanix cambia pelle: dall’iperconvergenza alla piattaforma full stack per cloud ibrido e IA Nutanix cambia pelle: dall’iperconvergenza alla ...
Recensione Xiaomi Pad 8 Pro: potenza bruta e HyperOS 3 per sfidare la fascia alta Recensione Xiaomi Pad 8 Pro: potenza bruta e Hyp...
Annunciata la tuta di volo di Vast che s...
Vast presenta il nuovo Large Docking Ada...
Una denuncia getta ombre sulle batterie ...
DJI Avata 2 Fly Smart Combo a 526€: il d...
Alla guida della nuova auto elettrica ci...
GeForce RTX 3060 12 GB a giugno di nuovo...
Apple Music sarà sponsor ufficiale di Po...
The Mandalorian & Grogu: trailer fin...
Fedeltà record: Apple blinda gli utenti,...
Volkswagen ID.3 Neo: fino a 630 km di au...
GPU-Z mette i dati personali a rischio? ...
La PS6 potrebbe essere retrocompatibile ...
Amazfit Cheetah 2 Pro arriva in Italia: ...
Duolingo ammette l'errore dopo un anno: ...
Samsung Galaxy Tab S10 Lite a 249€: il t...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 06:54.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v