Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Petua Python masih boleh melaksanakan antara muka grafik tanpa menggunakan Gui

Petua Python masih boleh melaksanakan antara muka grafik tanpa menggunakan Gui

PHPz
PHPzke hadapan
2023-04-12 16:43:071600semak imbas

Jika ada apa-apa yang ditakuti oleh pengaturcara, maka saya fikir ia mungkin - keperluan telah berubah lagi

Tidak, pelanggan berkata selepas pengarang membangunkan aplikasi Web berasaskan pelayar: Program Ia perlu dijalankan dalam persekitaran dalaman (tiada) dalaman (rangkaian)...

Ini bermakna persekitaran Python tidak boleh dipasang!

Siapa yang memanggil kami pengaturcara? kami membangunkan versi GUI? Nah, itu bukan masalah untuk saya...

Tetapi selepas mendengar masa yang diberikan, saya tidak dapat bertenang...

Supaya tidak menjejaskan penilaian pelanggan, kami hanya boleh memberikan satu minggu!

Mengandung

Walaupun tidak sukar untuk mencipta GUI, ia memerlukan menyusun perkhidmatan dan antara muka interaktif dengan pengguna Jika tidak , anda perlu menulis antara muka yang berasingan untuk GUI, yang jelas tidak cukup masa.

Tidak, cuma fikirkan cara lain...

Jika tidak, bungkus sahaja aplikasi web ke dalam program boleh laku dan salin ke mesin untuk dijalankan. Terdapat banyak rangka kerja yang serupa, seperti Nodejs. Electron[1], Pywebview[2] dalam Python.

Hanya bungkus program Web asal, kemudian lakukan sahaja!

Alat ajaib muncul

Atur cara Web dibangunkan dengan Flask, jadi anda perlu memasang Python Pywebview sebagai alat pembungkusan.

Buat persekitaran maya [3] atau dalam persekitaran projek Web asal, laksanakan:

pip install pywebview

Dalam sistem Windows, .Net 4.0 atau lebih tinggi diperlukan

Small Pisau percubaan:

import webview

window = webview.create_window('Hello!', 'http://http://www.justdopython.com')
webview.start()
  • Rujuk perpustakaan webview
  • Mulakan tetingkap, tetapkan tajuk kepada Hello!, nyatakan alamat halaman
  • Mulakan paparan web

Anda boleh melihat kesan berikut:

Petua Python masih boleh melaksanakan antara muka grafik tanpa menggunakan Gui

Cuba sedikit

Memang menakjubkan!

Pywebview menyokong tiga mod, mod mudah, mod pelayan dan mod berulir.

Mod ringkas adalah bersamaan dengan penyemak imbas penstriman tersuai Anda boleh menyemak imbas dengan menyatakan alamat, seperti dalam contoh di atas.

Mod pelayan adalah bersamaan dengan membungkus aplikasi Web, yang bermaksud ia akan memulakan pelayan setempat dan menyemak imbas dalam penyemak imbas tersuai.

Mod benang lebih maju, yang bermaksud anda perlu mengekalkan status urutan secara manual untuk mencapai permainan yang lebih maju.

Untuk keperluan semasa, kami memilih mod pelayan, iaitu membungkus aplikasi Web tempatan.

Menyambung dengan Flask

Mod pelayan akan memberikan kami Pelayan HTTP, selagi aplikasi web digunakan padanya.

Oleh kerana ia hanya menunjukkan kod projek sebenar, berikut adalah aplikasi Flask mudah:

Berkenaan pembangunan aplikasi Web Flask, anda boleh merujuk artikel Flask yang ditulis oleh pengarang sebelum

Buat fail app.py:

from flask import Flask, render_template, jsonify, request

app = Flask(__name__) # 创建一个应用

@app.route('/') 
def index():# 定义根目录处理器
return render_template('index.html')

@app.route('/detail')
def detail():
return render_template('detail.html') 

if __name__ == '__main__':
app.run() # 启动服务

Aplikasi ini sangat mudah, dengan hanya dua halaman, diakses melalui / dan /detail.

Jika anda menjalankan kod ini, aplikasi Flask akan dilancarkan dan diakses melalui http://120.0.0.1:5000.

Bagaimana untuk memasangnya dalam Pywebview?

Ia sangat mudah:

import webview
from app import app

if __name__ == '__main__':
window = webview.create_window('Pywebview', app, height=600, width=1000)
webview.start()
  • Perkenalkan webview
  • Perkenalkan apl yang baru anda buat
  • Buat tetingkap webview dan lulus apl sebagai parameter url
  • dan kemudian mulakan webview

Kunci di sini ialah menggunakan aplikasi Flask sebagai parameter url , Webview Jika didapati bahawa parameter yang diluluskan adalah aplikasi kelalang, mod perkhidmatan akan dimulakan.

Selepas menjalankan program, anda boleh melihat kesan yang sama seperti dalam penyemak imbas:

Petua Python masih boleh melaksanakan antara muka grafik tanpa menggunakan Gui

Menyambung ke Flask

Isu direktori

Kini anda boleh membungkus projek ini menjadi exe.

Mula-mula anda perlu memasang pyinstaller[4]

pip install pyinstaller

dan kemudian masukkan direktori program untuk melaksanakan:

pyinstall -F -w main.py
  • Parameter F bermaksud pembungkusan program ke dalam Fail boleh laku, jika anda tidak menambah parameter ini, ia akan dibungkus ke dalam folder
  • parameter w bermakna apabila melaksanakan program boleh laku berpakej, tetingkap baris arahan tidak akan dipaparkan Ini ciri hanya tersedia dalam sistem Windows

Tidak lama lagi, folder dist akan dijana dalam direktori program, dan akan terdapat fail boleh laku main.exe di dalamnya. Ini adalah hasil pakej.

Klik dua kali untuk menjalankan dan anda boleh melihat kesannya...

Tunggu, nampaknya ia tidak seperti yang anda bayangkan!

Petua Python masih boleh melaksanakan antara muka grafik tanpa menggunakan Gui

Sambung ke Flask

Apa yang sedang berlaku?

Menurut gesaan, ia adalah kerana fail templat halaman tidak ditemui.

Apabila kami mencipta apl Flask lebih awal, kami menggunakan laluan templat lalai, iaitu direktori templat direktori tempat fail app.py terletak Mengapa ia tidak ditemui selepas pembungkusan?

Ini kerana dalam Windows, apabila fail boleh laku dijalankan, ia akan dinyahmampat ke direktori tertentu dan fail templat kami tidak dibungkus ke dalam fail exe, jadi fail templat tidak boleh ditemui semasa masa jalan.

完美呈现

如何解决这个问题呢?

作为不使用外部数据或文件的程序,只需要将程序本身打包就可以了,但大部分程序都需要外部数据,比如我们的 Flask 应用,就需要用到静态文件等。

那么如何将它们打包进可执行文件呢?

只需要在打包时多加一个参数就可以了:

pyinstaller main.py -F -w --add-data "./templates/*;templates"

-- add-data 参数表示添加额外的数据 -- ./templates/* 表示需要添加当前目录的 templates 目录中的所有文件 -- ;为分隔符,其后的 templates 表示解压是这些数据所在的目录,这个目录名必须和 创建 app 时 template_folder 参数一致 -- 如果需要用到静态文件,需要额外添加,比如 --add-data "./static/*;static"

这样就能将外部数据一起打包进来了。

打包好后,双击执行,就会发现网页得以完美呈现了。

注意:

如果使用了虚拟环境,必须在虚拟环境中单独安装 pyinstaller,而不能用其他环境中已经安装好的,这是为了包装打包是可以链接所以程序引用的模块

因为 pyinstaller 打包时,找不到被引用的模块时并不报错,而打包好的程序可能会无法执行。

总结

经过一番折腾,终于在客户要求的时间之前将工作完成了,特别高兴。

回头一想,多亏用了 Python 作为主要的开发语言,因为 Python 强悍的社区支持没有找不到的解决方法。

这次经历的另一个启示就是,遇到问题,不要着急就做,可以先想一想,是否有更好的方法,特别在使用 Python 的时候。

比心!

参考代码

​https://www.php.cn/link/0c52d419a421fb13bb58357e67b7fb4b​

[1]Electron: https://www.electronjs.org/

[2]Pywebview: https://pywebview.flowrl.com/

[3]虚拟环境: https://mp.weixin.qq.com/s/WflK5pOKhvPg8zrf_W5mfw

[4]pyinstaller: https://pyinstaller.readthedocs.io/en/stable/


Atas ialah kandungan terperinci Petua Python masih boleh melaksanakan antara muka grafik tanpa menggunakan Gui. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:51cto.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam