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

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

目录

1、菜单栏


1.1、Qt Creator创建菜单栏


1.2、 菜单栏类创建菜单栏


2、工具栏


2.1、Qt Creator创建工具栏


2.2、 工具栏类创建工具栏


3、状态栏


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


image.png


1、菜单栏

1.1、Qt Creator创建菜单栏

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


image.png


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


image.png


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


image.png


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


image.png

image.png


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


1.2、 菜单栏类创建菜单栏

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


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


image.png


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


image.png


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


实现代码如下所示:


import sys
from 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默认生成的主窗口中不显示工具栏,可以通过单击鼠标右键来添加工具栏,如下图所示:


image.png


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


image.png


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



image.png

image.png





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


2.2、 工具栏类创建工具栏

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


image.png


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


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


image.png


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


实现代码如下所示:


import sys
from 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类中的常用方法如下表所示:


image.png


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


image.png


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


实现代码如下所示:


import sys
from 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_())
相关文章
|
7月前
|
设计模式 SQL 人工智能
Python设计模式:从代码复用到系统架构的实践指南
本文以Python为实现语言,深入解析23种经典设计模式的核心思想与实战技巧。通过真实项目案例,展示设计模式在软件开发中的结构化思维价值,涵盖创建型、结构型、行为型三大类别,并结合Python动态语言特性,探讨模式的最佳应用场景与实现方式,帮助开发者写出更清晰、易维护的高质量代码。
376 1
|
7月前
|
设计模式 人工智能 算法
Python设计模式:从代码复用到系统架构的实践指南
本文探讨了电商系统中因支付方式扩展导致代码臃肿的问题,引出设计模式作为解决方案。通过工厂模式、策略模式、单例模式等经典设计,实现代码解耦与系统扩展性提升。结合Python语言特性,展示了模块化、装饰器、适配器等模式的实战应用,并延伸至AI时代的设计创新,帮助开发者构建高内聚、低耦合、易维护的软件系统。
404 0
|
9月前
|
API C++ 开发者
PySide vs PyQt:Python GUI开发史诗级对决,谁才是王者?
PySide 和 PyQt 是 Python GUI 开发领域的两大利器,各有特色。PySide 采用 LGPL 协议,更灵活;PyQt 默认 GPL,商业使用需授权。两者背后团队实力雄厚,PySide 得到 Qt 官方支持,PyQt 由 Riverbank Computing 打造。API 设计上,PySide 简洁直观,贴近原生 Qt;PyQt 增加 Pythonic 接口,操作更高效。性能方面,两者表现优异,适合不同需求的项目开发。选择时可根据项目特点与开源要求决定。
987 20
|
7月前
|
设计模式 人工智能 算法
python 设计模式
工厂模式是一种创建型设计模式,通过定义创建对象的接口,将实例化延迟到子类,实现对象创建与使用的分离。它包括简单工厂模式、工厂方法模式和抽象工厂模式,适用于不同复杂度的对象创建场景,提高系统灵活性和可扩展性。
139 4
|
测试技术 开发者 Python
Python(GUI)之活动积分记录表
本文介绍了一套使用Python的Tkinter库构建的学生活动积分记录系统。该系统允许教师选择班级和学生,输入加分分数及原因,并将数据保存至文件,旨在简化学生积分管理流程,提升教学效率。
294 6
|
11月前
|
设计模式 机器学习/深度学习 前端开发
Python 高级编程与实战:深入理解设计模式与软件架构
本文深入探讨了Python中的设计模式与软件架构,涵盖单例、工厂、观察者模式及MVC、微服务架构,并通过实战项目如插件系统和Web应用帮助读者掌握这些技术。文章提供了代码示例,便于理解和实践。最后推荐了进一步学习的资源,助力提升Python编程技能。
|
设计模式 开发者 Python
Python编程中的设计模式:工厂方法模式###
本文深入浅出地探讨了Python编程中的一种重要设计模式——工厂方法模式。通过具体案例和代码示例,我们将了解工厂方法模式的定义、应用场景、实现步骤以及其优势与潜在缺点。无论你是Python新手还是有经验的开发者,都能从本文中获得关于如何在实际项目中有效应用工厂方法模式的启发。 ###
|
设计模式 开发者 Python
Python编程中的设计模式应用与实践感悟####
本文作为一篇技术性文章,旨在深入探讨Python编程中设计模式的应用价值与实践心得。在快速迭代的软件开发领域,设计模式如同导航灯塔,指引开发者构建高效、可维护的软件架构。本文将通过具体案例,展现设计模式如何在实际项目中解决复杂问题,提升代码质量,并分享个人在实践过程中的体会与感悟。 ####
|
设计模式 算法 搜索推荐
Python编程中的设计模式:优雅解决复杂问题的钥匙####
本文将探讨Python编程中几种核心设计模式的应用实例与优势,不涉及具体代码示例,而是聚焦于每种模式背后的设计理念、适用场景及其如何促进代码的可维护性和扩展性。通过理解这些设计模式,开发者可以更加高效地构建软件系统,实现代码复用,提升项目质量。 ####
|
设计模式 监控 算法
Python编程中的设计模式应用与实践感悟###
在Python这片广阔的编程疆域中,设计模式如同导航的灯塔,指引着开发者穿越复杂性的迷雾,构建出既高效又易于维护的代码结构。本文基于个人实践经验,深入探讨了几种核心设计模式在Python项目中的应用策略与实现细节,旨在为读者揭示这些模式背后的思想如何转化为提升软件质量的实际力量。通过具体案例分析,展现了设计模式在解决实际问题中的独特魅力,鼓励开发者在日常编码中积极采纳并灵活运用这些宝贵的经验总结。 ###

推荐镜像

更多