2014-09-23 119 views
0

我無法找到一個好的答案:有沒有一種方法可以雙擊執行某個功能,並單擊一個其他功能?例如: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。謝謝!

回答

2

您可以輕鬆地自己通過擴展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