Fare QWidget in una nuova finestra in PyQt4
Domanda
Sto cercando di fare una classe che estende QWidget, che si apre una nuova finestra, mi devono mancare qualcosa di fondamentale,
class NewQuery(QtGui.QWidget):
def __init__(self, parent):
QtGui.QMainWindow.__init__(self,parent)
self.setWindowTitle('Add New Query')
grid = QtGui.QGridLayout()
label = QtGui.QLabel('blah')
grid.addWidget(label,0,0)
self.setLayout(grid)
self.resize(300,200)
quando una nuova istanza di questo è fatto nella classe di finestra principale, e show () chiamato, il contenuto è sovrapposto nella finestra principale, come posso farlo visualizzare in una nuova finestra?
Soluzione
Il tuo superclasse initialiser è sbagliato, probabilmente dire:
class NewQuery(QtGui.QWidget):
def __init__(self, parent):
QtGui.QWidget.__init__(self, parent)
(una ragione per l'uso super
):
class NewQuery(QtGui.QWidget):
def __init__(self, parent):
super(NewQuery, self).__init__(parent)
Ma forse si vuole ereditare da QtGui.QDialog
invece (che potrebbe essere opportuno - difficile da dire con il contesto attuale).
Si noti inoltre che il rientro nel tuo esempio di codice è sbagliato (un singolo spazio funzionerà ma 4 spazi o una scheda singola sono considerati più bello).
Altri suggerimenti
seguire il consiglio che ti ha dato @ChristopheD e provare questo posto
from PyQt4 import QtGui
class NewQuery(QtGui.QWidget):
def __init__(self, parent=None):
super(NewQuery, self).__init__(parent)
self.setWindowTitle('Add New Query')
grid = QtGui.QGridLayout()
label = QtGui.QLabel('blah')
grid.addWidget(label,0,0)
self.setLayout(grid)
self.resize(300,200)
app = QtGui.QApplication([])
mainform = NewQuery()
mainform.show()
newchildform = NewQuery()
newchildform.show()
app.exec_()