2015-12-30 2 views
1

Интересно, может ли кто-нибудь помочь мне решить эту проблему относительно соединения слотов в PyQt5. Следующий фрагмент кода покажет вам, в чем моя проблема.Объект MainWindow не имеет атрибута 'connect'

class MainWindow(QMainWindow): 
    def __init__(self): 
     super(MainWindow, self).__init__() 
     path = os.path.join(os.path.dirname(__file__), 'GUI/Main_GUI.ui') 
     self.gui = loadUi(path) 

     self.gui.button_1.clicked.connect(self.run.this) 

    def _connect_my_slots(self, origin): 
     self.connect(origin, SIGNAL('completed'), self._show_results) 
     self.connect(origin, SIGNAL('error'), self._show_error) 

    def run_this(self): 
     myThread = LongRunningThing() 
     self._connect_my_slots(self.myThread) # THIS IS THE PART THAT CAUSES ERROR 

Как вы можете видеть мои MainWindow объекта моего файл UI (от QtDesigner 5) и один раз я называю _connect_my_slots функцию, которую он выдает ошибку:

AttributError: 'MainWindow' object has no attribute 'connect'

ответ

1

Вы используете старый сигнал стиля и слот , который больше не поддерживается в PyQt5.

старый стиль:

self.connect(origin, SIGNAL('completed'), self._show_results) 

должны теперь быть написаны в новом стиле:

origin.completed.connect(self._show_results) 

Для получения более подробной информации, обратитесь к документации по New-style Signal and Slot Support.

+0

Большое спасибо старым сигналам tmoreau были причиной проблемы. Просто чтобы убедиться, что я на правильном пути, не могли бы вы рассказать мне, если мое заявление EMIT также является старым стилем: self.emit (SIGNAL ('completed'), self.result) Спасибо заранее , – Beller0ph0n

+0

Да, это старый стиль. «СИГНАЛ» - это ваш ключ. Все, что вам нужно знать по сигналам, находится на связанной странице документации (даже для PyQt4, она должна работать одинаково) – Mel

+0

Еще раз спасибо tmoreau. Я уже просматриваю этот документ. Ваша помощь очень признательна! – Beller0ph0n

Смежные вопросы