写点什么

Python Qt GUI 设计:菜单栏、工具栏和状态栏的使用方法(拓展篇—2)

  • 2021 年 12 月 09 日
  • 本文字数:2488 字

    阅读完需:约 8 分钟

Python Qt GUI设计:菜单栏、工具栏和状态栏的使用方法(拓展篇—2)

在使用 Qt Creator 创建 UI 文件时,MainWindow 主窗口,主要包含:菜单栏、工具栏、状态栏等。

1、菜单栏

1.1、Qt Creator 创建菜单栏

双击菜单栏上的“在这里输入”,输入文字,最后按回车键即可生成菜单。

例如,建立:文件、编辑两个一级菜单栏目,如下所示:

可以在一级目录下建二级目录,在文件栏目下建立打开栏目,如下所示:

在 Qt Designer 的属性编辑器中可以对动作进行编辑,设置快捷键、图标等信息,其详细信息如下图所示:

最后生成的 UI 文件可以再进行信号和槽的功能代码编写。

1.2、 菜单栏类创建菜单栏

在 QMainWindow 对象的标题栏下方,水平的 QMenuBar 被保留显示 QMenu 对象。QMenu 类提供了一个可以添加到菜单栏的小控件,也用于创建上下文菜单和弹出菜单。每个 QMenu 对象都可以包含一个或多个 QAction 对象或级联的 QMenu 对象。

PyQt API 提供了 createPopupMenu()函数创建一个弹出菜单;menuBar()函数用于返回主窗口的 QMenuBar 对象; addMenu()函数可以将菜单添加到菜单栏中;通过 addAction()函数可以在菜单中进行添加操作等。在设计菜单系统时使用的一些重要方法如下表所示:

通个示例了解 QMenuBar、QMenu 和 QAction 菜单栏类,示例效果如下所示:

示例中,顶层窗口必须是 QMainWindow 对象,才可以引用 QMenuBar 对象。通过 addMenu()方法将“File"菜单添加到菜单栏中。菜单中的操作按钮可以是字符串或 QAction 对象。菜单发射 triggered 信号,将该信号连接到槽函数 proecesstrigger(),该函数接收信号的 QAction 对象。单击任何 QAction 按钮时,QMenu 对象都会发射 triggered 信号。

实现代码如下所示:

import sysfrom PyQt5.QtCore import *from PyQt5.QtGui import *from PyQt5.QtWidgets import * class MenuDemo(QMainWindow):	def __init__(self, parent=None):		super(MenuDemo, self).__init__(parent)		layout = QHBoxLayout()		bar = self.menuBar()		file = bar.addMenu("File")		file.addAction("New")		save = QAction("Save",self)		save.setShortcut("Ctrl+S")		file.addAction(save)		edit = file.addMenu("Edit")		edit.addAction("copy")		edit.addAction("paste")		quit = QAction("Quit",self)		file.addAction(quit)		file.triggered[QAction].connect(self.processtrigger) 		self.setLayout(layout)		self.setWindowTitle("menu 例子")		self.resize(350,300)			def processtrigger(self,q):		print( q.text()+" is triggered" ) if __name__ == '__main__':	app = QApplication(sys.argv)	demo = MenuDemo()	demo.show()	sys.exit(app.exec_())
复制代码

2、工具栏

QToolBar 控件是由文本按钮、图标或其他小控件按钮组成的可移动面板,通常位于菜单栏下方。

2.1、Qt Creator 创建工具栏

使用 Qt Designer 默认生成的主窗口中不显示工具栏,可以通过单击鼠标右键来添加工具栏,如下图所示:

此时的工具栏是空的,没有组件,如下所示:

可以在 Qt Designer 的属性编辑器中新建 addWinAction 动作,并拖入添加到工具栏中,其详细信息如下图所示:



同菜单栏一样,最后生成的 UI 文件可以再进行信号和槽的功能代码编写。

2.2、 工具栏类创建工具栏

QToolBar 类中的常用方法如下表所示:

每当单击工具栏中的按钮时,都将发射 actionTriggered 信号。另外,这个信号将关联的 QAction 对象的引用发送到连接的槽函数上。

通个示例了解 QToolBar 工具栏类,示例效果如下所示:

示例中,首先调用 addToolBar()方法在工具栏区域添加文件工具栏。然后,添加具有文本标题的工具按钮,工具栏通常包含图形按钮,具有图标和名称的 QAction 对象将被添加到工具栏中。最后,将 actionTriggered 信号连接到槽函数 toolbtnpressed()。

实现代码如下所示:

import sysfrom PyQt5.QtCore import *from PyQt5.QtGui import *from PyQt5.QtWidgets import * class ToolBarDemo( QMainWindow ): 	def __init__(self, parent=None):		super(ToolBarDemo, self).__init__(parent)		self.setWindowTitle("toolbar 例子")				self.resize(300, 200)				layout = QVBoxLayout()		tb = self.addToolBar("File")		new = QAction(QIcon("./new.png"),"new",self)		tb.addAction(new)		open = QAction(QIcon("./open.png"),"open",self)		tb.addAction(open)		save = QAction(QIcon("./save.png"),"save",self)		tb.addAction(save)		tb.actionTriggered[QAction].connect(self.toolbtnpressed)		self.setLayout(layout)           		def toolbtnpressed(self,a):		print("pressed tool button is",a.text() )           if __name__ == '__main__':	app = QApplication(sys.argv)	demo = ToolBarDemo()	demo.show()	sys.exit(app.exec_())
复制代码

3、状态栏

MainWindow 对象在底部保留有一个水平条,作为状态栏(QStatusBar),用于显示永久的或临时的状态信息。

QStatusBar 类中的常用方法如下表所示:

通个示例了解 QStatusBar 状态栏类,示例效果如下所示:

在这个例子中,顶层窗口 MainWindow 有一个菜单栏和一个 QTextEdit 对象,作为中心控件。当单击 MenuBar 的菜单时,将 triggered 信号与槽函数 processTrigger()进行绑定。当单击"show"菜单选项时,会在状态栏显示提示信息,并在 5 秒后消失。

实现代码如下所示:

import sysfrom PyQt5.QtCore import *from PyQt5.QtGui import *from PyQt5.QtWidgets import * class StatusDemo(QMainWindow):	def __init__(self, parent=None):		super(StatusDemo, self).__init__(parent)		bar = self.menuBar()		file = bar.addMenu("File")		file.addAction("show")		file.triggered[QAction].connect(self.processTrigger)		self.setCentralWidget(QTextEdit())		self.statusBar= QStatusBar() 		self.setWindowTitle("QStatusBar 例子")		self.setStatusBar(self.statusBar)		def processTrigger(self,q):		if (q.text()=="show"):			self.statusBar.showMessage(q.text()+" 菜单选项被点击了",5000)	    if __name__ == '__main__':	app = QApplication(sys.argv)	demo = StatusDemo()	demo.show()	sys.exit(app.exec_())
复制代码


发布于: 3 小时前阅读数: 7
用户头像

【研究方向】物联网、嵌入式、AI、Python 2018.02.09 加入

【公众号】美男子玩编程,关注获取海量资源~

评论

发布
暂无评论
Python Qt GUI设计:菜单栏、工具栏和状态栏的使用方法(拓展篇—2)