【无标题】

PyQt6 圆计算器完整程序

完整可直接运行代码

python 复制代码
# 导入系统模块,用来接收程序启动参数、退出程序
import sys
# 从PyQt6工具包导入需要使用的控件
from PySide6.QtWidgets import (QApplication, QDialog, QLabel,
                             QLineEdit, QPushButton, QMessageBox)

# 定义窗口类:圆计算器窗口,继承QDialog对话框
class CircleCal(QDialog):
    # --------初始化函数:创建窗口的时候,会自动执行这个函数--------
    def __init__(self):
        # 调用父类QDialog的初始化,固定写法,不能省略
        super().__init__()
        # 调用自己写的界面搭建函数,把所有界面控件创建出来
        self.create_ui()

    # --------搭建界面的函数:所有按钮、输入框、文字标签在这里创建--------
    def create_ui(self):
        # ==========1.创建【半径】文字标签 QLabel只用来显示文字,不能输入==========
        # QLabel("显示文字",父窗口),setGeometry(横坐标,纵坐标,宽度,高度)
        # 横坐标:距离窗口左边多少像素;纵坐标:距离窗口上边多少像素
        QLabel("半径=", self).setGeometry(80, 40, 71, 21)

        # ==========2.半径输入框,用来让用户输入数字==========
        # self. 代表这个变量是窗口的成员变量,其他函数也可以读取这个输入框内容
        self.input_radius = QLineEdit(self)
        self.input_radius.setGeometry(140, 40, 113, 21)
        # 信号绑定:在输入框按下回车键,就执行计算函数calculate_circle
        self.input_radius.returnPressed.connect(self.calculate_circle)

        # ==========3.周长标签 + 周长结果显示框(禁止用户修改)==========
        QLabel("周长=", self).setGeometry(80, 80, 71, 21)
        self.output_length = QLineEdit(self)
        self.output_length.setGeometry(140, 80, 113, 21)
        self.output_length.setEnabled(False)  # False=禁用,用户不能编辑,仅用来展示结果

        # ==========4.面积标签 + 面积结果显示框(禁止用户修改)==========
        QLabel("面积=", self).setGeometry(80, 120, 71, 21)
        self.output_area = QLineEdit(self)
        self.output_area.setGeometry(140, 120, 113, 21)
        self.output_area.setEnabled(False)

        # ==========5.计算按钮==========
        self.button_calc = QPushButton("计算", self)
        self.button_calc.setGeometry(140, 160, 93, 28)
        # 信号绑定:鼠标点击按钮,执行calculate_circle计算函数
        self.button_calc.clicked.connect(self.calculate_circle)

        # ==========设置窗口整体大小、位置、标题==========
        self.resize(350, 200)       # 窗口大小:宽350像素,高200像素
        self.move(300, 300)         # 窗口出现在屏幕坐标:x=300,y=300的位置
        self.setWindowTitle("计算圆面积")  # 窗口左上角标题文字

    # --------计算逻辑函数:按回车 / 点计算按钮都会运行这里--------
    def calculate_circle(self):
        """
        功能:读取半径,计算圆周长、圆面积
        公式:周长 = 2 * π * r;面积 = π * r²,π取3.14159
        """
        try:
            # 1、读取输入框文字,strip()删掉文字前后多余空格
            input_text = self.input_radius.text().strip()
            # 把读取到的字符串文字,转换成小数,支持整数和小数输入,例如12、2.5
            radius = float(input_text)

            # 判断:半径不能小于0
            if radius >= 0:
                pi = 3.14159
                perimeter = 2 * pi * radius          # 周长计算
                area = pi * radius * radius          # 面积计算
                # f字符串格式化:.2f代表保留2位小数,放到输出框显示
                self.output_length.setText(f"{perimeter:.2f}")
                self.output_area.setText(f"{area:.2f}")

            else:
                # 如果输入负数,弹出警告弹窗
                QMessageBox.warning(self, "警告提示", "半径不能是负数!")
                self.output_length.clear()   # 清空周长输出框
                self.output_area.clear()     # 清空面积输出框

        # 如果输入的不是数字(字母、符号、空内容),会触发这个错误,弹窗提示,程序不会崩溃
        except ValueError:
            QMessageBox.warning(self, "输入错误", "请输入有效的数字!")
            self.output_length.clear()
            self.output_area.clear()


# =========程序入口,程序从这里开始运行,固定模板========
if __name__ == "__main__":
    # 创建整个QT应用程序对象,一个程序只能有1个
    app = QApplication(sys.argv)
    # 创建我们自己写的计算器窗口实例,自动执行__init__、create_ui
    window = CircleCal()
    window.show()          # 将窗口显示在屏幕上
    sys.exit(app.exec())   # 启动界面循环,等待用户点击、输入;关闭窗口之后程序退出

程序完整设计流程(零基础理解)

流程1:明确要实现什么功能

  1. 界面上有文字提示:半径、周长、面积
  2. 用户输入半径数字,可以点击计算按钮 或者敲回车键
  3. 自动算出圆周长、圆面积,展示在界面
  4. 周长、面积框只能看,不能手动修改
  5. 容错:输入字母、负数、空内容,弹出提示,程序不会闪退

流程2:程序结构拆解

模块 作用
导入包 拿来别人写好的工具,实现窗口、按钮、弹窗功能
自定义窗口类CircleCal 整个对话框窗口,把界面和计算逻辑封装在一起
__init__()初始化 创建窗口对象时自动调用,启动界面搭建
create_ui() 全部可视化控件(标签、输入框、按钮),布局摆放、绑定事件
calculate_circle() 业务逻辑:读取输入、做数学运算、异常判断、输出结果
程序入口if __name__ == "__main__" 启动QT,创建窗口,显示窗口,开启界面等待循环

流程3:运行执行顺序(程序一步一步怎么走)

  1. 运行脚本,走到最底部if __name__ == "__main__":,程序正式启动
  2. app = QApplication(sys.argv) 创建QT应用
  3. window = CircleCal() 创建窗口实例
    • 自动调用__init__()
    • super().__init__()初始化父窗口
    • 调用self.create_ui():生成所有标签、输入框、按钮,摆放位置,绑定事件
  4. window.show():把窗口绘制显示到屏幕
  5. app.exec()程序卡住在这里等待操作 ,监听鼠标点击、键盘输入
    • 用户点【计算按钮】→触发calculate_circle()
    • 用户输入数字敲回车 →触发calculate_circle()
  6. calculate_circle()内部:读取输入 →判断是否合法 →数学计算 →结果写回界面;出错弹出提示框
  7. 用户点击窗口右上角关闭按钮,退出事件循环,执行sys.exit(),程序结束

流程4:关键概念通俗解释

  1. 控件 :窗口上面看得见的零件,QLabel文字、QLineEdit输入框、QPushButton按钮
  2. 信号与槽 :PyQt事件机制
    • 信号:发生一个动作,例如:按钮clicked被点击、输入框returnPressed按下回车
    • connect(函数名):动作发生,就去执行指定函数
  3. try ... except异常捕获:防止用户乱输入导致程序直接崩溃,捕获错误弹出提示
  4. self.xxx:加上self,变量可以在这个类里面所有函数互相访问;不加self函数执行完变量就消失

测试示例

输入:12

输出周长:75.40,输出面积:452.39

输入负数‑5 →弹窗提示半径不能负数;输入abc字母 →弹窗提示输入有效数字。

相关推荐
微小冷3 天前
pyqt+matplotlib多进程图像刷新
pyqt·matplotlib·进程通信·多进程·queue·process
千里码aicood3 天前
PyQt基于卷积神经网络的智慧校园的设计与实现
人工智能·cnn·pyqt
千里码aicood3 天前
基于PyQt心理咨询机器人智能系统的设计与实现
机器人·pyqt
典典分享指南3 天前
Windows 自动化踩坑实录
python·intellij-idea·pyqt·emacs·visual studio
深蓝海拓6 天前
基于QtPy (PySide6) 的PLC-HMI工程实战记录(五)为当前动作画面的信号连接变量
网络·笔记·python·学习·pyqt
智购科技自动售卖机厂家9 天前
2026自动售货机OTA升级系统设计:从全量升级到差分升级的带宽优化工程实践~YH
大数据·人工智能·numpy·pyqt·fastapi
【赫兹威客】浩哥9 天前
【无标题】
python·spring·django·pyqt
小灰灰搞电子11 天前
PyQt QTextBoundaryFinder类详解:精准定位文本边界
pyqt
小灰灰搞电子12 天前
PyQt 实现自己的桌面萌宠源码分享
pyqt