我正在动态创建垂直布局中的 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 的自定义信号。
通常,鼠标右键单击会连接到上下文菜单。与
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() 传递到小部件本身。
您可以检查处理程序中的鼠标按钮是否有
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')