Python PyQt5:QPushButton双击?

Python PyQt5:QPushButton双击?,python,pyqt,python-3.4,pyqt5,qpushbutton,Python,Pyqt,Python 3.4,Pyqt5,Qpushbutton,我找不到一个好的答案:有没有一种方法可以让双击执行某个函数,然后单击另一个函数??例如: def func1(self): print('First function') def func2(self): print('Second function') self.ui.button.clicked.connect(self.func1) self.ui.button.doubleClicked.connect(self.func2) 我看到可以双击QTreeview,但不能双

我找不到一个好的答案:有没有一种方法可以让双击执行某个函数,然后单击另一个函数??例如:

def func1(self):
    print('First function')
def func2(self):
    print('Second function')
self.ui.button.clicked.connect(self.func1)
self.ui.button.doubleClicked.connect(self.func2)

我看到可以双击
QTreeview
,但不能双击
QPushButton
。谢谢

通过扩展
QPushButton
类,您可以轻松添加功能:

import sys
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *

class QDoublePushButton(QPushButton):
    doubleClicked = pyqtSignal()
    clicked = pyqtSignal()

    def __init__(self, *args, **kwargs):
        QPushButton.__init__(self, *args, **kwargs)
        self.timer = QTimer()
        self.timer.setSingleShot(True)
        self.timer.timeout.connect(self.clicked.emit)
        super().clicked.connect(self.checkDoubleClick)

    @pyqtSlot()
    def checkDoubleClick(self):
        if self.timer.isActive():
            self.doubleClicked.emit()
            self.timer.stop()
        else:
            self.timer.start(250)

class Window(QWidget):
    def __init__(self, *args, **kwargs):
        QWidget.__init__(self, *args, **kwargs)

        self.button = QDoublePushButton("Test", self)
        self.button.clicked.connect(self.on_click)
        self.button.doubleClicked.connect(self.on_doubleclick)

        self.layout = QHBoxLayout()
        self.layout.addWidget(self.button)

        self.setLayout(self.layout)
        self.resize(120, 50)
        self.show()

    @pyqtSlot() 
    def on_click(self):
        print("Click")

    @pyqtSlot()
    def on_doubleclick(self):
        print("Doubleclick")

app = QApplication(sys.argv)
win = Window()
sys.exit(app.exec_())

不过,我不建议这样做。用户不希望双击按钮。您可以参考Microsoft指南。

它有效。。但当我双击过快时,它会忽略第二次单击。真奇怪。