【问题标题】:PyQt5: QPushButton double click?PyQt5:QPushButton双击?
【发布时间】:2014-11-17 04:35:54
【问题描述】:

我找不到一个好的答案:有没有办法双击执行某个功能,然后单击另一个功能?例如:

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 不行。谢谢!

【问题讨论】:

    标签: python pyqt python-3.4 pyqt5 qpushbutton


    【解决方案1】:

    您可以通过扩展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微软指南。

    【讨论】:

    • 它可以工作..但是当我双击太快时,它会忽略第二次点击。这很奇怪。
    猜你喜欢
    • 2018-04-25
    • 2020-11-03
    • 1970-01-01
    • 2018-10-01
    • 2020-03-25
    • 2021-07-07
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    相关资源
    最近更新 更多