悠闲博客-blog.yxrjt.cn

手把手教你学习PyQT5:3PyQt5基本窗口控件3

更新时间:2025-09-28 17:54点击:48

三、PyQt5基本窗口控件(QMain Window、Qwidget、QDialog、Qlabel、Spacers、QTextEdit、QLineEdit、菜单、工具栏、)
3-0、QMain Window
QMainWindow是Qt框架中的一个主窗口类,它提供了一个应用程序的主界面,可以包含菜单栏、工具栏、状态栏、中心窗口等各种窗口部件。在QMainWindow中,中心窗口是最重要的部分,它可以是任何Qt窗口部件,如QTextEdit、QTableView、QGraphicsView等。

QMainWindow可以通过Qt Designer进行设计和布局,也可以通过代码进行创建和配置。在使用Qt Designer时,可以拖放各种窗口部件到QMainWindow中,然后通过属性编辑器进行属性设置。在使用代码时,可以通过构造函数或者成员函数进行设置。

QMainWindow的一些常用成员函数包括:

setCentralWidget():设置中心窗口部件
setMenuBar():设置菜单栏
addToolBar():添加工具栏
statusBar():获取状态栏
show():显示主窗口
总的来说,QMainWindow是一个非常强大的窗口部件,它可以用于创建各种类型的应用程序界面,如主窗口应用程序、多文档应用程序等。我们通常创建的是这个窗口

3-1、Qwidget
QWidget

是Qt框架中所有用户界面部件的基类,包括窗口、对话框、按钮、标签、文本框、图形视图等等。QWidget提供了一些基本的用户界面功能,例如绘制、事件处理、布局等。
在Qt中,所有的用户界面部件都是从QWidget派生而来的,这意味着QWidget提供了一个通用的接口,以便于在不同的用户界面部件之间共享代码和实现。同时,QWidget也提供了一些常用的属性和方法,例如size()、pos()、setWindowTitle()等,以便于管理和操作界面部件。
在创建自定义用户界面部件时,我们可以从QWidget派生出我们自己的部件类,并通过重载其成员函数来实现自定义行为。例如,我们可以通过重载QWidget的paintEvent()函数来绘制自己的部件,或者通过重载其mousePressEvent()函数来处理鼠标点击事件。
总之,QWidget是Qt框架中所有用户界面部件的基类,提供了基本的用户界面功能,包括绘制、事件处理、布局等。它是Qt框架中非常重要和常用的部件之一,对于Qt开发者来说是必须要熟练掌握的。

3-2、QMain Window、Qwidget、QDialog的区别
QWidget是Qt框架中所有用户界面部件的基类,包括窗口、对话框、按钮、标签、文本框、图形视图等等,它提供了基本的用户界面功能,例如绘制、事件处理、布局等。而QMainWindow是QWidget的子类,是Qt框架中的一个主窗口类,它提供了一个应用程序的主界面,可以包含菜单栏、工具栏、状态栏、中心窗口等各种窗口部件。具体来说,QWidget与QMainWindow的区别如下:

功能不同:QWidget提供了基本的用户界面功能,而QMainWindow提供了应用程序主窗口的各种功能,例如菜单栏、工具栏、状态栏等。
布局不同:在QWidget中,需要通过布局管理器来管理部件的布局,而在QMainWindow中,布局管理器一般用于管理中心窗口的布局,其他部件则通过设置位置和大小来进行布局。
层次结构不同:QMainWindow作为应用程序主窗口,它是顶层窗口,而QWidget可以是顶层窗口或其他窗口的子窗口。
创建方式不同:QWidget可以作为独立窗口创建,也可以作为其他窗口的子窗口创建,而QMainWindow只能作为应用程序主窗口创建。
总的来说,QWidget和QMainWindow都是Qt框架中非常重要的用户界面部件,用于创建不同类型的界面。QWidget提供了基本的用户界面功能,适用于创建各种类型的窗口和控件,而QMainWindow则提供了应用程序主窗口的各种功能,适用于创建包含菜单栏、工具栏、状态栏等的应用程序主窗口。

总结:
QDialog: 是对话窗口的基类,没有菜单栏、工具栏、状态栏。
QMainWindow: 可以包含菜单栏、工具栏、状态栏和标题栏,是最常见的形式。
QWidget: 不确定窗口的用途,就使用Qwidget。

3-3、Spacers控件
PyQt中的Spacer控件是一种用于布局的空白控件。

Spacer控件可以帮助您在布局中创建空白区域,以便在界面上分隔其他控件,或者在其他控件周围留出空白区域。 Spacer控件的大小可以通过设置其大小策略(size policy)来控制。

Spacer控件有两种类型:水平(QSpacerItem)和垂直(QSpacerItem)。您可以使用QHBoxLayout或QVBoxLayout将Spacer控件添加到布局中。在添加Spacer控件时,您可以指定其最小大小、最大大小和首选大小,以及其大小策略。

3-4、Qlabel、QLineEdit
QLabel和QLineEdit都是Qt框架中常用的用户界面控件,用于在图形用户界面(GUI)中显示文本信息和接受用户输入。以下是它们的介绍:

3-4-1、QLabel介绍
QLabel:

QLabel是一个显示文本或图像的控件,它通常被用于显示静态文本信息。可以通过设置其文本、字体、颜色、对齐方式等属性来自定义标签的样式和布局。可以将QLabel放置在主窗口、对话框或其他控件上,以便在应用程序中提供帮助文本、说明、状态消息等。

方法:

setText(text): 设置文本内容
setPixmap(pixmap): 设置图像内容
setAlignment(alignment): 设置文本或图像的对齐方式
setWordWrap( on): 当文本过长时是否自动换行
setFixedSize(width, height): 设置控件的固定大小
setStyleSheet(styleSheet): 设置控件的样式表
属性:

text(): 返回控件的文本内容
pixmap(): 返回控件的图像内容
alignment(): 返回控件的对齐方式
wordWrap(): 返回控件是否自动换行
font(): 返回控件的字体
color(): 返回控件的颜色
3-4-2、QLabel简单案例分析
以下是一个简单的例子,展示如何创建一个QLabel控件并设置它的一些属性:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel
from PyQt5.QtGui import QPixmap, QFont
from PyQt5.QtCore import Qt

class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):

        # 创建一个QLabel控件并设置文本内容
        label1 = QLabel('Hello, PyQt5!', self)
        label1.move(15, 10)

        # 创建一个QLabel控件并设置图像内容
        label2 = QLabel(self)
        pixmap = QPixmap('蓝色背景光柱.png')
        label2.setPixmap(pixmap)
        label2.move(15, 40)

        # 设置对齐方式
        label3 = QLabel(self)
        label3.setText('Align Center')
        label3.setAlignment(Qt.AlignCenter)
        label3.move(15, 160)

        # 设置字体和颜色
        label4 = QLabel(self)
        label4.setText('Font and Color')
        label4.setFont(QFont('Arial', 20))
        label4.setStyleSheet('color: red')
        label4.move(15, 190)

        self.setGeometry(300, 300, 250, 250)
        self.setWindowTitle('QLabel Example')
        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


3-4-3、QLabel案例:使用信号(详细介绍请见第六章)
以下是QLabel控件的常用信号:

linkActivated: 当控件中包含超链接时,用户单击链接时触发此信号。
linkHovered: 当用户将鼠标悬停在超链接上时,触发此信号。
linkPressed: 当用户按下并释放鼠标按钮时,同时鼠标位于超链接上时,触发此信号。
以下是一个简单的例子,演示如何使用linkActivated信号:

import sys
from PyQt5.QtWidgets import QApplication, QLabel
from PyQt5.QtGui import QDesktopServices
from PyQt5.QtCore import QUrl

class Example(QLabel):

    def __init__(self):
        super().__init__()

        self.setText('<a href="https://www.google.com">Google</a>')
        self.setOpenExternalLinks(True)
        # 绑定到指定的事件函数。
        # 点击后触发打开链接!
        self.linkActivated.connect(self.openLink)

    def openLink(self, url):
        QDesktopServices.openUrl(QUrl(url))

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    ex.show()
    sys.exit(app.exec_())



3-4-4、QLineEdit介绍
QLineEdit:
QLineEdit是一个用于接收用户输入的单行文本编辑控件,它允许用户输入和编辑文本信息。可以设置QLineEdit的输入格式,例如只允许输入数字、字母或特定字符,或者限制输入的最大长度。可以使用信号和槽机制来处理用户输入的文本,以便在应用程序中执行特定的操作或验证用户输入的有效性。

总的来说,QLabel和QLineEdit是Qt框架中非常实用的控件,它们可以为应用程序提供各种形式的文本输入和输出。

下图为添加了Qlabel和QLineEdit的FormLayput:
在这里插入图片描述
下面是QLineEdit控件的一些常用属性和方法:

text():获取或设置控件的文本内容
setText(text):设置控件的文本内容
clear():清空控件的文本内容
setAlignment(alignment):设置文本的对齐方式,alignment可以是Qt.AlignLeft、Qt.AlignRight、Qt.AlignCenter等值之一
setPlaceholderText(text):设置控件的占位符文本,当控件没有内容时显示的文本
setReadOnly(readOnly):设置控件是否为只读模式
setValidator(validator):设置控件的输入验证器,用于限制用户输入的内容
textChanged.connect(slot):文本改变时的信号,连接到相应的槽函数
3-4-5、QLineEdit简单案例
下面是一个简单的例子,演示如何创建一个QLineEdit控件并将其添加到窗口中:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QLineEdit, QVBoxLayout

class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):

        # 创建QLabel控件和QLineEdit控件
        nameLabel = QLabel('Name:')
        nameEdit = QLineEdit()
# QLineEdit控件有三种回显模式,用于指定文本框中的内容如何显示:
# Normal:默认的回显模式,输入的文本会直接显示在文本框中。
# Password:将输入的文本用星号或其他字符替代,用于密码输入等场景。可以使用setEchoChar(char)方法来指定用于替代文本的字符,默认情况下使用星号。
# NoEcho:不显示输入的文本,用于输入敏感信息等场景。可以使用setEchoMode(QLineEdit.NoEcho)方法来指定回显模式为NoEcho。
# 下边为示例:
# 设置回显模式为密码模式
        nameEdit.setEchoMode(QLineEdit.Password)

        # 创建垂直布局,并将控件添加到布局中
        vbox = QVBoxLayout()
        vbox.addWidget(nameLabel)
        vbox.addWidget(nameEdit)

        # 设置窗口布局和大小
        self.setLayout(vbox)
        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('QLineEdit Example')
        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


3-4-6、QLineEdit案例:添加校验器
限制输入:QlineEdit控件添加校验器
QLineEdit控件可以使用校验器来限制输入,常见的校验器有QIntValidator(整数校验器)、QDoubleValidator(浮点数校验器)和QRegExpValidator(正则表达式校验器)等。

下面是一个使用QIntValidator校验器和QFormLayout表单布局的示例代码,用于限制用户只能输入整数:


import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QLineEdit, QFormLayout, QIntValidator

class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):

        # 创建QLabel控件和QLineEdit控件
        nameLabel = QLabel('Name:')
        nameEdit = QLineEdit()

        # 创建整数校验器,并将其应用于QLineEdit控件
        intValidator = QIntValidator()
        nameEdit.setValidator(intValidator)

        # 创建表单布局,并将控件添加到布局中
        formLayout = QFormLayout()
        formLayout.addRow(nameLabel, nameEdit)

        # 设置窗口布局和大小
        self.setLayout(formLayout)
        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('QLineEdit Example')
        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())



以下为输出的图示:
在这里插入图片描述
在这个例子中,我们创建了一个整数校验器,并将其应用于QLineEdit控件,这样用户只能输入整数。然后,我们使用QFormLayout表单布局来组织控件,并将控件添加到布局中。最后,设置窗口布局和大小,并显示窗口。
使用校验器可以有效地限制用户的输入,避免非法输入导致程序崩溃或产生错误结果。同时,QFormLayout表单布局也可以方便地组织控件,使界面更加美观和易用。

3-4-7、QLineEdit综合案例
下面是一个使用QLineEdit控件的综合案例,包含以下内容:

创建一个主窗口,并在窗口中放置一个QLineEdit控件和一个按钮;
限制QLineEdit控件的输入为浮点数,并设置默认值;
点击按钮时,获取QLineEdit控件中的值,并进行简单的计算,并将结果显示在消息框中。
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QLineEdit, QPushButton, QMessageBox, QVBoxLayout, QWidget
from PyQt5.QtGui import QDoubleValidator

class Example(QMainWindow):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):

        # 创建QLabel控件和QLineEdit控件
        self.label = QLabel('Enter a number:', self)
        self.lineedit = QLineEdit(self)

        # 设置默认值和浮点数校验器
        self.lineedit.setText('0.0')
        validator = QDoubleValidator()
        self.lineedit.setValidator(validator)

        # 创建QPushButton控件
        self.button = QPushButton('Calculate', self)
        self.button.setToolTip('Click to calculate the square of the input value')
        self.button.clicked.connect(self.calculate)

        # 设置控件布局
        vbox = QVBoxLayout()
        vbox.addWidget(self.label)
        vbox.addWidget(self.lineedit)
        vbox.addWidget(self.button)

        widget = QWidget()
        widget.setLayout(vbox)
        self.setCentralWidget(widget)

        # 设置窗口属性
        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('QLineEdit Example')
        self.show()

    def calculate(self):

        # 获取QLineEdit控件中的值
        value = self.lineedit.text()

        # 如果值为空,则弹出警告框
        if not value:
            QMessageBox.warning(self, 'Warning', 'Please enter a number.')
            return

        # 进行计算,并显示结果
        try:
            result = float(value) ** 2
            QMessageBox.information(self, 'Result', f'The square of {value} is {result}.')
        except ValueError:
            QMessageBox.warning(self, 'Warning', 'Please enter a valid number.')

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


输出界面如下:
在这里插入图片描述

在这个例子中,我们创建了一个主窗口,并在窗口中放置了一个QLineEdit控件和一个按钮。我们使用QDoubleValidator校验器来限制QLineEdit控件的输入为浮点数,并设置了默认值为0.0。在点击按钮时,我们获取QLineEdit控件中的值,并进行简单的计算,并将结果显示在消息框中。
如果输入的值为空,我们会弹出一个警告框提示用户输入一个数字;如果输入的不是数字,我们也会弹出一个警告框提示用户输入一个有效的数字。

3-5、添加伙伴关系Qlabel、QLineEdit
在Qt Designer中,添加伙伴关系可以使得某些控件与标签或其他控件关联起来,从而使得用户输入更加方便和明确。以下是添加伙伴关系的步骤:

打开Qt Designer并加载您的UI文件。
从左侧的工具栏中选择“标签”(QLabel)或“行编辑器”(QLineEdit)控件,然后将其拖放到您想要添加伙伴关系的控件旁边。
选中要与标签或行编辑器关联的控件。可以在属性编辑器中选择“伙伴”属性。
单击“伙伴”属性旁边的“…”按钮,然后选择要添加为伙伴的标签或行编辑器。
保存您的UI文件并重新加载应用程序以查看效果。
添加伙伴关系后,用户可以使用标签或行编辑器轻松地标识与控件关联的文本或标签,并且可以通过快捷键或键盘导航更轻松地访问控件。
具体步骤:

在Qlabel后加上(&B)。
将QLabel与后边的文本输入框添加伙伴关系
之后保存,即可使用alt+B访问到文本框
在这里插入图片描述
在这里插入图片描述
代码示例:
可以使用setBuddy()方法来将一个QLabel控件和一个QLineEdit控件绑定成伙伴关系。这样在用户按下Alt键并激活QLabel控件时,可以将焦点自动转移到与之关联的QLineEdit控件中。
下面是一个简单的例子,演示如何将一个QLabel控件和一个QLineEdit控件绑定成伙伴关系,并将它们添加到一个QGridLayout布局中:

import sys
from PyQt5.QtWidgets import QApplication, QLabel, QLineEdit, QGridLayout, QWidget

class Example(QWidget):
    
    def __init__(self):
        super().__init__()
        
        self.initUI()
        
        
    def initUI(self):
        
        # 创建QLabel和QLineEdit控件,并将它们绑定成伙伴关系
        nameLabel = QLabel('Name:')
        nameEdit = QLineEdit()
        nameLabel.setBuddy(nameEdit)

        ageLabel = QLabel('Age:')
        ageEdit = QLineEdit()
        ageLabel.setBuddy(ageEdit)
        
        # 创建QGridLayout布局,并将控件添加到其中
        grid = QGridLayout()
        grid.addWidget(nameLabel, 0, 0)
        grid.addWidget(nameEdit, 0, 1)
        grid.addWidget(ageLabel, 1, 0)
        grid.addWidget(ageEdit, 1, 1)
        
        # 设置窗口布局和大小
        self.setLayout(grid)
        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Buddy Example')
        self.show()
        
        
if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


如下图所示:
在这里插入图片描述

在这个例子中,我们创建了两个QLabel控件和两个QLineEdit控件,并将它们绑定成了伙伴关系。然后我们创建了一个QGridLayout布局,并将这些控件添加到布局中。最后,我们将布局设置为窗口的布局,并显示窗口。

3-6、QTextEdit介绍
3-6-1、QTextEdit简单介绍
QTextEdit是一个可以用于显示和编辑富文本的多行文本编辑控件。它可以用于创建编辑器、日记、HTML文本查看器等。

QTextEdit可以在文本中插入多媒体内容,如图像、超链接、HTML表格等,并且可以在文本中使用样式来设置字体、颜色、背景、对齐等。QTextEdit还支持拼写检查、撤销/重做、自动缩进、文本选择等基本编辑功能。

下面是一个简单的使用QTextEdit的例子:

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QAction, QTextEdit, QFileDialog
from PyQt5.QtGui import QIcon

class Example(QMainWindow):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):

        # 创建QTextEdit控件
        self.textedit = QTextEdit(self)
        self.setCentralWidget(self.textedit)

        # 创建菜单栏
        menubar = self.menuBar()

        # 创建文件菜单
        filemenu = menubar.addMenu('File')

        # 创建“打开”操作
        openact = QAction(QIcon('open.png'), 'Open', self)
        openact.setShortcut('Ctrl+O')
        openact.triggered.connect(self.openFile)
        filemenu.addAction(openact)

        # 创建“保存”操作
        saveact = QAction(QIcon('save.png'), 'Save', self)
        saveact.setShortcut('Ctrl+S')
        saveact.triggered.connect(self.saveFile)
        filemenu.addAction(saveact)

        # 设置窗口属性
        self.setGeometry(300, 300, 350, 250)
        self.setWindowTitle('QTextEdit Example')
        self.show()

    def openFile(self):

        # 打开文件对话框
        filename = QFileDialog.getOpenFileName(self, 'Open File')[0]

        # 如果选择了文件,则读取文件内容到QTextEdit控件中
        if filename:
            with open(filename, 'r') as f:
                text = f.read()
            self.textedit.setText(text)

    def saveFile(self):

        # 打开文件对话框
        filename = QFileDialog.getSaveFileName(self, 'Save File')[0]

        # 如果选择了文件,则将QTextEdit控件中的内容保存到文件中
        if filename:
            with open(filename, 'w') as f:
                f.write(self.textedit.toPlainText())

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


输出界面如下图所示:
在这里插入图片描述

在这个例子中,我们创建了一个主窗口,并在窗口中放置了一个QTextEdit控件。我们使用菜单栏来创建“打开”和“保存”操作,当用户点击对应的菜单项时,我们会打开文件对话框,让用户选择要打开或保存的文件。如果选择了文件,则会读取文件内容到QTextEdit控件中,或将QTextEdit控件中的内容保存到文件中。

3-6-2、QTextEdit综合案例
以下是一个更综合的使用QTextEdit的例子,实现了一个简单的文本编辑器,并包括了多个功能:

打开、保存文件
新建文件
剪切、复制、粘贴、撤销、重做
设置字体、颜色、对齐方式
显示当前文档中的字数和行数
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QAction, QTextEdit, QFileDialog, QFontDialog, QColorDialog
from PyQt5.QtGui import QIcon, QTextCursor, QTextCharFormat
from PyQt5.QtCore import Qt

class Example(QMainWindow):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):

        # 创建QTextEdit控件
        self.textedit = QTextEdit(self)
        self.setCentralWidget(self.textedit)

        # 创建菜单栏
        menubar = self.menuBar()

        # 创建文件菜单
        filemenu = menubar.addMenu('File')

        # 创建“新建”操作
        newact = QAction(QIcon('new.png'), 'New', self)
        newact.setShortcut('Ctrl+N')
        newact.triggered.connect(self.newFile)
        filemenu.addAction(newact)

        # 创建“打开”操作
        openact = QAction(QIcon('open.png'), 'Open', self)
        openact.setShortcut('Ctrl+O')
        openact.triggered.connect(self.openFile)
        filemenu.addAction(openact)

        # 创建“保存”操作
        saveact = QAction(QIcon('save.png'), 'Save', self)
        saveact.setShortcut('Ctrl+S')
        saveact.triggered.connect(self.saveFile)
        filemenu.addAction(saveact)

        # 创建编辑菜单
        editmenu = menubar.addMenu('Edit')

        # 创建“剪切”操作
        cutact = QAction(QIcon('cut.png'), 'Cut', self)
        cutact.setShortcut('Ctrl+X')
        cutact.triggered.connect(self.textedit.cut)
        editmenu.addAction(cutact)

        # 创建“复制”操作
        copyact = QAction(QIcon('copy.png'), 'Copy', self)
        copyact.setShortcut('Ctrl+C')
        copyact.triggered.connect(self.textedit.copy)
        editmenu.addAction(copyact)

        # 创建“粘贴”操作
        pasteact = QAction(QIcon('paste.png'), 'Paste', self)
        pasteact.setShortcut('Ctrl+V')
        pasteact.triggered.connect(self.textedit.paste)
        editmenu.addAction(pasteact)

        # 创建“撤销”操作
        undoact = QAction(QIcon('undo.png'), 'Undo', self)
        undoact.setShortcut('Ctrl+Z')
        undoact.triggered.connect(self.textedit.undo)
        editmenu.addAction(undoact)

        # 创建“重做”操作
        redoact = QAction(QIcon('redo.png'), 'Redo', self)
        redoact.setShortcut('Ctrl+Y')
        redoact.triggered.connect(self.textedit.redo)
        editmenu.addAction(redoact)

        # 创建格式菜单
        formatmenu = menubar.addMenu('Format')

        # 创建“字体”操作
        fontact = QAction(QIcon('font.png'), 'Font', self)
        fontact.setShortcut('Ctrl+F')
        fontact.triggered.connect(self.setFont)
        formatmenu.addAction(fontact)


        # 创建“颜色”
        coloract = QAction(QIcon('color.png'), 'Color', self)
        coloract.setShortcut('Ctrl+Shift+C')
        coloract.triggered.connect(self.setColor)
        formatmenu.addAction(coloract)

        # 创建“左对齐”操作
        leftact = QAction(QIcon('left.png'), 'Align Left', self)
        leftact.setShortcut('Ctrl+L')
        leftact.triggered.connect(lambda: self.setAlignment(Qt.AlignLeft))
        formatmenu.addAction(leftact)

        # 创建“居中对齐”操作
        centeract = QAction(QIcon('center.png'), 'Align Center', self)
        centeract.setShortcut('Ctrl+E')
        centeract.triggered.connect(lambda: self.setAlignment(Qt.AlignCenter))
        formatmenu.addAction(centeract)

        # 创建“右对齐”操作
        rightact = QAction(QIcon('right.png'), 'Align Right', self)
        rightact.setShortcut('Ctrl+R')
        rightact.triggered.connect(lambda: self.setAlignment(Qt.AlignRight))
        formatmenu.addAction(rightact)

        # 创建状态栏,显示行数和字数
        self.statusBar().showMessage('Lines: 1, Words: 0')
        self.textedit.textChanged.connect(self.updateStatus)

        self.setGeometry(300, 300, 800, 600)
        self.setWindowTitle('Text Editor')
        self.show()

    def newFile(self):
        # 新建文件
        self.textedit.clear()

    def openFile(self):
        # 打开文件
        filename, _ = QFileDialog.getOpenFileName(self, 'Open File', '', 'Text Files (*.txt);;All Files (*)')
        if filename:
            with open(filename, 'r') as f:
                self.textedit.setText(f.read())

    def saveFile(self):
        # 保存文件
        filename, _ = QFileDialog.getSaveFileName(self, 'Save File', '', 'Text Files (*.txt);;All Files (*)')
        if filename:
            with open(filename, 'w') as f:
                f.write(self.textedit.toPlainText())

    def setFont(self):
        # 设置字体
        font, ok = QFontDialog.getFont(self.textedit.currentFont(), self)
        if ok:
            self.textedit.setCurrentFont(font)

    def setColor(self):
        # 设置颜色
        color = QColorDialog.getColor(self.textedit.textColor(), self)
        if color.isValid():
            self.textedit.setTextColor(color)

    def setAlignment(self, alignment):
        # 设置对齐方式
        self.textedit.setAlignment(alignment)

    def updateStatus(self):
        # 更新状态栏
        cursor = self.textedit.textCursor()
        lines = self.textedit.toPlainText().count(' ') + 1
        words = len(self.textedit.toPlainText().split())
        self.statusBar().showMessage(f'Lines: {lines}, Words: {words}')


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


生成界面如下:
在这里插入图片描述

栏目分类

联系方式
  • help@yxrjt.cn
  • lgc@yxrjt.cn
  • admin@yxrjt.cn