最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python使用PyQt開發(fā)一個桌面計算器的實戰(zhàn)指南

 更新時間:2025年11月05日 09:49:10   作者:Java私教  
在桌面應用開發(fā)中,計算器 是一個非常適合入門的練手項目, 它涉及到圖形界面設計、事件綁定、信號槽機制、布局管理等核心概念,今天我們將使用 PyQt5一步步實現(xiàn)一個可用的計算器程序,需要的朋友可以參考下

一、前言

在桌面應用開發(fā)中,計算器 是一個非常適合入門的練手項目。 它涉及到圖形界面設計、事件綁定、信號槽機制、布局管理等核心概念。

今天我們將使用 PyQt5(同樣適用于 PyQt6)一步步實現(xiàn)一個可用的計算器程序,從 UI 布局到功能邏輯完整講解。

最終效果如下:

  • 支持加減乘除和小數(shù)運算;
  • 按鈕布局整齊;
  • 可通過按鈕或鍵盤輸入操作;
  • 界面美觀,可打包為獨立應用。

二、項目環(huán)境

項目依賴說明
Python 3.8+推薦使用 3.9 或以上版本
PyQt5圖形界面開發(fā)框架
Qt Designer(可選)可視化 UI 設計工具

安裝命令:

pip install PyQt5

三、項目結(jié)構(gòu)

我們將項目組織如下:

pyqt_calculator/
│
├── main.py              # 主程序入口
├── calculator.ui        # Qt Designer 設計文件(可選)
└── ui_calculator.py     # UI 轉(zhuǎn)換后的 Python 文件

四、第一步:構(gòu)建界面

我們先手動創(chuàng)建一個簡單的界面,不依賴 Qt Designer。

# main.py
from PyQt5.QtWidgets import QApplication, QWidget, QGridLayout, QPushButton, QLineEdit, QVBoxLayout
from PyQt5.QtCore import Qt
import sys


class Calculator(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("PyQt 計算器")
        self.setFixedSize(300, 400)
        self.init_ui()

    def init_ui(self):
        # 顯示區(qū)域
        self.display = QLineEdit()
        self.display.setAlignment(Qt.AlignRight)
        self.display.setReadOnly(True)
        self.display.setStyleSheet("font-size: 24px; padding: 10px;")

        # 按鈕布局
        buttons = {
            '7': (0, 0), '8': (0, 1), '9': (0, 2), '/': (0, 3),
            '4': (1, 0), '5': (1, 1), '6': (1, 2), '*': (1, 3),
            '1': (2, 0), '2': (2, 1), '3': (2, 2), '-': (2, 3),
            '0': (3, 0), '.': (3, 1), 'C': (3, 2), '+': (3, 3),
            '=': (4, 0, 1, 4)
        }

        grid = QGridLayout()
        for text, pos in buttons.items():
            button = QPushButton(text)
            button.setStyleSheet("font-size: 20px; height: 50px;")
            if len(pos) == 2:
                grid.addWidget(button, pos[0], pos[1])
            else:
                grid.addWidget(button, pos[0], pos[1], pos[2], pos[3])
            button.clicked.connect(self.on_button_clicked)

        layout = QVBoxLayout()
        layout.addWidget(self.display)
        layout.addLayout(grid)
        self.setLayout(layout)

    def on_button_clicked(self):
        sender = self.sender().text()
        current = self.display.text()

        if sender == "C":
            self.display.clear()
        elif sender == "=":
            try:
                result = str(eval(current))
                self.display.setText(result)
            except Exception:
                self.display.setText("Error")
        else:
            self.display.setText(current + sender)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = Calculator()
    window.show()
    sys.exit(app.exec_())

運行后即可看到一個基礎(chǔ)的計算器界面。

五、第二步:添加鍵盤輸入支持

許多用戶習慣直接使用鍵盤輸入,我們可以重寫 keyPressEvent 方法:

def keyPressEvent(self, event):
    key = event.key()
    if key == Qt.Key_Return or key == Qt.Key_Enter:
        self.on_button_clicked()  # 模擬 "="
    elif key == Qt.Key_Backspace:
        self.display.setText(self.display.text()[:-1])
    else:
        text = event.text()
        if text.isdigit() or text in ['+', '-', '*', '/', '.']:
            self.display.setText(self.display.text() + text)

這樣計算器即可同時響應鍵盤輸入。

六、第三步:改進計算邏輯

直接使用 eval() 雖然簡單,但存在安全風險。 我們可以使用 Python 內(nèi)置的 ast 模塊安全地解析表達式。

import ast
import operator as op

operators = {
    ast.Add: op.add,
    ast.Sub: op.sub,
    ast.Mult: op.mul,
    ast.Div: op.truediv
}

def safe_eval(expr):
    node = ast.parse(expr, mode='eval').body
    def _eval(node):
        if isinstance(node, ast.Num):
            return node.n
        elif isinstance(node, ast.BinOp):
            return operators[type(node.op)](_eval(node.left), _eval(node.right))
        else:
            raise TypeError(node)
    return _eval(node)

替換掉 eval(current) 部分即可更安全地計算。

七、第四步:美化界面

使用 Qt Style Sheet (QSS) 進行樣式美化:

self.setStyleSheet("""
    QWidget {
        background-color: #2E3440;
    }
    QLineEdit {
        background: #3B4252;
        color: #ECEFF4;
        border: none;
        border-radius: 5px;
    }
    QPushButton {
        background-color: #4C566A;
        color: #ECEFF4;
        border-radius: 8px;
    }
    QPushButton:hover {
        background-color: #5E81AC;
    }
    QPushButton:pressed {
        background-color: #81A1C1;
    }
""")

界面將呈現(xiàn)出類似現(xiàn)代深色主題的視覺效果。

八、第五步:項目打包

當應用開發(fā)完成后,我們可以使用 pyinstaller 打包為可執(zhí)行文件:

pip install pyinstaller
pyinstaller -F -w main.py
  • -F:打包為單文件
  • -w:去掉控制臺窗口(適合 GUI 應用)

生成的可執(zhí)行文件在 dist/ 目錄中。

九、擴展思路

這個項目的核心結(jié)構(gòu)可以進一步擴展:

  • ? 添加括號與優(yōu)先級運算
  • ? 顯示歷史計算記錄
  • ? 支持科學計算(sin、cos、sqrt 等)
  • ? 國際化(i18n)
  • ? 保存用戶偏好與主題

通過這些改進,你可以將這個小項目打磨成一個完整的專業(yè)級桌面工具。

十、總結(jié)

通過本篇實戰(zhàn),我們掌握了以下關(guān)鍵技能:

  • 使用 PyQt5 搭建窗口與控件布局;
  • 理解 信號與槽 的事件機制;
  • 構(gòu)建計算邏輯與安全求值;
  • 使用 QSS 美化界面;
  • 打包發(fā)布桌面應用。

PyQt 的強大不僅在于能做出“好看的界面”,更在于它與 Python 的生態(tài)融合: 你可以輕松把它擴展成數(shù)據(jù)可視化工具、AI 模型控制臺、圖像處理前端等等。

下一步,不妨試著給這個計算器加上圖表或語音輸入功能,體驗 PyQt 真正的擴展性。

以上就是Python使用PyQt開發(fā)一個桌面計算器的實戰(zhàn)指南的詳細內(nèi)容,更多關(guān)于Python PyQt桌面計算器的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python中import reload __import__的區(qū)別詳解

    python中import reload __import__的區(qū)別詳解

    這篇文章主要介紹了python中import reload __import__的區(qū)別詳解,需要的朋友可以參考下
    2017-10-10
  • python設置表格邊框的具體方法

    python設置表格邊框的具體方法

    在本篇文章里小編給大家整理的是關(guān)于python設置表格邊框的具體方法及相關(guān)代碼,需要的朋友們可以學習參考下。
    2020-07-07
  • Python中函數(shù)參數(shù)調(diào)用方式分析

    Python中函數(shù)參數(shù)調(diào)用方式分析

    這篇文章主要介紹了Python中函數(shù)參數(shù)調(diào)用方式,結(jié)合實例形式分析了Python函數(shù)參數(shù)定義與使用的四種常見操作方法,需要的朋友可以參考下
    2018-08-08
  • python輸出彩色日志的實現(xiàn)

    python輸出彩色日志的實現(xiàn)

    文章介紹了如何使用colorlog庫為Python應用程序的日志添加顏色,從而提高日志的可讀性、效率和用戶體驗,文章還詳細說明了如何安裝必要的依賴包,并提供了一個YAML格式的日志配置示例
    2026-01-01
  • Python利用Tiler制作專屬卡通頭像和LOGO

    Python利用Tiler制作專屬卡通頭像和LOGO

    Tiler是一種使用各種其他較小圖像平鋪創(chuàng)建新圖像的工具,它與其他馬賽克工具不同,因為它可以適應多種形狀、大小、方向的貼圖,稱為buil in build。本文就來利用Tiler制作專屬卡通頭像和LOGO,需要的可以參考一下
    2022-12-12
  • ffmpeg+Python實現(xiàn)B站MP4格式音頻與視頻的合并示例代碼

    ffmpeg+Python實現(xiàn)B站MP4格式音頻與視頻的合并示例代碼

    這篇文章主要介紹了ffmpeg+Python實現(xiàn)B站MP4格式音頻與視頻的合并,本文通過實例圖文相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • Python執(zhí)行流程控制詳情

    Python執(zhí)行流程控制詳情

    這篇文章主要介紹了Python執(zhí)行流程控制,流程控制即控制流程,具體指控制程序的執(zhí)行流程,而程序的執(zhí)行流程分為三種結(jié)構(gòu):順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu),下文詳細介紹需要的小伙伴可以參考一下
    2022-04-04
  • 基于Python的XML格式的文件示例代碼詳解

    基于Python的XML格式的文件示例代碼詳解

    這篇文章主要介紹了基于Python的XML格式的文件示例代碼詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • Python使用pyglet庫完整實現(xiàn)漢諾塔游戲流程詳解

    Python使用pyglet庫完整實現(xiàn)漢諾塔游戲流程詳解

    這篇文章主要介紹了Python使用pyglet庫完整實現(xiàn)漢諾塔游戲流程,漢諾塔問題是一個遞歸問題,也可以使用非遞歸法來解決,這個問題不僅是一個數(shù)學和邏輯問題,也是一個很好的教學工具,可以用來教授遞歸、算法和邏輯思考等概念,需要的朋友可以參考下
    2007-02-02
  • 基于Python對xsl&xslx文件進行操作

    基于Python對xsl&xslx文件進行操作

    這篇文章主要為大家詳細介紹了如何使用Python對xsl&xslx文件進行一些基本操作,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-12-12

最新評論

福海县| 华阴市| 达拉特旗| 枣阳市| 汉阴县| 花垣县| 西林县| 镶黄旗| 崇礼县| 木里| 敦煌市| 滕州市| 富锦市| 龙江县| 溆浦县| 两当县| 武义县| 张掖市| 漳浦县| 张家界市| 兴城市| 全南县| 会泽县| 任丘市| 五河县| 应城市| 东安县| 凯里市| 兴海县| 仙桃市| 青海省| 浏阳市| 蚌埠市| 高雄市| 富顺县| 鄢陵县| 根河市| 昂仁县| 夏河县| 延津县| 阿拉尔市|