日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python——pyqt5的计算器(源码+打包)

發布時間:2024/3/13 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python——pyqt5的计算器(源码+打包) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

一、效果圖

二、源碼

三、如何打包

四、如何減小打包程序大小(方法1)

五、如何減小打包程序大小(方法2)

學習視頻


一、效果圖

只是單純的練手,然后再學習一下如何打包

?

二、源碼

calculator_UI.zip - 藍奏云

三、如何打包

安裝PyInstaller

pip install pyinstaller

快速打包命令:

pyinstaller -wF -i logo.ico main.py

main.py:是我要打包的python項目文件

?-i:為main.exe文件指定的圖標(如果沒有,則不需要該參數)

logo.ico :生成.exe文件的圖標(推薦一個在線轉換ico圖標的網址)

-F:生成結果是一個exe文件,所有的第三方依賴、資源和代碼均被打包進該exe內

-w :不顯示命令行窗口(如不用此參數,打包后的程序在運行時會彈出一個命令行窗口)


打包成功

?

  • 基本用法 :??pyinstaller [選項] 文件名.py

  • 常用選項

  • -F, --onefile:將應用程序打包為單個可執行文件

  • -D, --onedir:將應用程序打包為目錄

  • -c, --console:使用控制臺模式(在終端窗口中運行應用程序)

  • -w, --noconsole:使用Windows模式(沒有控制臺窗口)

  • --name:指定應用程序的名稱

  • --distpath:指定輸出目錄

  • --clean:在打包之前清除臨時文件夾日志

  • -d, --debug:生成運行時調試器

  • --log-level:設置日志級別,供調試嵌入其他文件

  • --add-data:將data文件夾嵌入到生成的可執行文件中

  • --add-binary:將binary文件與其他文件一起嵌入到可執行文件中

  • --hidden-import:打包特定的Python庫,例如--hidden-import=PIL

  • --version:顯示版本信息

  • --help:顯示幫助信息

  • 以上是_pyinstaller的常用選項和命令,可以根據需要進行選擇和使用。

    有時候,打包exe程序后的文件大小會非常大!如何減小呢?

    四、如何減小打包程序大小(方法1)

    1、安裝pipenv

    pip install pipenv

    2、新建一個文件夾

    安裝完成后,隨便找一個盤符,在這個盤符的根目錄(最好是根目錄)新建一個文件夾,作為虛擬環境,然后雙擊進入該文件夾

    3、安裝python版本(在虛擬環境下安裝所需的python版本)

    pipenv install -python 3.6
    • 系統有可能提示無法轉換為 “utf-8”,具體原因是因為中文轉碼的問題,但是不必深究。
    • 這時候最好的方法是重啟電腦
    • 重啟電腦后,不要打開任何其他程序,重復上述第2步

    4、激活虛擬環境(在命令行下)

    pipenv shell
    • 如何系統提示無法轉換為“utf-8”,則再次重啟電腦
    • 然后重新進入power shell,再嘗試運行 pipenv shell

    5、安裝需要的庫(僅需安裝需要打包的.py文件中所用到的庫)

    根據要打包的程序中需要導入的庫,在pipenv環境下重新安裝,例如:

    pipenv install pyinstaller pipenv install removebg

    6、進行打包

    把py腳本文件復制到這個新建的目錄下,重新運行 pyinstaller

    pyinstaller -wF -i logo.ico main.py

    ?五、如何減小打包程序大小(方法2)

    使用 PyInstaller 將 PyQt5 程序打包成 exe 文件,并用 UPX 壓縮生成的文件,即可生成盡可能小的 exe 文件。

    1、安裝 PyInstaller 和 UPX

    打開命令行窗口(Windows 下可以按下 Win+R 后,輸入 cmd 啟動),輸入以下命令安裝 PyInstaller 和 UPX:

    pip install pyinstaller pip install upx

    2、創建 PyInstaller 打包配置文件

    在 PyInstaller 命令行中輸入以下命令,創建一個打包配置文件 myapp.spec:

    pyinstaller -y -w myapp.py

    -y 表示自動覆蓋現有的 build 和 dist 文件夾

    -w 表示去除控制臺窗口

    此時當前目錄會出現一個 build 文件夾和一個 dist 文件夾,dist 文件夾中會生成一個不壓縮的 exe 文件。

    3、修改 PyInstaller 打包配置文件

    在當前目錄下,使用編輯器打開 myapp.spec 文件,添加以下代碼:

    import upx upx_path = "your_upx_path" # UPX 所在路徑a = Analysis(['myapp.py'],pathex=['your_path_for_py_file'], # myapp.py 所在路徑binaries=[],datas=[],hiddenimports=['sip', 'PyQt5.QtCore', 'PyQt5.QtGui', 'PyQt5.QtWidgets'],hookspath=['hooks'],runtime_tmpdir=None,excludes=[],win_no_prefer_redirects=False,win_private_assemblies=False,cipher=None,alg='AES256',key=None,upx=True, # 是否開啟壓縮upx_path=upx_path, # UPX 所在路徑console=False) pyz = PYZ(a.pure, a.zipped_data,cipher=None,alg='AES256',key=None,unbuffered=False) exe = EXE(pyz,a.scripts,a.binaries,a.zipfiles,a.datas,[],name='myapp',debug=False,bootloader_ignore_signals=False,strip=False,upx=True, # 經過測試,tostring() 或 tobytes() 方法生成的資源文件即是這里的 a.zipped_dataupx_path=upx_path, # UPX 所在路徑upx_exclude=[],runtime_tmpdir=None,console=False,icon=None)

    注意:

    upx_path 需要填寫 UPX.exe 所在的文件夾路徑

    hiddenimports 需要添加 PyQt5 相關的模塊

    4、打包 exe 文件

    在命令行中輸入以下命令,將 myapp.spec 文件轉換為 exe 文件:

    pyinstaller -y -c myapp.spec

    生成的文件在 dist 文件夾內,文件名是在 myapp.spec 文件中 name 參數指定的。

    -c 表示使用控制臺程序,如果不需要控制臺程序,可以將 -c 改為 -w。

    5、使用 UPX 壓縮 exe 文件

    在命令行中輸入以下命令,使用 UPX 壓縮 exe 文件:

    upx --best myapp.exe

    myapp.exe 是需要壓縮的文件名

    --best 表示使用最高級別的壓縮


    附代碼

    import sysfrom PyQt5 import QtCore, QtWidgets from PyQt5.QtCore import Qt from PyQt5.QtGui import QColor from PyQt5.QtWidgets import QMainWindow, QApplicationfrom calculator import Ui_calculator_MainWindowclass MyMainForm(QMainWindow, Ui_calculator_MainWindow):def __init__(self, parent=None):super().__init__(parent)self.setupUi(self)self.start_x = Noneself.start_y = Noneself.anim=Noneself.setAttribute(QtCore.Qt.WA_TranslucentBackground)self.setWindowFlags(Qt.FramelessWindowHint) # 設置窗口標志:隱藏窗口邊框# Bind button scale up and scale downself.btn_max.clicked.connect(self.btn_max_click)self.btn_min.clicked.connect(self.minimize)self.btn_stop.clicked.connect(self.closeEvent)# 輸入self.input = ''# 綁定方法self.bin_number()# 輸入顯示def add_input(self,input):self.input +=inputself.number_input.setPlainText(str(self.input))# 計算結果def calculate_res(self):try:self.number_output.display(eval(self.input))except Exception:self.number_input.setPlainText('輸入格式錯誤!')self.input = ''finally:# self.input = ''pass# clear LCD numberdef clear_input(self):self.input = ''self.number_input.setPlainText('')# back one numberdef back_number(self):self.input = self.input[:-1]self.number_input.setPlainText(self.input)# add button eventsdef bin_number(self):# number eventsself.b_one.clicked.connect(lambda: self.add_input('1'))self.b_tow.clicked.connect(lambda: self.add_input('2'))self.b_three.clicked.connect(lambda: self.add_input('3'))self.b_four.clicked.connect(lambda: self.add_input('4'))self.b_five.clicked.connect(lambda: self.add_input('5'))self.b_six.clicked.connect(lambda: self.add_input('6'))self.b_seven.clicked.connect(lambda: self.add_input('7'))self.b_eight.clicked.connect(lambda: self.add_input('8'))self.b_nine.clicked.connect(lambda: self.add_input('9'))self.b_point.clicked.connect(lambda: self.add_input('.'))self.b_add.clicked.connect(lambda: self.add_input('+'))self.b_divide.clicked.connect(lambda: self.add_input('/'))self.b_multiple.clicked.connect(lambda: self.add_input('*'))self.a_substract.clicked.connect(lambda: self.add_input('-'))# calculate resultself.b_equal.clicked.connect(lambda: self.calculate_res())# back one numberself.b_back.clicked.connect(lambda: self.back_number())# clear inputself.b_clear.clicked.connect(lambda: self.clear_input())# Window scale up and scale downdef btn_max_click(self):if self.isMaximized():self.showNormal()# self.btn_stop.setText('放大窗口')else:self.showMaximized()# self.btn_stop.setText('縮小窗口')# 重寫 closeEvent 函數,關閉窗口并停止程序運行def closeEvent(self, event):sys.exit()# 最小化窗口def minimize(self):self.showMinimized()# 鼠標左鍵釋放時被觸發def mouseReleaseEvent(self, event):self.start_x = Noneself.start_y = None# 在鼠標左鍵按下時被觸發def mousePressEvent(self, event):if event.button() == QtCore.Qt.LeftButton:super(MyMainForm, self).mousePressEvent(event)self.start_x = event.x()self.start_y = event.y()# 在鼠標移動時被觸發def mouseMoveEvent(self, event):try:super(MyMainForm, self).mouseMoveEvent(event)dis_x = event.x() - self.start_xdis_y = event.y() - self.start_yself.move(self.x() + dis_x, self.y() + dis_y)except:pass# 窗口設置陰影效果def effect_shadow_style(self, widget):effect_shadow = QtWidgets.QGraphicsDropShadowEffect(self)effect_shadow.setOffset(12, 12) # 偏移effect_shadow.setBlurRadius(128) # 陰影半徑effect_shadow.setColor(QColor(155, 230, 237, 150)) # 陰影顏色widget.setGraphicsEffect(effect_shadow)# 背景漸變# def paintEvent(self, event):# painter = QPainter(self)# gradient = QLinearGradient(0, 0, self.width(), self.height())# gradient.setColorAt(0, QColor(89, 217, 212, 128))# gradient.setColorAt(1, QColor(104, 202, 237, 128))# gradient.setStart(0, 0)# gradient.setFinalStop(self.width(), self.height())# painter.setBrush(gradient)# painter.drawRect(self.rect())if __name__ == "__main__":app = QApplication(sys.argv)myWin = MyMainForm()myWin.show()# myWin.btn_img.clicked.connect(click())sys.exit(app.exec_())

    學習視頻

    【已完結】PySide6百煉成真,帶你系統性入門Qt_嗶哩嗶哩_bilibili【已完結】PySide6百煉成真,帶你系統性入門Qt共計75條視頻,包括:000 新的課程介紹、002環境搭建、003基礎框架等,UP主更多精彩視頻,請關注UP賬號。https://www.bilibili.com/video/BV1c84y1N7iL計算器這個案例就是跟著這個視頻里做的!打call!很贊的教程!

    總結

    以上是生活随笔為你收集整理的Python——pyqt5的计算器(源码+打包)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。