PyQt5 все сигналы кнопок / события? - PullRequest
0 голосов
/ 13 марта 2020

Сигнал для MOUSE1 на кнопке виджет.clicked, какие для MOTION и MOUSE2? Также, если кто-то знает сайт со всеми перечисленными сигналами, это действительно поможет

import sys, pyautogui

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *


def pressed_mouse2():
    pass


def window():
    app = QApplication(sys.argv)
    root = QMainWindow()
    root.setGeometry(200, 200, 500, 500)
    root.setWindowTitle('Test')
    root.setWindowFlags(QtCore.Qt.FramelessWindowHint)
    root.setAttribute(Qt.WA_TranslucentBackground)

    button = QtWidgets.QPushButton(root)

    #i need here to signal when user has pressed on MOUSE2 on the button
    button.clicked.connect(clicked)
    button.move(50,50)

    root.show()
    sys.exit(app.exec_())

window()

1 Ответ

2 голосов
/ 13 марта 2020

Вам просто нужно подключить сигнал кнопки clicked к вашей функции.

button.clicked.connect(pressed_mouse2)

Теперь, когда вы нажимаете кнопку, вы можете выполнить любой код здесь:

def pressed_mouse2():
    print('Button clicked')

Существует множество видов виджетов, каждый из которых имеет разные сигналы. Вы можете найти их в документации Qt. Здесь - это сигналы для QAbstractButton, который наследуется QPushButton.

Нет предопределенного сигнала для щелчка правой кнопкой мыши по кнопке, но вы можете создать подкласс QPushButton и выдать свой собственный сигнал в mousePressEvent().

class Button(QPushButton):

    right_clicked = pyqtSignal()

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

    def mousePressEvent(self, event):
        super().mousePressEvent(event)
        if event.button() == Qt.RightButton:
            self.right_clicked.emit()

И он ответит:

button = Button(root)
button.right_clicked.connect(pressed_mouse2)
...