效果图:

添加了三个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. zabbix 发现 vmvare esxi6.7 虚拟主机

    1:服务端配置确认 确保 #vi /etc/zabbiz/zabbix-server/zabbix_server.conf ## 确认其中有 StartVMwareCollectors项目 值 > ...

  2. Qt中的多线程与线程池浅析+实例

    1. Qt中的多线程与线程池 今天学习了Qt中的多线程和线程池,特写这篇博客来记录一下 2. 多线程 2.1 线程类 QThread Qt 中提供了一个线程类,通过这个类就可以创建子线程了,Qt 中一 ...

  3. js笔记17

    BOM浏览器对象模型 1.window.open(url,ways) url 是打开的网页地址 ways 打开的方式  _self 2.window.close() 3.浏览器用户的信息 window ...

  4. Keyboarding(信息学奥赛一本通-T1452)

    [题目描述] 出自 World Final 2015 F. Keyboarding 给定一个 r 行 c 列的在电视上的"虚拟键盘",通过「上,下,左,右,选择」共 5 个控制键, ...

  5. FlowNet:simple / correlation 与 相关联操作

    Flow Net : simple / correlation 与 相关联操作 ​ 上一篇文章中(还没来得及写),已经简单的讲解了光流是什么以及光流是如何求得的.同时介绍了几个光流领域的经典传统算法. ...

  6. Python之面向对象编程【小明跑步】、【置办家具】

    #!usr/bin/python 2 #encoding=utf-8 3 #-----------------小明跑步------------- 4 #1.小明体重75.0公斤 5 #2.小明每次跑步 ...

  7. Min25 筛与 Powerful Numbers

    Min25 筛与 Powerful Numbers Min25 筛 大喊一声 Min25 NB!!! 这是一个非常神奇的东西,用于求更加普遍的积性函数的前缀和. 比如我们要求 \(\sum_{i=1} ...

  8. python使用笔记14--商品管理小练习

    1 import json 2 import pymysql 3 IP = '127.0.0.1' 4 PORT = 3306 5 USER_NAME = 'root' 6 PASSWORD = '1 ...

  9. 管理员的基本防范措施 Linux系统安全及应用

    系统安全及应用一.账号安全基本措施① 系统账号清理② 密码安全控制③ 命令历史限制④ 终端自动注销二.SU命令切换用户① 用途及用法② 验证密码③ 限制使用su命令的用户④ 查看su操作记录补充三.L ...

  10. HCNA Routing&Switching之动态路由协议OSPF建立邻居的条件

    前文我们了解了OSPF的router id.数据包结构.类型.不同类型的数据包作用以及OSPF状态机制,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15027 ...