如何让PyQT QPushButton.setMenu工作?

4 投票
1 回答
10007 浏览
提问于 2025-04-16 22:38

我刚开始学习PyQT,

不太确定我这个标题是不是说的对。

我在QPushButton上创建一个弹出菜单时遇到了问题。

根据QT文档

我需要使用QPushButton.setMenu (self, QMenu menu)这个方法。

但是我真的不知道从哪里开始……我找不到任何示例来教我怎么用这个。

请帮我做一个。

1 个回答

11

基本的想法是,首先你需要创建一个 QMenu(菜单),然后用 setMenu 方法把它和你的按钮连接起来。如果你查看 QMenu文档,你会发现有一个叫 addAction 的方法,可以用来给你新创建的 QMenu 添加菜单项。addAction 方法有很多不同的用法,你可以在菜单中使用图标,设置快捷键等等。不过为了简单起见,我们就只添加一个菜单项,并给它一个方法,当这个菜单项被选中时会调用这个方法。

from PyQt4 import QtGui, QtCore
import sys


class Main(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(Main, self).__init__(parent)
        pushbutton = QtGui.QPushButton('Popup Button')
        menu = QtGui.QMenu()
        menu.addAction('This is Action 1', self.Action1)
        menu.addAction('This is Action 2', self.Action2)
        pushbutton.setMenu(menu)
        self.setCentralWidget(pushbutton)

    def Action1(self):
        print 'You selected Action 1'

    def Action2(self):
        print 'You selected Action 2'


if __name__ == '__main__':

    app = QtGui.QApplication(sys.argv)
    main = Main()
    main.show()
    app.exec_()

在这里,我们创建了一个按钮(名字很有创意,叫 pushbutton)。然后我们使用 QtGui.QMenu() 创建一个菜单(同样名字很有创意,叫 menu)。通过调用 addAction 方法来创建菜单项,给它一个字符串作为菜单项的文本,以及一个方法(self.Action1 或 self.Action2),这个方法会在选中该菜单项时被调用。接着,我们调用 pushbuttonsetMenu 方法,把我们的菜单分配给它。当你运行这个程序并选择一个菜单项时,你应该能看到与选中项对应的文本被打印出来。

这就是基本的思路。你可以查看 QMenu 的 文档,更好地了解 QMenu 的功能。

撰写回答