pip list
的输出信息如下Package Version
---------- -------
build 0.7.0
colorama 0.4.4
packaging 21.3
pep517 0.12.0
pip 21.3.1
pyparsing 3.0.6
PySide6 6.2.3
setuptools 60.5.0
shiboken6 6.2.3
tomli 2.0.0
wheel 0.37.1
用designer创建了一个空的主窗体(Main Window),然后添加一个名为acceptBtn
的按钮。然后用uic
工具生成了common_signal_slot_ui.py
文件。
然后,新建一个common_ones.py
文件,代码内容如下。
from PySide6 import QtCore
from PySide6.QtCore import Signal,Slot
from PySide6.QtWidgets import QMainWindow, QGraphicsView, QFileDialog, QApplication, QMessageBox,QHBoxLayout
import sys
class MainWindow(QMainWindow):
def __init__(self, app):
super().__init__()
self.app = app
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
QtCore.QMetaObject.connectSlotsByName(self) # 开启自动连接信号和槽.
@QtCore.Slot()
def on_acceptBtn_clicked(self):
print("accept")
if __name__ == "__main__":
from common_signal_slot_ui import Ui_MainWindow
app = QApplication(sys.argv)
window = MainWindow(app)
window.show()
sys.exit(app.exec())
结果,程序运行起来后,点击一次该按钮,会print两次“accept”。说明槽函数on_acceptBtn_clicked
被执行了两次
uic
工具生成的.py文件,发现它里面也有一行QtCore.QMetaObject.connectSlotsByName
.
QtCore.QMetaObject.connectSlotsByName
执行了两次,导致的这个问题common_ones.py
文件中的此行代码后,问题解决了