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

目录

1、菜单栏

1.1、Qt Creator创建菜单栏

1.2、 菜单栏类创建菜单栏

2、工具栏

2.1、Qt Creator创建工具栏

2.2、 工具栏类创建工具栏

3、状态栏


在使用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信号。

实现代码如下所示:

  1. import sys
  2. from PyQt5.QtCore import *
  3. from PyQt5.QtGui import *
  4. from PyQt5.QtWidgets import *
  5. class MenuDemo(QMainWindow):
  6. def __init__(self, parent=None):
  7. super(MenuDemo, self).__init__(parent)
  8. layout = QHBoxLayout()
  9. bar = self.menuBar()
  10. file = bar.addMenu("File")
  11. file.addAction("New")
  12. save = QAction("Save",self)
  13. save.setShortcut("Ctrl+S")
  14. file.addAction(save)
  15. edit = file.addMenu("Edit")
  16. edit.addAction("copy")
  17. edit.addAction("paste")
  18. quit = QAction("Quit",self)
  19. file.addAction(quit)
  20. file.triggered[QAction].connect(self.processtrigger)
  21. self.setLayout(layout)
  22. self.setWindowTitle("menu 例子")
  23. self.resize(350,300)
  24. def processtrigger(self,q):
  25. print( q.text()+" is triggered" )
  26. if __name__ == '__main__':
  27. app = QApplication(sys.argv)
  28. demo = MenuDemo()
  29. demo.show()
  30. 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()。

实现代码如下所示:

  1. import sys
  2. from PyQt5.QtCore import *
  3. from PyQt5.QtGui import *
  4. from PyQt5.QtWidgets import *
  5. class ToolBarDemo( QMainWindow ):
  6. def __init__(self, parent=None):
  7. super(ToolBarDemo, self).__init__(parent)
  8. self.setWindowTitle("toolbar 例子")
  9. self.resize(300, 200)
  10. layout = QVBoxLayout()
  11. tb = self.addToolBar("File")
  12. new = QAction(QIcon("./new.png"),"new",self)
  13. tb.addAction(new)
  14. open = QAction(QIcon("./open.png"),"open",self)
  15. tb.addAction(open)
  16. save = QAction(QIcon("./save.png"),"save",self)
  17. tb.addAction(save)
  18. tb.actionTriggered[QAction].connect(self.toolbtnpressed)
  19. self.setLayout(layout)
  20. def toolbtnpressed(self,a):
  21. print("pressed tool button is",a.text() )
  22. if __name__ == '__main__':
  23. app = QApplication(sys.argv)
  24. demo = ToolBarDemo()
  25. demo.show()
  26. sys.exit(app.exec_())

3、状态栏

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

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

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















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

实现代码如下所示:

  1. import sys
  2. from PyQt5.QtCore import *
  3. from PyQt5.QtGui import *
  4. from PyQt5.QtWidgets import *
  5. class StatusDemo(QMainWindow):
  6. def __init__(self, parent=None):
  7. super(StatusDemo, self).__init__(parent)
  8. bar = self.menuBar()
  9. file = bar.addMenu("File")
  10. file.addAction("show")
  11. file.triggered[QAction].connect(self.processTrigger)
  12. self.setCentralWidget(QTextEdit())
  13. self.statusBar= QStatusBar()
  14. self.setWindowTitle("QStatusBar 例子")
  15. self.setStatusBar(self.statusBar)
  16. def processTrigger(self,q):
  17. if (q.text()=="show"):
  18. self.statusBar.showMessage(q.text()+" 菜单选项被点击了",5000)
  19. if __name__ == '__main__':
  20. app = QApplication(sys.argv)
  21. demo = StatusDemo()
  22. demo.show()
  23. sys.exit(app.exec_())

关注公众号,发送关键字:Java车牌识别,获取项目源码。