Сигналы PyQt соединяются, но не вызывают методы .. (PyQt4.8, Python 3.2) - PullRequest
0 голосов
/ 16 апреля 2011

Эй, ребята, я знаю, что вопрос не проясняет достаточно (не мог найти, как объяснить проблему в одной строке).Я работаю над проектом, в котором у меня есть централизованный графический интерфейс, включенный в основной класс, с различными компонентами проекта, составленными из составных объектов других классов (закодированных в отдельных файлах).Для продолжения обмена данными в каждом объекте также есть объект основного класса, который состоит из них (правка: попробует метод, предложенный Э.Бендерским).Таким образом, сигналы каждого компонента подключаются отдельно.

Это код соединения в конструкторе для класса A;

QtCore.QObject.connect(self.ui.pushButton, QtCore.SIGNAL("clicked()"), self.impAln)
QtCore.QObject.connect(self.ui.comboBox_2, QtCore.SIGNAL("currentIndexChanged(int)"), self.makeAlnTable)
QtCore.QObject.connect(self.ui.pushButton_2, QtCore.SIGNAL("clicked()"), self.reset)

Код соединения в конструкторе для класса B;

QtCore.QObject.connect(self.ui.comboBox_3, QtCore.SIGNAL("currentIndexChanged(int)"), self.enableLineEdits)
QtCore.QObject.connect(self.ui.comboBox_4, QtCore.SIGNAL("currentIndexChanged(int)"), self.enableLineEdits)
QtCore.QObject.connect(self.ui.comboBox_5, QtCore.SIGNAL("currentIndexChanged(int)"), self.enableLineEdits)
QtCore.QObject.connect(self.ui.pushButton_4, QtCore.SIGNAL("clicked()"), self.wrdMaker)
QtCore.QObject.connect(self.ui.pushButton_3, QtCore.SIGNAL("clicked()"), self.reset)

Проблема в том, что когда создается экземпляр класса A, соединения и сигналы работают нормально.Но когда создается экземпляр класса B, соответствующие сигналы не работают (кнопки не запускают методы и т. Д .; ошибки / исключения не вызываются).Я пробовал искать в Интернете и в «Rapid Gui Programming с Python и Qt», но ни одна из них не решает эту конкретную проблему.

Любая помощь очень ценится, заранее спасибо.

1 Ответ

1 голос
/ 16 апреля 2011

Действительно, вопрос слишком смутный, ИМХО. Без конкретного , минимального примера кода, демонстрирующего проблему, вам будет очень трудно помочь.

Я хочу затронуть одну неприятную вещь, которую вы написали:

для продолжения обмена данными, каждый объект имеет объект основного класса в них тоже состоит

Это почти наверняка плохая идея, и именно то, для чего были разработаны сигналы и слоты Qt без создания такой связи. Вы делаете все свои объекты известными о каком-то «главном», центральном объекте - проектной катастрофе, ожидающей своего появления. Почему бы не обмениваться данными с сигналами и слотами без этой дополнительной композиции?

Это может звучать не по теме, но я часто встречал слишком сложные конструкции, которые вызывали тонкие ошибки программирования, которые трудно было объяснить и отладить до того, как дизайн был распутан.

...