MainWindow对象没有'连接'属性
问题描述:
我想知道有人能帮我解决这个问题,关于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'
答
您使用的是旧式信号和槽,这在PyQt5中不再支持。
旧风格:
self.connect(origin, SIGNAL('completed'), self._show_results)
现在应该写在新的风格:
origin.completed.connect(self._show_results)
有关详细信息,请参阅New-style Signal and Slot Support的文档。
感谢很多tmoreau老式信号是问题的原因。为了确保我在正确的轨道上,请告诉我,如果我的EMIT声明也是旧式: self.emit(SIGNAL('completed'),self.result) 。 – Beller0ph0n
是的,它是旧式的。 “SIGNAL”是你的线索。你需要知道的所有信号都在链接的文档页面上(即使是PyQt4,它也应该可以工作) – Mel
再次感谢tmoreau。我已经阅读过这份文件。非常感谢您的帮助! – Beller0ph0n