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?

È stato utile?

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_()
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top