本文参考python Pyqt5 QLabel控件 自定义添加鼠标单击信号/事件 双击信号/事件_obj2008的博客-CSDN博客_pyqt5双击信号
通过继承pushButton,实现双击信号,代码如下:
UI界面部分代码,双击测试按钮通过代码添加,手动连接槽。
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import pyqtSignal
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.listWidget = QtWidgets.QListWidget(self.centralwidget)
self.listWidget.setGeometry(QtCore.QRect(70, 310, 201, 121))
self.listWidget.setDragEnabled(True)
self.listWidget.setDragDropMode(QtWidgets.QAbstractItemView.DragDrop)
self.listWidget.setObjectName("listWidget")
self.btnDoubTest=MySignal(self.centralwidget)
self.btnDoubTest.setGeometry(QtCore.QRect(60, 480, 91, 28))
self.btnDoubTest.setObjectName("btnDoubTest")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
self.btnDoubTest.DoubleClicked.connect(MainWindow.btnDoub_click) #双击信号连接槽
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.btnDoubTest.setText(_translate("MainWindow", "双击测试"))
class MySignal(QtWidgets.QPushButton):
clicked = pyqtSignal()
# 自定义双击信号
DoubleClicked = pyqtSignal()
def __int__(self):
super().__init__()
# 重写鼠标单击事件
def mousePressEvent(self, QMouseEvent): # 单击
self.clicked.emit()
# 重写鼠标双击事件
def mouseDoubleClickEvent(self, e): # 双击
self.DoubleClicked.emit()
逻辑测试部分代码:
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from imageDemo import Ui_MainWindow
class PyQtMainEntry(QMainWindow,Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
def btnDoub_click(self):
item=QListWidgetItem()
item.setSizeHint(QSize(40,50))
w=QWidget(self.listWidget)
layout=QtWidgets.QVBoxLayout()
layout.addWidget(self.btnDoubTest)
w.setLayout(layout)
self.listWidget.addItem(item)
self.listWidget.setItemWidget(item,w)
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
window = PyQtMainEntry()
window.show()
sys.exit(app.exec_())
测试效果如下: