Partage
  • Partager sur Facebook
  • Partager sur Twitter

QWidget::setLayout: Attempting to set QLayout

Problème avec les layouts de QT

Sujet résolu
    28 novembre 2010 à 0:19:51

    Bonjour,
    je tente de créer une gui depuis un petit moment et je suis bloqué sur un problème pour le layout. Mon code me retourne cette erreur :
    QWidget::setLayout: Attempting to set QLayout "" on MainWindow "", which already has a layout

    Et seul le menu s'affiche, pas le layout, je ne peux donc même pas vérifier s'il fonctionne correctement !... J'ai tenté de me renseigner sur google, mais toute les personnes qui rencontre ce problème on eux aussi, non aucune réponse.
    Voici donc la source du début de programme :
    #!/usr/bin/python
    # -*- coding: iso-8859-1 -*-
    
    import sys
    from PyQt4 import QtGui, QtCore
    
    class MainWindow(QtGui.QMainWindow):
    	def __init__(self):
    		QtGui.QMainWindow.__init__(self)
    
    		self.setWindowTitle('Grafcet')
    		menu = self.menuBar()
    		
    		# Ouvrir un fichier source
    		open = QtGui.QAction('Ouvrir une source', self)
    		open.setShortcut('Ctrl+O')
    		open.setStatusTip('Ouvrir un fichier source')
    		
    		# Enregistrer un fichier source
    		save = QtGui.QAction('Sauvegarder le fichier source', self)
    		save.setShortcut('Ctrl+S')
    		save.setStatusTip('Sauvegarder le fichier source')
    		
    		# Ouvrir le pannel d'option
    		option = QtGui.QAction('Options', self)
    		option.setStatusTip('Ouvrir le pannel d\'option')
    		
    		# Fermer le programme
    		exit = QtGui.QAction('Fermer', self)
    		exit.setShortcut('Ctrl+Q')
    		exit.setStatusTip('Fermer le programme')
            
    		file = menu.addMenu('&Fichier')
    		file.addAction(open)
    		file.addAction(save)
    		file.addAction(option)
    		file.addAction(exit)
    		
    		
    		# Convertir la source
    		convert = QtGui.QAction('Convertir la source', self)
    		convert.setShortcut('Ctrl+C')
    		convert.setStatusTip('Convertir la source en grafcet')
    		
    		# Exporter le fichier en fichier texte
    		export_txt = QtGui.QAction('Fichier texte', self)
    		export_txt.setStatusTip('Exporter le grafcet au format texte')
    		
    		# Exporter le fichier en grafcet
    		export_graf = QtGui.QAction('Grafcet', self)
    		export_graf.setStatusTip('Exporter le grafcet au format du grafcet')
    
    		# Exporter le fichier en tableur
    		export_tab = QtGui.QAction('tableur', self)
    		export_tab.setStatusTip('Exporter le grafcet dans un tableur')
    		
    		transformer = menu.addMenu('&Transformer')
    		transformer.addAction(convert)
    		transformer.addAction(export_txt)
    		transformer.addAction(export_graf)
    		transformer.addAction(export_tab)
    		
    		
    		# Aide
    		help = QtGui.QAction('Aide', self)
    		help.setShortcut('Ctrl+A')
    		help.setStatusTip('Aide du programme')
    		
    		# A propos
    		about = QtGui.QAction('A propos', self)
    		about.setStatusTip('A propos du programme')
    		
    		aide = menu.addMenu('&Aide')
    		aide.addAction(help)
    		aide.addAction(about)
    		
            
    		# Actions de file
    		self.connect(open, QtCore.SIGNAL('triggered()'), QtCore.SLOT('open()'))
    		self.connect(save, QtCore.SIGNAL('triggered()'), QtCore.SLOT('save()'))
    		self.connect(option, QtCore.SIGNAL('triggered()'), QtCore.SLOT('option()'))
    		self.connect(exit, QtCore.SIGNAL('triggered()'), QtCore.SLOT('close()'))
    		
    		# Action de transformer
    		self.connect(convert, QtCore.SIGNAL('triggered()'), QtCore.SLOT('convert()'))
    		self.connect(export_txt, QtCore.SIGNAL('triggered()'), QtCore.SLOT('export_txt()'))
    		self.connect(export_graf, QtCore.SIGNAL('triggered()'), QtCore.SLOT('export_graf()'))
    		self.connect(export_tab, QtCore.SIGNAL('triggered()'), QtCore.SLOT('export_tab()'))
    		
    		# Action de l'aide
    		self.connect(help, QtCore.SIGNAL('triggered()'), QtCore.SLOT('help()'))
    		self.connect(about, QtCore.SIGNAL('triggered()'), QtCore.SLOT('about()'))
    		
    		
    		# Layout
    		source = QtGui.QTextEdit()
    		grafcet = QtGui.QTextEdit()
    		erreur = QtGui.QTextEdit()
    		
    		content = QtGui.QVBoxLayout()
    		center = QtGui.QHBoxLayout()
    		footer = QtGui.QHBoxLayout()
    		
    		center.addWidget(source)
    		center.addWidget(grafcet)
    		footer.addWidget(erreur)
    		content.addLayout(center)
    		content.addLayout(footer)
    		
    		
    		self.resize(800, 600)
    		self.setLayout(content)
    
         
    app = QtGui.QApplication(sys.argv)
    main = MainWindow()
    main.show()
    sys.exit(app.exec_())
    

    Merci d'avance pour votre aide !
    • Partager sur Facebook
    • Partager sur Twitter
      28 novembre 2010 à 4:25:25

      faut pas faire "setLayout" sur une QMainWindow. faut passer par un QWidget "écran".
      tu appliques ton layout à ton QWidget et ce QWidget tu l'insères dans ta QMainWindow via setCentralWidget.
      • Partager sur Facebook
      • Partager sur Twitter
        28 novembre 2010 à 13:17:01

        Merci pour cette réponse ! J'ai eux légèrement du mal mais avec quelque recherche, j'ai compris comment faire ! Voici ce que j'ai fais.
        test = QtGui.QWidget()
        		test.setLayout(content)
        		
        		
        		self.resize(800, 600)
        		self.setCentralWidget(test)
        
        • Partager sur Facebook
        • Partager sur Twitter

        QWidget::setLayout: Attempting to set QLayout

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown