PyQt5:QPushButton双击?

问题描述:

我无法找到一个好的答案:有没有一种方法可以双击执行某个功能,并单击一个其他功能?例如: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但不是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_()) 

不过,我不会推荐它。用户不希望双击按钮。您可以参考Command Buttons Microsoft准则。

+0

太好了,谢谢 – 2014-09-24 00:26:09