PyQt Python - 为 QPushButton 创建鼠标右键单击

问题描述 投票:0回答:2

我正在动态创建垂直布局中的 QPushButton 列表。我目前正在使用“点击”信号作为函数。但我想使用鼠标右键来实现附加功能。前任。通过右键单击打印鼠标所在的 QPushButton 的工具提示。

but = QtGui.QPushButton()
but.setText(cur);but.setCheckable(True)
but.setStyleSheet(_fromUtf8("text-align:right;background-color: rgb(50, 50, 50);"))
but.setToolTip(longName + "." + cur)

我正在查看“QMouseEvent”、“setMouseTracking”、“mousePressEvents”。但我不确定如何正确使用它们来获得我想要的结果。 我也愿意接受“右键单击”时 QPushButton 的自定义信号。

python pyqt signals-slots right-click qpushbutton
2个回答
4
投票

通常,鼠标右键单击会连接到上下文菜单。与

but.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
but.customContextMenuRequested.connect(handle_right_click)

您可以连接一个处理程序,该处理程序可用于单击鼠标右键。

如果您想要纯粹的鼠标右键单击操作,您应该扩展 QPushButton 并覆盖

mousePressEvent(self, event)
mouseReleaseEvent(self, event)
。然后你需要将按钮的 ContextMenuPolicy 设置为
QtGui.Qt.PreventContextMenu
以确保它们的传递:

小部件没有上下文菜单,与 NoContextMenu 相比,处理不会推迟到小部件的父级。这意味着所有鼠标右键事件都保证通过 QWidget::mousePressEvent()QWidget::mouseReleaseEvent() 传递到小部件本身。


4
投票

您可以检查处理程序中的鼠标按钮是否有

clicked
信号:

    but.clicked.connect(self.buttonClicked)
    ...

def buttonClicked(self):
    if QApplication.mouseButtons() & QtCore.Qt.RightButton:
        print(self.sender().toolTip())

鼠标按钮常量可以进行“或”运算,以便您测试它们的不同组合。所以上面的代码将检测到在单击左按钮的同时按住了右按钮。

您也可以使用 键盘修饰符执行类似的操作:

    if QApplication.keyboardModifiers() & QtCore.Qt.ControlModifier:
        print('ctrl+click')
© www.soinside.com 2019 - 2024. All rights reserved.