第十三篇 -- QMainWindow与QAction(新建-打开-保存)
效果图:
添加了三个Action,分别是新建,打开,和保存,没有具体写相应的功能,只是提供了一个接口,可以自己写相应的功能。这次不仅将这些Action放在了工具栏,还将其添加到了菜单栏。方法同样是直接将Action拖到菜单栏相应的位置就行了,和工具栏一样,就不赘述了。
另外,还添加了状态栏,create statusBar,如果在界面上找不到右击的地方,可以在Object Inspector那个地方右击添加。创建了状态栏之后,可以使用代码在窗体窗体创建后在动态添加组件self.__buildUI()。
ui_mainWindow.py
- # -*- coding: utf-8 -*-
- # Form implementation generated from reading ui file 'ui_mainWindow.ui'
- #
- # Created by: PyQt5 UI code generator 5.13.0
- #
- # WARNING! All changes made in this file will be lost!
- from PyQt5 import QtCore, QtGui, QtWidgets
- class Ui_MainWindow(object):
- def setupUi(self, MainWindow):
- MainWindow.setObjectName("MainWindow")
- MainWindow.resize(532, 367)
- self.centralwidget = QtWidgets.QWidget(MainWindow)
- self.centralwidget.setObjectName("centralwidget")
- self.plainTextEdit = QtWidgets.QPlainTextEdit(self.centralwidget)
- self.plainTextEdit.setGeometry(QtCore.QRect(0, 0, 531, 291))
- font = QtGui.QFont()
- font.setPointSize(18)
- self.plainTextEdit.setFont(font)
- self.plainTextEdit.setObjectName("plainTextEdit")
- MainWindow.setCentralWidget(self.centralwidget)
- self.menubar = QtWidgets.QMenuBar(MainWindow)
- self.menubar.setGeometry(QtCore.QRect(0, 0, 532, 21))
- self.menubar.setObjectName("menubar")
- self.menu = QtWidgets.QMenu(self.menubar)
- self.menu.setObjectName("menu")
- self.menu_2 = QtWidgets.QMenu(self.menubar)
- self.menu_2.setObjectName("menu_2")
- self.menu_3 = QtWidgets.QMenu(self.menubar)
- self.menu_3.setObjectName("menu_3")
- MainWindow.setMenuBar(self.menubar)
- self.toolBar = QtWidgets.QToolBar(MainWindow)
- self.toolBar.setToolButtonStyle(QtCore.Qt.ToolButtonIconOnly)
- self.toolBar.setObjectName("toolBar")
- MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar)
- self.statusBar = QtWidgets.QStatusBar(MainWindow)
- self.statusBar.setObjectName("statusBar")
- MainWindow.setStatusBar(self.statusBar)
- self.actFont_Italic = QtWidgets.QAction(MainWindow)
- self.actFont_Italic.setCheckable(True)
- icon = QtGui.QIcon()
- icon.addPixmap(QtGui.QPixmap("icons/images/Italic.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
- self.actFont_Italic.setIcon(icon)
- self.actFont_Italic.setObjectName("actFont_Italic")
- self.actFont_Bold = QtWidgets.QAction(MainWindow)
- self.actFont_Bold.setCheckable(True)
- icon1 = QtGui.QIcon()
- icon1.addPixmap(QtGui.QPixmap("icons/images/Bold.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
- self.actFont_Bold.setIcon(icon1)
- self.actFont_Bold.setObjectName("actFont_Bold")
- self.actFont_Underline = QtWidgets.QAction(MainWindow)
- self.actFont_Underline.setCheckable(True)
- icon2 = QtGui.QIcon()
- icon2.addPixmap(QtGui.QPixmap("icons/images/underline.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
- self.actFont_Underline.setIcon(icon2)
- self.actFont_Underline.setObjectName("actFont_Underline")
- self.actEdit_Cut = QtWidgets.QAction(MainWindow)
- icon3 = QtGui.QIcon()
- icon3.addPixmap(QtGui.QPixmap("icons/images/cut.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
- self.actEdit_Cut.setIcon(icon3)
- self.actEdit_Cut.setObjectName("actEdit_Cut")
- self.actEdit_Copy = QtWidgets.QAction(MainWindow)
- icon4 = QtGui.QIcon()
- icon4.addPixmap(QtGui.QPixmap("icons/images/copy.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
- self.actEdit_Copy.setIcon(icon4)
- self.actEdit_Copy.setObjectName("actEdit_Copy")
- self.actEdit_Paste = QtWidgets.QAction(MainWindow)
- icon5 = QtGui.QIcon()
- icon5.addPixmap(QtGui.QPixmap("icons/images/paste.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
- self.actEdit_Paste.setIcon(icon5)
- self.actEdit_Paste.setObjectName("actEdit_Paste")
- self.actFile_New = QtWidgets.QAction(MainWindow)
- icon6 = QtGui.QIcon()
- icon6.addPixmap(QtGui.QPixmap("icons/images/new.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
- self.actFile_New.setIcon(icon6)
- self.actFile_New.setObjectName("actFile_New")
- self.actFile_Open = QtWidgets.QAction(MainWindow)
- icon7 = QtGui.QIcon()
- icon7.addPixmap(QtGui.QPixmap("icons/images/open.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
- self.actFile_Open.setIcon(icon7)
- self.actFile_Open.setObjectName("actFile_Open")
- self.actFile_Save = QtWidgets.QAction(MainWindow)
- icon8 = QtGui.QIcon()
- icon8.addPixmap(QtGui.QPixmap("icons/images/save.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
- self.actFile_Save.setIcon(icon8)
- self.actFile_Save.setObjectName("actFile_Save")
- self.menu.addAction(self.actFile_New)
- self.menu.addAction(self.actFile_Open)
- self.menu.addAction(self.actFile_Save)
- self.menu.addSeparator()
- self.menu_2.addAction(self.actEdit_Cut)
- self.menu_2.addAction(self.actEdit_Copy)
- self.menu_2.addAction(self.actEdit_Paste)
- self.menu_2.addSeparator()
- self.menu_3.addAction(self.actFont_Italic)
- self.menu_3.addAction(self.actFont_Bold)
- self.menu_3.addAction(self.actFont_Underline)
- self.menu_3.addSeparator()
- self.menubar.addAction(self.menu.menuAction())
- self.menubar.addAction(self.menu_2.menuAction())
- self.menubar.addAction(self.menu_3.menuAction())
- self.toolBar.addAction(self.actFile_New)
- self.toolBar.addAction(self.actFile_Open)
- self.toolBar.addAction(self.actFile_Save)
- self.toolBar.addSeparator()
- self.toolBar.addAction(self.actEdit_Cut)
- self.toolBar.addAction(self.actEdit_Copy)
- self.toolBar.addAction(self.actEdit_Paste)
- self.toolBar.addSeparator()
- self.toolBar.addAction(self.actFont_Italic)
- self.toolBar.addAction(self.actFont_Bold)
- self.toolBar.addSeparator()
- self.toolBar.addAction(self.actFont_Underline)
- self.toolBar.addSeparator()
- self.retranslateUi(MainWindow)
- self.actEdit_Cut.triggered.connect(self.plainTextEdit.cut)
- self.actEdit_Copy.triggered.connect(self.plainTextEdit.copy)
- self.actEdit_Paste.triggered.connect(self.plainTextEdit.paste)
- QtCore.QMetaObject.connectSlotsByName(MainWindow)
- def retranslateUi(self, MainWindow):
- _translate = QtCore.QCoreApplication.translate
- MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
- self.menu.setTitle(_translate("MainWindow", "文件(F)"))
- self.menu_2.setTitle(_translate("MainWindow", "编辑(E)"))
- self.menu_3.setTitle(_translate("MainWindow", "格式(M)"))
- self.toolBar.setWindowTitle(_translate("MainWindow", "toolBar"))
- self.actFont_Italic.setText(_translate("MainWindow", "斜体"))
- self.actFont_Italic.setToolTip(_translate("MainWindow", "<html><head/><body><p><span style=\" font-style:italic;\">斜体</span></p></body></html>"))
- self.actFont_Bold.setText(_translate("MainWindow", "粗体"))
- self.actFont_Bold.setToolTip(_translate("MainWindow", "加粗"))
- self.actFont_Underline.setText(_translate("MainWindow", "下划线"))
- self.actFont_Underline.setToolTip(_translate("MainWindow", "下划线"))
- self.actEdit_Cut.setText(_translate("MainWindow", "剪切"))
- self.actEdit_Cut.setToolTip(_translate("MainWindow", "剪切到粘贴板"))
- self.actEdit_Cut.setShortcut(_translate("MainWindow", "Ctrl+X"))
- self.actEdit_Copy.setText(_translate("MainWindow", "复制"))
- self.actEdit_Copy.setToolTip(_translate("MainWindow", "复制到粘贴板"))
- self.actEdit_Copy.setShortcut(_translate("MainWindow", "Ctrl+C"))
- self.actEdit_Paste.setText(_translate("MainWindow", "粘贴"))
- self.actEdit_Paste.setToolTip(_translate("MainWindow", "从粘贴板粘贴"))
- self.actEdit_Paste.setShortcut(_translate("MainWindow", "Ctrl+V"))
- self.actFile_New.setText(_translate("MainWindow", "新建"))
- self.actFile_New.setToolTip(_translate("MainWindow", "新建文件"))
- self.actFile_New.setShortcut(_translate("MainWindow", "Ctrl+N"))
- self.actFile_Open.setText(_translate("MainWindow", "打开..."))
- self.actFile_Open.setToolTip(_translate("MainWindow", "打开文件"))
- self.actFile_Open.setShortcut(_translate("MainWindow", "Ctrl+O"))
- self.actFile_Save.setText(_translate("MainWindow", "保存"))
- self.actFile_Save.setToolTip(_translate("MainWindow", "保存修改"))
- self.actFile_Save.setShortcut(_translate("MainWindow", "Ctrl+S"))
myMainWindow.py
- #!/usr/bin/env python
- # _*_ coding: UTF-8 _*_
- """=================================================
- @Project -> File : Operate-system -> myMainWindow.py
- @IDE : PyCharm
- @Author : zihan
- @Date : 2020/4/11 14:44
- @Desc :
- ================================================="""
- import sys
- from PyQt5.QtWidgets import (QApplication, QMainWindow, QActionGroup, QLabel, QProgressBar, QSpinBox, QFontComboBox)
- from PyQt5.QtCore import Qt, pyqtSlot
- from PyQt5.QtGui import QTextCharFormat, QFont
- from ui_mainWindow import Ui_MainWindow
- class QmyMainWindow(QMainWindow):
- def __init__(self, parent=None):
- super().__init__(parent)
- self.ui = Ui_MainWindow()
- self.ui.setupUi(self)
- self.__buildUI()
- # 设置斜体
- self.ui.actFont_Italic.triggered.connect(self.do_act_font_italic_triggered)
- # 设置粗体
- self.ui.actFont_Bold.triggered.connect(self.do_act_font_bold_triggered)
- # 设置下划线
- self.ui.actFont_Underline.triggered.connect(self.do_act_underline_triggered)
- # 新建文件
- self.ui.actFile_New.triggered.connect(self.do_act_file_new_triggered)
- # 打开文件
- self.ui.actFile_Open.triggered.connect(self.do_act_file_open_triggered)
- # 保存文件
- self.ui.actFile_Save.triggered.connect(self.do_act_file_save_triggered)
- def __buildUI(self): # 窗体上动态添加组件
- # 创建状态栏上的组件
- self.__LabFile = QLabel(self) # QLabel组件显示信息
- self.__LabFile.setMinimumWidth(150)
- self.__LabFile.setText("文件名:")
- self.ui.statusBar.addWidget(self.__LabFile) # 添加到状态栏
- self.__progressBar1 = QProgressBar(self)
- self.__progressBar1.setMaximumWidth(200)
- self.__progressBar1.setMinimum(5)
- self.__progressBar1.setMaximum(50)
- sz = self.ui.plainTextEdit.font().pointSize() # 字体大小
- self.__progressBar1.setValue(sz)
- self.ui.statusBar.addWidget(self.__progressBar1) # 添加到状态栏
- self.__LabInfo = QLabel(self) # QLabel组件显示字体名称
- self.__LabInfo.setText("选择字体名称:")
- self.ui.statusBar.addPermanentWidget(self.__LabInfo) # 添加到状态栏
- @pyqtSlot(bool)
- def do_act_font_italic_triggered(self, checked): # 斜体
- fmt = self.ui.plainTextEdit.currentCharFormat()
- fmt.setFontItalic(checked)
- self.ui.plainTextEdit.mergeCurrentCharFormat(fmt)
- @pyqtSlot(bool)
- def do_act_font_bold_triggered(self, checked): # 粗体
- fmt = self.ui.plainTextEdit.currentCharFormat()
- if checked:
- fmt.setFontWeight(QFont.Bold)
- else:
- fmt.setFontWeight(QFont.Normal)
- self.ui.plainTextEdit.mergeCurrentCharFormat(fmt)
- @pyqtSlot(bool)
- def do_act_underline_triggered(self, checked): # 下划线
- fmt = self.ui.plainTextEdit.currentCharFormat()
- fmt.setFontUnderline(checked)
- self.ui.plainTextEdit.mergeCurrentCharFormat(fmt)
- def do_act_file_new_triggered(self): # 新建文件,不实现具体功能
- self.__LabFile.setText(" 新建文件")
- def do_act_file_open_triggered(self): # 打开文件,不实现具体功能
- self.__LabFile.setText(" 打开的文件")
- def do_act_file_save_triggered(self): # 保存文件,不实现具体功能
- self.__LabFile.setText(" 文件已保存")
- if __name__ == "__main__":
- app = QApplication(sys.argv) # 创建app,用QApplication类
- form = QmyMainWindow()
- form.show()
- sys.exit(app.exec_())
ok.
第十三篇 -- QMainWindow与QAction(新建-打开-保存)的更多相关文章
- 第十四篇 -- QMainWindow与QAction(清空-全选-撤销-重做-关闭-语言选择)
效果图: 这次添加了关闭-撤销-重做-全选-清空等功能,并添加了字体和字体大小选择.基本方法跟前面几篇类似. ui_mainWindow.py # -*- coding: utf-8 -*- # Fo ...
- 第十一篇 -- QMainWindow与QAction(斜体-粗体-下划线)
效果图: ui_mainWindow.py # -*- coding: utf-8 -*- # Form implementation generated from reading ui file ' ...
- 第十二篇 -- QMainWindow与QAction(剪切-复制-粘贴)
效果图: 按照上一节的方法,将剪切-复制-粘贴图标放置到工具栏后,为其指定槽函数.这些功能无需自己编写代码来实现,QPlainTextEdit提供了实现这些编辑功能的槽函数,如cut().copy() ...
- 第十三篇 Integration Services:SSIS变量
本篇文章是Integration Services系列的第十三篇,详细内容请参考原文. 简介在前一篇我们结合了之前所学的冒泡.日志记录.父子模式创建一个自定义的SSIS包日志记录模式.在这一篇,我们将 ...
- Qt 文本文件的打开、新建、保存以及另存为
我们平时在使用windows的notepad以及其他各种软件过程中,都会有保存文件和另存为两种功能,这两者不能混为一谈. 一.保存时有两种情况,一种是对于新创建的文件,一种是对于已有的文件,前者需要打 ...
- 【译】第十三篇 Integration Services:SSIS变量
本篇文章是Integration Services系列的第十三篇,详细内容请参考原文. 简介在前一篇我们结合了之前所学的冒泡.日志记录.父子模式创建一个自定义的SSIS包日志记录模式.在这一篇,我们将 ...
- 解剖SQLSERVER 第十三篇 Integers在行压缩和页压缩里的存储格式揭秘(译)
解剖SQLSERVER 第十三篇 Integers在行压缩和页压缩里的存储格式揭秘(译) http://improve.dk/the-anatomy-of-row-amp-page-compre ...
- Python之路【第十三篇】:jQuery -暂无内容-待更新
Python之路[第十三篇]:jQuery -暂无内容-待更新
- Python开发【第二十三篇】:持续更新中...
Python开发[第二十三篇]:持续更新中...
随机推荐
- 合宙Luat | 电源设计——模块应用必看的2个要点
在模块应用设计中,电源设计是很重要的一部分. 由于射频发射时,会在短时间有一个较大电流的突发脉冲.在突发脉冲阶段内,电源必须能够提供高的峰值电流,不然有可能会引起供电电压的跌落. 而很多初学的朋友 ...
- noip2006总结
T1 能量项链 原题 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子,前一颗珠子 ...
- MySQL 为什么使用 B+ 树来作索引?
什么是索引? 所谓的索引,就是帮助 MySQL 高效获取数据的排好序的数据结构.因此,根据索引的定义,构建索引其实就是数据排序的过程. 平时常见的索引数据结构有: 二叉树 红黑树 哈希表 B Tree ...
- Java安全之反序列化回显与内存马
Java安全之反序列化回显与内存马 0x00 前言 按照我个人的理解来说其实只要能拿到Request 和 Response对象即可进行回显的构造,当然这也是众多方式的一种.也是目前用的较多的方式.比如 ...
- 安卓开发(3)—1— Activity
安卓开发(3)-1- Activity 3.1 Activity是什么: 在前面安卓概述中有提到,Activity是Android开发中的四大组件,所有在app里可以看到的东西都是Activity里面 ...
- 什么是TCP和UDP?
1.什么是IP和TCP? Internet协议(IP)是Internet的地址系统,具有将数据包从源设备传递到目标设备的核心功能.IP是建立网络连接的主要方式,奠定了Internet的基础.IP不负责 ...
- jenkins 修改端口后无法启动的解决思路
一.问题 jenkins网站绑定域名后直接通过域名访问使用的是8080端口,为方便用户访问因此须监听80端口,而为了安全起见linux一般不用root身份运行,综上,需要以普通用户来运行监听80端口时 ...
- 23、nginx动态添加nginx_upstream_check_module健康检查模块
nginx_upstream_check_module模块地址:https://github.com/yaoweibin/nginx_upstream_check_module 23.1.说明: 1. ...
- 如何获取微信小程序for循环的index
在微信小程序开发中,对于wx:for,可以使用wx:for-index="index"来获取数组中的元素的索引值(下标). <view class="item&qu ...
- MPP大规模并行处理架构详解
面试官:说下你知道的MPP架构的计算引擎? 这个问题不少小伙伴在面试时都遇到过,因为对MPP这个概念了解较少,不少人都卡壳了,但是我们常用的大数据计算引擎有很多都是MPP架构的,像我们熟悉的Impal ...