PyQt Python - 为QPushButton创建鼠标右键

时间:2015-06-03 18:30:14

标签: python pyqt signals-slots right-click qpushbutton

我正在动态创建垂直布局中的QPushButtons列表。我目前正在使用“click”信号来表示某个功能。但是我想用鼠标右键来增加功能。防爆。通过右键单击打印鼠标所在的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的自定义信号。

2 个答案:

答案 0 :(得分:2)

您可以在处理程序中检查describe "PUT #update" do before :each do @request.env['devise.mapping'] = Devise.mappings[:user] user_tom = FactoryGirl.create(:user, email: 'tom@test.com') sign_in user_tom end it "changes user attributes" do put :update, user: { email: 'jerry@test.com' } subject.current_user.reload assigns[:user].should_not be_new_record expect(subject.current_user.email).to eq 'jerry@test.com' expect(flash[:notice]).to eq 'You updated your account successfully.' end end 信号的鼠标按钮:

clicked

mouse button constants可以一起进行OR运算,允许您测试它们的不同组合。因此,上面的代码会在单击左键时检测到按下右键。

您也可以使用keyboard modifiers

执行类似的操作
    but.clicked.connect(self.buttonClicked)
    ...

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

答案 1 :(得分:2)

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

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()传递给窗口小部件。