Question

Je suis un peu novice alors soyez gentil ;-)

J'avais une interface graphique que j'ai créée en utilisant PyQt4 et python 2.6 avec une boîte de dialogue de fichier de travail, (c'est-à-dire que vous avez cliqué sur un bouton et une fenêtre est apparue et vous a permis de choisir un fichier à charger / enregistrer).Le code de l'interface graphique est comme 2000 lignes, donc je vais inclure les bits que je pense être importants:

from PyQt4 import QtGui as qt
from PyQt4 import QtCore as qc

class NuclearMotion(qt.QWidget):
    def __init__(self, parent=None):
        super(NuclearMotion, self).__init__(parent)

        file_button = qt.QPushButton("Use data from file")
        mainLayout = qt.QGridLayout()
        mainLayout.addWidget(file_button, 14, 8, 1, 2)

    def choose_file():
        file_name = qt.QFileDialog.getOpenFileName(self, "Open Data File", "", "CSV data files (*.csv)")

        self.connect(file_button, qc.SIGNAL("clicked()"), choose_file)
        self.setLayout(mainLayout)

    if __name__ == '__main__':
        import sys
        app = qt.QApplication(sys.argv)
        NuclearMotionWidget = NuclearMotion()
        NuclearMotionWidget.show()
        sys.exit(app.exec_())

Ce qui précède fonctionne parfaitement.J'ai tapé tout le code manuellement à l'aide de divers tutoriels.J'ai maintenant créé une nouvelle interface graphique en utilisant QT Designer et pyuic4 pour la convertir en fichier .py.Maintenant, je ne peux pas faire fonctionner la boîte de dialogue de fichier.Le code ci-dessous entraîne une erreur de type:

from PyQt4 import QtCore, QtGui

class Ui_mainLayout(object):
    def setupUi(self, mainLayout):
        mainLayout.setObjectName(_fromUtf8("mainLayout"))
        mainLayout.resize(598, 335)
        mainLayout.setTabPosition(QtGui.QTabWidget.North)
        mainLayout.setTabShape(QtGui.QTabWidget.Rounded)
        mainLayout.setElideMode(QtCore.Qt.ElideLeft)

        self.basic_tab = QtGui.QWidget()
        self.file_button = QtGui.QPushButton(self.basic_tab)
        QtCore.QObject.connect(self.file_button, QtCore.SIGNAL("clicked()"), self.choose_file)

    def choose_file(self):
        file_name = QtGui.QFileDialog.getOpenFileName(self, "Open Data File", "", "CSV data files (*.csv)")

if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    mainLayout = QtGui.QTabWidget()
    ui = Ui_mainLayout()
    ui.setupUi(mainLayout)
    mainLayout.show()
    sys.exit(app.exec_())

Ce code produit l'interface graphique très bien et tout le reste fonctionne bien, y compris les signaux.Une idée de ce que je fais mal !?

Était-ce utile?

La solution

Votre classe doit hériter (directement ou indirectement) de QtCore.QObject pour pouvoir gérer les signaux.Le premier hérite de QWidget, qui fait le travail.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top