【问题标题】:PyQt Python - Creating right mouse click for QPushButtonPyQt Python - 为 QPushButton 创建鼠标右键
【发布时间】:2015-06-03 18:30:13
【问题描述】:

我正在动态创建一个垂直布局的 QPushButtons 列表。我目前正在将“点击”信号用于功能。但我想使用鼠标右键来实现附加功能。前任。通过右键单击打印鼠标悬停的 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


    【解决方案1】:

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

    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()传递给widget本身。

    【讨论】:

      【解决方案2】:

      您可以在处理程序中检查鼠标按钮是否有 clicked 信号:

          but.clicked.connect(self.buttonClicked)
          ...
      
      def buttonClicked(self):
          if QtGui.qApp.mouseButtons() & QtCore.Qt.RightButton:
              print(self.sender().toolTip())
      

      mouse button constants 可以一起进行 OR'd 运算,让您可以测试它们的不同组合。所以上面的代码会检测到点击左键的同时按住右键。

      你也可以用keyboard modifiers做类似的事情:

          if QtGui.qApp.keyboardModifiers() & QtCore.Qt.ControlModifier:
              print('ctrl+click')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多