PyQt множественный захват сигнала класса QDilaog

У меня есть приложение PyQt Gui с несколькими окнами QDialog, которые я использую для построения данных с помощью виджета matplotlib. Это код, который я использую ниже.

Улавливается только один излучаемый сигнал. Какой из когда-либо созданных QDialog последним улавливает испускаемый им сигнал. Если диалоговое окно TempBox создается последним, перехватывается NewTemp_signal, или если диалоговое окно RealBox создается последним, перехватывается NewReal_signal. Но другой сигнал не ловится. Как поймать оба сигнала для обновления всех диалогов? Спасибо

Класс диалогового окна

class GUIgraph(QtGui.QDialog):
    def __init__(self,parent=None):
       QtGui.QDialog.__init__(self,parent)
       print 'This is the Histograph dialog class function'
       self.graph = Ui_histogram_Dialog()
       self.graph.setupUi(self)

Функции, которые создают новые винды

def TempgraphFunc(self):
    QtGui.QWidget.__init__(self,parent=None)
    self.TempBox = GUIgraph()
    self.TempBox.setWindowTitle("Temperature")
    self.NewTemp_signal.connect(self.TempPlotFunc)
    self.TempBox.show()

def RealgraphFunc(self):
    QtGui.QWidget.__init__(self,parent=None)
    self.RealBox = GUIgraph()
    self.RealBox.setWindowTitle("Real Space")
    self.NewReal_signal.connect(self.RealPlotFunc)
    print 'Real is connected'
    self.RealBox.show()

В другой функции я испускаю сигнал

def loadFiles(self):
    ....
    self.NewTemp_signal.emit()
    self.NewReal_signal.emit()
    print ' signals emitted' 

person JMD    schedule 21.03.2013    source источник


Ответы (1)


Я думаю, у вас проблемы с архитектурой. Я не вижу весь ваш код, но, по крайней мере, это очень странно:

def TempgraphFunc(self):
    QtGui.QWidget.__init__(self,parent=None)
    self.TempBox = GUIgraph()
    self.TempBox.setWindowTitle("Temperature")
    self.NewTemp_signal.connect(self.TempPlotFunc)
    self.TempBox.show()

В методе, который вы вызываете QtGui.QWidget.__init__??? __init__ является родительским методом "конструктор", и вы должны вызывать его из переопределенного подкласса __init__

person warvariuc    schedule 22.03.2013
comment
удаление функции __init__ устранило проблему. Должен сказать, что я не совсем понимаю все, что пишу (копирую и вставляю). Обычно я пытаюсь найти фрагменты кода, которые делают то, что мне нужно, а затем модифицирую их в соответствии со своими потребностями. Я не уверен, почему у меня был метод конструктора. - person JMD; 22.03.2013
comment
› удаление функции __init__ устранило проблему ‹ Я думаю, вы имеете в виду «удаление вызова метода __init__». Рад, что вы это исправили. Но вы должны понимать, что вы делаете. Узнайте больше о Python, объектно-ориентированном программировании и т. д. И не забудьте голосовать/принимать хорошие ответы на ваши вопросы. Ваше здоровье! - person warvariuc; 23.03.2013