PyQt5按钮控件QPushButton的菜单功能设置
一个功能多样的软件界面往往有很多按钮菜单供用户选择,而这些功能按钮也不可能就只平铺在界面上,这样既影响美观,也不利于归类管理和用户记忆,所以QPushButton按钮控件引入菜单设置方法setMenu(),通过获取菜单对象来实现下拉菜单功能,这一点和我们后面的一个下拉控件有点相似,这里不多赘述。
一个功能多样的软件界面往往有很多按钮菜单供用户选择,而这些功能按钮也不可能就只平铺在界面上,这样既影响美观,也不利于归类管理和用户记忆,所以QPushButton按钮控件引入菜单设置方法setMenu(),通过获取菜单对象来实现下拉菜单功能,这一点和我们后面的一个下拉控件有点相似,这里不多赘述。
下面先用PyCharm来说明一下菜单列表各个类别的称呼,方便后面讲解(这里是自己起名字的,可以有不同称呼)。
在设置菜单前首先要创建一个按钮和菜单对象。
btn1 = QPushButton(window) btn1.move(80, 60) btn1.resize(80, 40) btn1.setText('按钮1') menu = QMenu() # 创建菜单对象 btn1.setMenu(menu) # 把菜单添加到按钮上
但是这时候的按钮上只有一个向下的箭头没有显示任何菜单选项。那么我们如何向我们的下拉中放入我们想要的菜单选项呢?这里要借助于一个对象QAction()。
menu = QMenu() # 创建菜单对象 act = QAction() # 创建一个行为对象 act.setText('菜单选项1') # 设置菜单选项名称 menu.addAction(act) # 把行为放入菜单选项中 btn1.setMenu(menu) # 把菜单添加到按钮上
这里截图显示不出来菜单选项,大家自己试一下就知道了。这里的QAction()对象还可以添加一些其他功能,可以根据文档尝试。
如果想添加更多菜单需要注意不仅要多创建几个行为对象还要把每个对象都添加到按钮上。
menu = QMenu() # 创建菜单对象 act = QAction() # 创建一个行为对象 act.setText('菜单选项1') # 设置菜单选项名称 menu.addAction(act) # 把行为放入菜单选项中 act2 = QAction(QIcon('123.jpg'), '菜单选项2', act) # 同时设置 act3 = QAction(QIcon('123.jpg'), '菜单选项3', act) # 同时设置 menu.addAction(act2) # 把行为2放入菜单选项中 menu.addAction(act3) # 把行为3放入菜单选项中 btn1.setMenu(menu) # 把菜单添加到按钮上
菜单功能已经设置好了,下面来看看子菜单是如何添加的,其实方法和上面一样,知识有部分细节需要单独说说。
首先还是创建一个子菜单列表对象=上面菜单选项,再创建行为作为子菜单并把行为添加进去。
from PyQt5.Qt import * import sys app = QApplication(sys.argv) window = QWidget() window.setWindowTitle('QPushButton菜单设置 - PyQt5中文网') window.resize(600, 450) btn1 = QPushButton(window) btn1.move(80, 60) btn1.resize(80, 40) btn1.setText('按钮1') menu = QMenu() # 创建菜单对象 # ==============子菜单=============== # 代码分割线 - 开始 menu_list = QMenu('子菜单列表', menu) # 创建一个子菜单选项,放入主菜单中 menu_list_act = QAction('子菜单1') # 为子菜单列表创建一个子菜单 menu_list.addAction(menu_list_act) # 添加行为 # ==============子菜单=============== # 代码分割线 - 结束 act = QAction() # 创建一个行为对象 act.setText('菜单选项1') # 设置菜单选项名称 act2 = QAction(QIcon('123.jpg'), '菜单选项2') # 同时设置 act3 = QAction(QIcon('123.jpg'), '菜单选项3') # 同时设置 menu.addAction(act) # 把行为放入菜单选项中 menu.addAction(act2) # 把行为2放入菜单选项中 menu.addMenu(menu_list) # 把子菜单列表放到选项中展示 menu.addAction(act3) # 把行为3放入菜单选项中 btn1.setMenu(menu) # 把菜单添加到按钮上 window.show() btn1.showMenu() # 注意代码位置,这里的QMenu是直接继承QWidget能单独show的,所以要等窗口出来才能展示。 sys.exit(app.exec_())