【发布时间】:2019-07-29 00:21:01
【问题描述】:
我已经使用 pyqt5 和 qt-designer 几个星期了。我习惯于使用连接语句将信号连接到处理函数。
昨天我做了一段代码,它也自动将按钮点击信号连接到没有 pyqtSlot 装饰器的处理函数。
将 clicked 信号连接到函数导致单击按钮一次时执行该函数三次。
删除连接语句导致单击按钮一次时执行两次函数。
在函数中添加@pyqtSlot 会导致正常的一次性执行。
将处理函数重命名为 'on_button-name_clicked' 以外的其他名称也会导致正常的一次性执行。
以下代码显示了这种“自动连接”行为。
谁能解释为什么在没有 connect 或 pyqtSlot 的情况下发生这种自动连接双处理程序调用?
提前致谢,梅斯
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWidgets import QMainWindow
from PyQt5.uic import loadUi
import sys
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
loadUi('MainWindowTestButton.ui', self)
self.show()
def on_pushButton_clicked(self):
print('clicked')
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MainWindow()
sys.exit(app.exec_())
上面的代码打印出来
点击
点击
点击按钮一时。
这是示例中的 MainWindowTestButton.ui 文件
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindowTestButton</class>
<widget class="QMainWindow" name="MainWindowTestButton">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>600</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget">
<widget class="QPushButton" name="pushButton">
<property name="geometry">
<rect>
<x>70</x>
<y>60</y>
<width>75</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string>PushButton</string>
</property>
</widget>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>21</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources/>
<connections/>
</ui>
【问题讨论】:
标签: python pyqt pyqt5 qt-designer