效果图:

添加了三个Action,分别是新建,打开,和保存,没有具体写相应的功能,只是提供了一个接口,可以自己写相应的功能。这次不仅将这些Action放在了工具栏,还将其添加到了菜单栏。方法同样是直接将Action拖到菜单栏相应的位置就行了,和工具栏一样,就不赘述了。

另外,还添加了状态栏,create statusBar,如果在界面上找不到右击的地方,可以在Object Inspector那个地方右击添加。创建了状态栏之后,可以使用代码在窗体窗体创建后在动态添加组件self.__buildUI()。

ui_mainWindow.py

  1. # -*- coding: utf-8 -*-
  2.  
  3. # Form implementation generated from reading ui file 'ui_mainWindow.ui'
  4. #
  5. # Created by: PyQt5 UI code generator 5.13.0
  6. #
  7. # WARNING! All changes made in this file will be lost!
  8.  
  9. from PyQt5 import QtCore, QtGui, QtWidgets
  10.  
  11. class Ui_MainWindow(object):
  12. def setupUi(self, MainWindow):
  13. MainWindow.setObjectName("MainWindow")
  14. MainWindow.resize(532, 367)
  15. self.centralwidget = QtWidgets.QWidget(MainWindow)
  16. self.centralwidget.setObjectName("centralwidget")
  17. self.plainTextEdit = QtWidgets.QPlainTextEdit(self.centralwidget)
  18. self.plainTextEdit.setGeometry(QtCore.QRect(0, 0, 531, 291))
  19. font = QtGui.QFont()
  20. font.setPointSize(18)
  21. self.plainTextEdit.setFont(font)
  22. self.plainTextEdit.setObjectName("plainTextEdit")
  23. MainWindow.setCentralWidget(self.centralwidget)
  24. self.menubar = QtWidgets.QMenuBar(MainWindow)
  25. self.menubar.setGeometry(QtCore.QRect(0, 0, 532, 21))
  26. self.menubar.setObjectName("menubar")
  27. self.menu = QtWidgets.QMenu(self.menubar)
  28. self.menu.setObjectName("menu")
  29. self.menu_2 = QtWidgets.QMenu(self.menubar)
  30. self.menu_2.setObjectName("menu_2")
  31. self.menu_3 = QtWidgets.QMenu(self.menubar)
  32. self.menu_3.setObjectName("menu_3")
  33. MainWindow.setMenuBar(self.menubar)
  34. self.toolBar = QtWidgets.QToolBar(MainWindow)
  35. self.toolBar.setToolButtonStyle(QtCore.Qt.ToolButtonIconOnly)
  36. self.toolBar.setObjectName("toolBar")
  37. MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar)
  38. self.statusBar = QtWidgets.QStatusBar(MainWindow)
  39. self.statusBar.setObjectName("statusBar")
  40. MainWindow.setStatusBar(self.statusBar)
  41. self.actFont_Italic = QtWidgets.QAction(MainWindow)
  42. self.actFont_Italic.setCheckable(True)
  43. icon = QtGui.QIcon()
  44. icon.addPixmap(QtGui.QPixmap("icons/images/Italic.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  45. self.actFont_Italic.setIcon(icon)
  46. self.actFont_Italic.setObjectName("actFont_Italic")
  47. self.actFont_Bold = QtWidgets.QAction(MainWindow)
  48. self.actFont_Bold.setCheckable(True)
  49. icon1 = QtGui.QIcon()
  50. icon1.addPixmap(QtGui.QPixmap("icons/images/Bold.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  51. self.actFont_Bold.setIcon(icon1)
  52. self.actFont_Bold.setObjectName("actFont_Bold")
  53. self.actFont_Underline = QtWidgets.QAction(MainWindow)
  54. self.actFont_Underline.setCheckable(True)
  55. icon2 = QtGui.QIcon()
  56. icon2.addPixmap(QtGui.QPixmap("icons/images/underline.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  57. self.actFont_Underline.setIcon(icon2)
  58. self.actFont_Underline.setObjectName("actFont_Underline")
  59. self.actEdit_Cut = QtWidgets.QAction(MainWindow)
  60. icon3 = QtGui.QIcon()
  61. icon3.addPixmap(QtGui.QPixmap("icons/images/cut.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  62. self.actEdit_Cut.setIcon(icon3)
  63. self.actEdit_Cut.setObjectName("actEdit_Cut")
  64. self.actEdit_Copy = QtWidgets.QAction(MainWindow)
  65. icon4 = QtGui.QIcon()
  66. icon4.addPixmap(QtGui.QPixmap("icons/images/copy.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  67. self.actEdit_Copy.setIcon(icon4)
  68. self.actEdit_Copy.setObjectName("actEdit_Copy")
  69. self.actEdit_Paste = QtWidgets.QAction(MainWindow)
  70. icon5 = QtGui.QIcon()
  71. icon5.addPixmap(QtGui.QPixmap("icons/images/paste.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  72. self.actEdit_Paste.setIcon(icon5)
  73. self.actEdit_Paste.setObjectName("actEdit_Paste")
  74. self.actFile_New = QtWidgets.QAction(MainWindow)
  75. icon6 = QtGui.QIcon()
  76. icon6.addPixmap(QtGui.QPixmap("icons/images/new.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  77. self.actFile_New.setIcon(icon6)
  78. self.actFile_New.setObjectName("actFile_New")
  79. self.actFile_Open = QtWidgets.QAction(MainWindow)
  80. icon7 = QtGui.QIcon()
  81. icon7.addPixmap(QtGui.QPixmap("icons/images/open.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  82. self.actFile_Open.setIcon(icon7)
  83. self.actFile_Open.setObjectName("actFile_Open")
  84. self.actFile_Save = QtWidgets.QAction(MainWindow)
  85. icon8 = QtGui.QIcon()
  86. icon8.addPixmap(QtGui.QPixmap("icons/images/save.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  87. self.actFile_Save.setIcon(icon8)
  88. self.actFile_Save.setObjectName("actFile_Save")
  89. self.menu.addAction(self.actFile_New)
  90. self.menu.addAction(self.actFile_Open)
  91. self.menu.addAction(self.actFile_Save)
  92. self.menu.addSeparator()
  93. self.menu_2.addAction(self.actEdit_Cut)
  94. self.menu_2.addAction(self.actEdit_Copy)
  95. self.menu_2.addAction(self.actEdit_Paste)
  96. self.menu_2.addSeparator()
  97. self.menu_3.addAction(self.actFont_Italic)
  98. self.menu_3.addAction(self.actFont_Bold)
  99. self.menu_3.addAction(self.actFont_Underline)
  100. self.menu_3.addSeparator()
  101. self.menubar.addAction(self.menu.menuAction())
  102. self.menubar.addAction(self.menu_2.menuAction())
  103. self.menubar.addAction(self.menu_3.menuAction())
  104. self.toolBar.addAction(self.actFile_New)
  105. self.toolBar.addAction(self.actFile_Open)
  106. self.toolBar.addAction(self.actFile_Save)
  107. self.toolBar.addSeparator()
  108. self.toolBar.addAction(self.actEdit_Cut)
  109. self.toolBar.addAction(self.actEdit_Copy)
  110. self.toolBar.addAction(self.actEdit_Paste)
  111. self.toolBar.addSeparator()
  112. self.toolBar.addAction(self.actFont_Italic)
  113. self.toolBar.addAction(self.actFont_Bold)
  114. self.toolBar.addSeparator()
  115. self.toolBar.addAction(self.actFont_Underline)
  116. self.toolBar.addSeparator()
  117.  
  118. self.retranslateUi(MainWindow)
  119. self.actEdit_Cut.triggered.connect(self.plainTextEdit.cut)
  120. self.actEdit_Copy.triggered.connect(self.plainTextEdit.copy)
  121. self.actEdit_Paste.triggered.connect(self.plainTextEdit.paste)
  122. QtCore.QMetaObject.connectSlotsByName(MainWindow)
  123.  
  124. def retranslateUi(self, MainWindow):
  125. _translate = QtCore.QCoreApplication.translate
  126. MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
  127. self.menu.setTitle(_translate("MainWindow", "文件(F)"))
  128. self.menu_2.setTitle(_translate("MainWindow", "编辑(E)"))
  129. self.menu_3.setTitle(_translate("MainWindow", "格式(M)"))
  130. self.toolBar.setWindowTitle(_translate("MainWindow", "toolBar"))
  131. self.actFont_Italic.setText(_translate("MainWindow", "斜体"))
  132. self.actFont_Italic.setToolTip(_translate("MainWindow", "<html><head/><body><p><span style=\" font-style:italic;\">斜体</span></p></body></html>"))
  133. self.actFont_Bold.setText(_translate("MainWindow", "粗体"))
  134. self.actFont_Bold.setToolTip(_translate("MainWindow", "加粗"))
  135. self.actFont_Underline.setText(_translate("MainWindow", "下划线"))
  136. self.actFont_Underline.setToolTip(_translate("MainWindow", "下划线"))
  137. self.actEdit_Cut.setText(_translate("MainWindow", "剪切"))
  138. self.actEdit_Cut.setToolTip(_translate("MainWindow", "剪切到粘贴板"))
  139. self.actEdit_Cut.setShortcut(_translate("MainWindow", "Ctrl+X"))
  140. self.actEdit_Copy.setText(_translate("MainWindow", "复制"))
  141. self.actEdit_Copy.setToolTip(_translate("MainWindow", "复制到粘贴板"))
  142. self.actEdit_Copy.setShortcut(_translate("MainWindow", "Ctrl+C"))
  143. self.actEdit_Paste.setText(_translate("MainWindow", "粘贴"))
  144. self.actEdit_Paste.setToolTip(_translate("MainWindow", "从粘贴板粘贴"))
  145. self.actEdit_Paste.setShortcut(_translate("MainWindow", "Ctrl+V"))
  146. self.actFile_New.setText(_translate("MainWindow", "新建"))
  147. self.actFile_New.setToolTip(_translate("MainWindow", "新建文件"))
  148. self.actFile_New.setShortcut(_translate("MainWindow", "Ctrl+N"))
  149. self.actFile_Open.setText(_translate("MainWindow", "打开..."))
  150. self.actFile_Open.setToolTip(_translate("MainWindow", "打开文件"))
  151. self.actFile_Open.setShortcut(_translate("MainWindow", "Ctrl+O"))
  152. self.actFile_Save.setText(_translate("MainWindow", "保存"))
  153. self.actFile_Save.setToolTip(_translate("MainWindow", "保存修改"))
  154. self.actFile_Save.setShortcut(_translate("MainWindow", "Ctrl+S"))

myMainWindow.py

  1. #!/usr/bin/env python
  2. # _*_ coding: UTF-8 _*_
  3. """=================================================
  4. @Project -> File : Operate-system -> myMainWindow.py
  5. @IDE : PyCharm
  6. @Author : zihan
  7. @Date : 2020/4/11 14:44
  8. @Desc :
  9. ================================================="""
  10.  
  11. import sys
  12. from PyQt5.QtWidgets import (QApplication, QMainWindow, QActionGroup, QLabel, QProgressBar, QSpinBox, QFontComboBox)
  13. from PyQt5.QtCore import Qt, pyqtSlot
  14. from PyQt5.QtGui import QTextCharFormat, QFont
  15.  
  16. from ui_mainWindow import Ui_MainWindow
  17.  
  18. class QmyMainWindow(QMainWindow):
  19. def __init__(self, parent=None):
  20. super().__init__(parent)
  21. self.ui = Ui_MainWindow()
  22. self.ui.setupUi(self)
  23.  
  24. self.__buildUI()
  25.  
  26. # 设置斜体
  27. self.ui.actFont_Italic.triggered.connect(self.do_act_font_italic_triggered)
  28. # 设置粗体
  29. self.ui.actFont_Bold.triggered.connect(self.do_act_font_bold_triggered)
  30. # 设置下划线
  31. self.ui.actFont_Underline.triggered.connect(self.do_act_underline_triggered)
  32.  
  33. # 新建文件
  34. self.ui.actFile_New.triggered.connect(self.do_act_file_new_triggered)
  35. # 打开文件
  36. self.ui.actFile_Open.triggered.connect(self.do_act_file_open_triggered)
  37. # 保存文件
  38. self.ui.actFile_Save.triggered.connect(self.do_act_file_save_triggered)
  39.  
  40. def __buildUI(self): # 窗体上动态添加组件
  41. # 创建状态栏上的组件
  42. self.__LabFile = QLabel(self) # QLabel组件显示信息
  43. self.__LabFile.setMinimumWidth(150)
  44. self.__LabFile.setText("文件名:")
  45. self.ui.statusBar.addWidget(self.__LabFile) # 添加到状态栏
  46.  
  47. self.__progressBar1 = QProgressBar(self)
  48. self.__progressBar1.setMaximumWidth(200)
  49. self.__progressBar1.setMinimum(5)
  50. self.__progressBar1.setMaximum(50)
  51. sz = self.ui.plainTextEdit.font().pointSize() # 字体大小
  52. self.__progressBar1.setValue(sz)
  53. self.ui.statusBar.addWidget(self.__progressBar1) # 添加到状态栏
  54.  
  55. self.__LabInfo = QLabel(self) # QLabel组件显示字体名称
  56. self.__LabInfo.setText("选择字体名称:")
  57. self.ui.statusBar.addPermanentWidget(self.__LabInfo) # 添加到状态栏
  58.  
  59. @pyqtSlot(bool)
  60. def do_act_font_italic_triggered(self, checked): # 斜体
  61. fmt = self.ui.plainTextEdit.currentCharFormat()
  62. fmt.setFontItalic(checked)
  63. self.ui.plainTextEdit.mergeCurrentCharFormat(fmt)
  64.  
  65. @pyqtSlot(bool)
  66. def do_act_font_bold_triggered(self, checked): # 粗体
  67. fmt = self.ui.plainTextEdit.currentCharFormat()
  68. if checked:
  69. fmt.setFontWeight(QFont.Bold)
  70. else:
  71. fmt.setFontWeight(QFont.Normal)
  72. self.ui.plainTextEdit.mergeCurrentCharFormat(fmt)
  73.  
  74. @pyqtSlot(bool)
  75. def do_act_underline_triggered(self, checked): # 下划线
  76. fmt = self.ui.plainTextEdit.currentCharFormat()
  77. fmt.setFontUnderline(checked)
  78. self.ui.plainTextEdit.mergeCurrentCharFormat(fmt)
  79.  
  80. def do_act_file_new_triggered(self): # 新建文件,不实现具体功能
  81. self.__LabFile.setText(" 新建文件")
  82.  
  83. def do_act_file_open_triggered(self): # 打开文件,不实现具体功能
  84. self.__LabFile.setText(" 打开的文件")
  85.  
  86. def do_act_file_save_triggered(self): # 保存文件,不实现具体功能
  87. self.__LabFile.setText(" 文件已保存")
  88.  
  89. if __name__ == "__main__":
  90. app = QApplication(sys.argv) # 创建app,用QApplication类
  91. form = QmyMainWindow()
  92. form.show()
  93. sys.exit(app.exec_())

ok.

第十三篇 -- QMainWindow与QAction(新建-打开-保存)的更多相关文章

  1. 第十四篇 -- QMainWindow与QAction(清空-全选-撤销-重做-关闭-语言选择)

    效果图: 这次添加了关闭-撤销-重做-全选-清空等功能,并添加了字体和字体大小选择.基本方法跟前面几篇类似. ui_mainWindow.py # -*- coding: utf-8 -*- # Fo ...

  2. 第十一篇 -- QMainWindow与QAction(斜体-粗体-下划线)

    效果图: ui_mainWindow.py # -*- coding: utf-8 -*- # Form implementation generated from reading ui file ' ...

  3. 第十二篇 -- QMainWindow与QAction(剪切-复制-粘贴)

    效果图: 按照上一节的方法,将剪切-复制-粘贴图标放置到工具栏后,为其指定槽函数.这些功能无需自己编写代码来实现,QPlainTextEdit提供了实现这些编辑功能的槽函数,如cut().copy() ...

  4. 第十三篇 Integration Services:SSIS变量

    本篇文章是Integration Services系列的第十三篇,详细内容请参考原文. 简介在前一篇我们结合了之前所学的冒泡.日志记录.父子模式创建一个自定义的SSIS包日志记录模式.在这一篇,我们将 ...

  5. Qt 文本文件的打开、新建、保存以及另存为

    我们平时在使用windows的notepad以及其他各种软件过程中,都会有保存文件和另存为两种功能,这两者不能混为一谈. 一.保存时有两种情况,一种是对于新创建的文件,一种是对于已有的文件,前者需要打 ...

  6. 【译】第十三篇 Integration Services:SSIS变量

    本篇文章是Integration Services系列的第十三篇,详细内容请参考原文. 简介在前一篇我们结合了之前所学的冒泡.日志记录.父子模式创建一个自定义的SSIS包日志记录模式.在这一篇,我们将 ...

  7. 解剖SQLSERVER 第十三篇 Integers在行压缩和页压缩里的存储格式揭秘(译)

    解剖SQLSERVER 第十三篇    Integers在行压缩和页压缩里的存储格式揭秘(译) http://improve.dk/the-anatomy-of-row-amp-page-compre ...

  8. Python之路【第十三篇】:jQuery -暂无内容-待更新

    Python之路[第十三篇]:jQuery -暂无内容-待更新

  9. Python开发【第二十三篇】:持续更新中...

    Python开发[第二十三篇]:持续更新中...

随机推荐

  1. 合宙Luat | 电源设计——模块应用必看的2个要点

    在模块应用设计中,电源设计是很重要的一部分. 由于射频发射时,会在短时间有一个较大电流的突发脉冲.在突发脉冲阶段内,电源必须能够提供高的峰值电流,不然有可能会引起供电电压的跌落.   而很多初学的朋友 ...

  2. noip2006总结

    T1 能量项链 原题 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子,前一颗珠子 ...

  3. MySQL 为什么使用 B+ 树来作索引?

    什么是索引? 所谓的索引,就是帮助 MySQL 高效获取数据的排好序的数据结构.因此,根据索引的定义,构建索引其实就是数据排序的过程. 平时常见的索引数据结构有: 二叉树 红黑树 哈希表 B Tree ...

  4. Java安全之反序列化回显与内存马

    Java安全之反序列化回显与内存马 0x00 前言 按照我个人的理解来说其实只要能拿到Request 和 Response对象即可进行回显的构造,当然这也是众多方式的一种.也是目前用的较多的方式.比如 ...

  5. 安卓开发(3)—1— Activity

    安卓开发(3)-1- Activity 3.1 Activity是什么: 在前面安卓概述中有提到,Activity是Android开发中的四大组件,所有在app里可以看到的东西都是Activity里面 ...

  6. 什么是TCP和UDP?

    1.什么是IP和TCP? Internet协议(IP)是Internet的地址系统,具有将数据包从源设备传递到目标设备的核心功能.IP是建立网络连接的主要方式,奠定了Internet的基础.IP不负责 ...

  7. jenkins 修改端口后无法启动的解决思路

    一.问题 jenkins网站绑定域名后直接通过域名访问使用的是8080端口,为方便用户访问因此须监听80端口,而为了安全起见linux一般不用root身份运行,综上,需要以普通用户来运行监听80端口时 ...

  8. 23、nginx动态添加nginx_upstream_check_module健康检查模块

    nginx_upstream_check_module模块地址:https://github.com/yaoweibin/nginx_upstream_check_module 23.1.说明: 1. ...

  9. 如何获取微信小程序for循环的index

    在微信小程序开发中,对于wx:for,可以使用wx:for-index="index"来获取数组中的元素的索引值(下标). <view class="item&qu ...

  10. MPP大规模并行处理架构详解

    面试官:说下你知道的MPP架构的计算引擎? 这个问题不少小伙伴在面试时都遇到过,因为对MPP这个概念了解较少,不少人都卡壳了,但是我们常用的大数据计算引擎有很多都是MPP架构的,像我们熟悉的Impal ...