第十三篇 -- QMainWindow与QAction(新建-打开-保存)
阅读原文时间:2023年07月09日阅读:5

效果图:

添加了三个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.