PyQt5-QMainWindow与QAction

image
image
image

下面是我设计的:

1.界面

image

2.对象查看器

image

3.信号槽

image

4.动作编辑器

image
image

5.myWidget.py文件

import sys
from PyQt5.QtWidgets import  (QMainWindow,QApplication,QActionGroup,
QLabel,QProgressBar,QSpinBox,QFontComboBox)

from PyQt5.QtCore import pyqtSlot,Qt
from PyQt5.QtGui import QTextCharFormat,QFont

from ui_QtApp import Ui_MainWindow
class QmyMainWindow(QMainWindow):
    def __init__(self,parent=None):
        super().__init__(parent) #调用父类构造函数
        self.ui=Ui_MainWindow() #创建UI对象
        self.ui.setupUi(self) #构造UI
        self.__buildUI() #动态创建组件,添加到工具栏和状态栏
        self.__spinFontSize.valueChanged[int].connect(
            self.do_fontSize_Changed #字体大小设置
        )
        self.__comboFontName.currentIndexChanged[str].connect(
            self.do_fontName_Changed)# 字体选择
        self.setCentralWidget(self.ui.plainTextEdit)

    ## ====由connectSlotsByName()自动与组件的信号关联的槽函数=====
    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)# progressBar1
        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)  # 添加到状态栏

        ##为actLang_CN和actLang_EN创建QActionGroup,互斥型选择
        actionGroup = QActionGroup(self)
        actionGroup.addAction(self.ui.actLang_CN)
        actionGroup.addAction(self.ui.actLang_EN)
        actionGroup.setExclusive(True)# 互斥型分组
        self.ui.actLang_CN.setChecked(True)

        ##创建工具栏上的组件
        self.__spinFontSize = QSpinBox(self)
        # 字体大小spinbox
        self.__spinFontSize.setMinimum(5)
        self.__spinFontSize.setMaximum(50)
        sz = self.ui.plainTextEdit.font().pointSize()
        self.__spinFontSize.setValue(sz)
        self.__spinFontSize.setMinimumWidth(50)
        self.ui.toolBar.addWidget(self.__spinFontSize)# 添加到工具栏

        self.__comboFontName = QFontComboBox(self)
        # 字体combobox
        self.__comboFontName.setMinimumWidth(100)
        self.ui.toolBar.addWidget(self.__comboFontName)
        # 添加到工具栏
        self.ui.toolBar.addSeparator()
        # 添加一个分隔条
        self.ui.toolBar.addAction(self.ui.actClose)
        # 添加"关闭"按钮

    @pyqtSlot(int)##设置字体大小,关联self.__spinFontSize
    def do_fontSize_Changed(self, fontSize):
        fmt = self.ui.plainTextEdit.currentCharFormat()
        fmt.setFontPointSize(fontSize)
        self.ui.plainTextEdit.mergeCurrentCharFormat(fmt)
        self.__progressBar1.setValue(fontSize)

    @pyqtSlot(str)##选择字体名称,关联self.__comboFontName
    def do_fontName_Changed(self, fontName):
        fmt = self.ui.plainTextEdit.currentCharFormat()
        fmt.setFontFamily(fontName)
        self.ui.plainTextEdit.mergeCurrentCharFormat(fmt)
        self.__LabInfo.setText("字体名称:%s"%fontName)

    @pyqtSlot(bool)
    ##设置粗体
    def on_actFont_Bold_triggered(self, checked):
        fmt = self.ui.plainTextEdit.currentCharFormat()
        if (checked == True):
            fmt.setFontWeight(QFont.Bold)
        else:
            fmt.setFontWeight(QFont.Normal)
        self.ui.plainTextEdit.mergeCurrentCharFormat(fmt)

    @pyqtSlot(bool)
    ##设置斜体
    def on_actFont_Italic_triggered(self, checked):
        fmt = self.ui.plainTextEdit.currentCharFormat()
        fmt.setFontItalic(checked)
        self.ui.plainTextEdit.mergeCurrentCharFormat(fmt)

    @pyqtSlot(bool)
    ##设置下划线
    def on_actFont_UnderLine_triggered(self, checked):
        fmt = self.ui.plainTextEdit.currentCharFormat()
        fmt.setFontUnderline(checked)
        self.ui.plainTextEdit.mergeCurrentCharFormat(fmt)

    def on_plainTextEdit_copyAvailable(self, avi):##文本框内容可复制
        self.ui.actEdit_Cut.setEnabled(avi)
        self.ui.actEdit_Copy.setEnabled(avi)
        self.ui.acEdit_Paste.setEnabled(self.ui.plainTextEdit.canPaste())

    def on_plainTextEdit_selectionChanged(self):  ##文本选择内容发生变化
        fmt = self.ui.plainTextEdit.currentCharFormat()
        self.ui.actFont_Bold.setChecked(fmt.font().bold())
        self.ui.actFont_Italic.setChecked(fmt.fontItalic())
        self.ui.actFont_UnderLine.setChecked(fmt.fontUnderline())

    def on_plainTextEdit_customContextMenuRequested(self, pos):  ##标准右键菜单
        popMenu = self.ui.plainTextEdit.createStandardContextMenu()
        popMenu.exec(pos) # 显示快捷菜单

    @pyqtSlot(bool)
    ##设置工具栏按钮样式
    def on_actSys_ToggleText_triggered(self, checked):
        if (checked):
            st = Qt.ToolButtonTextUnderIcon
        else:
            st = Qt.ToolButtonIconOnly
        self.ui.toolBar.setToolButtonStyle(st)

    def on_actFile_New_triggered(self):##新建文件,不实现具体功能
        self._LabFile.setText("新建文件")

    def on_actFile_Open_triggered(self):##打开文件,不实现具体功能
        self.__LabFile.setText("打开的文件")

    def on_actFile_Save_triggered(self):  ##保存文件,不实现具体功能
        self._LabFile.setText("文件已保存")

    ## =======自定义槽函数=======


if __name__ == "__main__": ##用于当前窗体测试
    app=QApplication(sys.argv) #创建GUI应用程序
    form=QmyMainWindow() #创建窗体
    form.show()
    sys.exit(app.exec_())

6.appMain.py文件

## GUI应用程序主程序
import sys
from PyQt5.QtWidgets import  QApplication
from myWidget import  QmyMainWindow

app = QApplication(sys.argv) # 创建app,用QApplication类
myWidget = QmyMainWindow() #创建窗体
myWidget.show()
sys.exit(app.exec_())

7.最终效果图

image

posted @ 2022-05-28 10:09  司砚章  阅读(186)  评论(0编辑  收藏  举报