【发布时间】:2019-04-24 22:32:13
【问题描述】:
我想使用 Python 和 PyQt5 为 QPushButton 分配一个特定的硬件密钥。
以下代码使用事件过滤器来过滤每个QPushButton 的鼠标按钮事件。不幸的是,单击动画不是此分配的一部分,并且只在每个QPushButton 上单击鼠标左键时出现。
有没有办法实现所需的行为?
main.py
import sys
from PyQt5.QtCore import QEvent, QObject, Qt
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.uic import loadUi
class MainWindow(QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
loadUi("mainwindow.ui", self)
self.pushButton_left.installEventFilter(self)
self.pushButton_middle.installEventFilter(self)
self.pushButton_right.installEventFilter(self)
def eventFilter(self, obj, event):
if event.type() == QEvent.MouseButtonPress:
if event.button() == Qt.LeftButton and obj.objectName() == "pushButton_left":
print("Left click")
elif event.button() == Qt.MiddleButton and obj.objectName() == "pushButton_middle":
print("Middle click")
elif event.button() == Qt.RightButton and obj.objectName() == "pushButton_right":
print("Right click")
return QObject.event(obj, event)
def main():
app = QApplication(sys.argv)
main_window = MainWindow()
main_window.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
主窗口.ui
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1000</width>
<height>200</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<property name="locale">
<locale language="English" country="UnitedKingdom"/>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QPushButton" name="pushButton_left">
<property name="text">
<string>For left mouse button</string>
</property>
</widget>
</item>
<item row="0" column="1">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="2">
<widget class="QPushButton" name="pushButton_middle">
<property name="text">
<string>For middle mouse button</string>
</property>
</widget>
</item>
<item row="0" column="3">
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="4">
<widget class="QPushButton" name="pushButton_right">
<property name="text">
<string>For right mouse button</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1000</width>
<height>28</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources/>
<connections/>
</ui>
【问题讨论】:
-
我不明白你,你能解释一下吗
-
期望的行为是
QPushButton在点击按钮时不应该显示点击动画。 -
@user9402680 鼠标左键单击动画仍然是每个
QPushButton的一部分。 -
@Atalanttore 您指出的内容可能令人困惑,您不希望按钮的外观被按下,或者您不想显示从未按下按钮到按下按钮的过渡
-
@user9402680 太好了,您的代码实现了所需的行为。