Arhn - архитектура программирования

Как читать двойной щелчок с помощью eventFilter?

У меня есть eventFilter на моей пользовательской метке, и я хотел бы обнюхивать с ним двойные щелчки. Это возможно?

    self.installEventFilter(self)

# Handles mouse events
def eventFilter(self, object, event):

    try:
        if event.buttons() == QtCore.Qt.LeftButton:

            #LeftButton event

        else:
            # nothing is being pressed
    except:
        pass
08.08.2014

Ответы:


1

Да, это возможно, но по какой-то странной причине это не так просто. Конечно, вы никогда не знаете, может ли за одним щелчком мыши следовать другой одиночный щелчок, фактически приводящий к двойному щелчку. Вот почему должно быть какое-то встроенное время ожидания. Qt делает это и доставляет события для двойных кликов (QEvent.MouseButtonDblClick). С другой стороны, Qt по-прежнему доставляет события для одиночных кликов (QEvent.MouseButtonPress) даже в случае двойного клика, но только одного. Возможно, это не лучший дизайн.

Мы должны правильно их различать. Я делаю это с дополнительным таймером, который должен быть немного дольше, чем встроенный таймер Qt для обнаружения двойных щелчков. Затем идет код:

from PySide import QtCore, QtGui

class MyLabel(QtGui.QLabel):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.installEventFilter(self)
        self.single_click_timer = QtCore.QTimer()
        self.single_click_timer.setInterval(200)
        self.single_click_timer.timeout.connect(self.single_click)

    def single_click(self):
        self.single_click_timer.stop()
        print('timeout, must be single click')

    def eventFilter(self, object, event):
        if event.type() == QtCore.QEvent.MouseButtonPress:
            self.single_click_timer.start()
            return True
        elif event.type() == QtCore.QEvent.MouseButtonDblClick:
            self.single_click_timer.stop()
            print('double click')
            return True

        return False


app = QtGui.QApplication([])

window = MyLabel('Click me')
window.resize(200, 200)
window.show()

app.exec_()

См. также Различие событий одиночного и двойного щелчка в Qt.

02.09.2014
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..