2014-09-23 3 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

대단히 감사합니다. –

관련 문제