2015-12-30 106 views
1

我想知道有人能帮我解决这个问题,关于PyQt5中的插槽连接。下面的代码片段会告诉你我的问题是什么。MainWindow对象没有'连接'属性

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

是的,它是旧式的。 “SIGNAL”是你的线索。你需要知道的所有信号都在链接的文档页面上(即使是PyQt4,它也应该可以工作) – Mel

+0

再次感谢tmoreau。我已经阅读过这份文件。非常感谢您的帮助! – Beller0ph0n