ホームページ  >  記事  >  バックエンド開発  >  Python のヒントでは、Gui を使用しなくてもグラフィカル インターフェイスを実装できます

Python のヒントでは、Gui を使用しなくてもグラフィカル インターフェイスを実装できます

PHPz
PHPz転載
2023-04-12 16:43:071557ブラウズ

プログラマが恐れているものがあるとすれば、それはおそらく、ニーズが再び変化したことだと思います!

いいえ、作者がブラウザベースの Web アプリケーションを開発した後、顧客は次のように言いました: Program It内部 (いいえ) 内部 (ネットワーク) 環境で実行する必要があります...

これは、Python 環境をインストールできないことを意味します!

誰が私たちをプログラマーと呼びますか? GUI を開発してみませんか?いいえ、問題ありません...

しかし、時間を聞いてからはもう落ち着くことができません...

お客様の評価に影響を与えないために

コンセプト

GUI を作成するのは難しくありませんが、サービスとユーザーとの対話型インターフェイスを整理する必要があります。そうでない場合は、 GUI 用に別のインターフェイスを作成する必要がありますが、明らかに時間が足りません。

いいえ、別の方法を考えてください...

それ以外の場合は、Web アプリケーションを実行可能プログラムにパッケージ化し、それをマシンにコピーして実行します。同様のフレームワークが多数あります。 Python の Nodejs.Electron[1]、Pywebview[2]。

元の Web プログラムをラップして、実行するだけです!

アーティファクトが表示されます

Web プログラムは Flask で開発されているため、パッケージ化として Python をインストールする必要があります Pywebview道具。

仮想環境 [3] を作成するか、元の Web プロジェクト環境で次のコマンドを実行します。

pip install pywebview

Windows システムでは、.Net 4.0 以降が必要です

試してみる:

import webview

window = webview.create_window('Hello!', 'http://http://www.justdopython.com')
webview.start()
  • WebView ライブラリを参照します
  • ウィンドウを開始し、タイトルを Hello! に設定し、ページ アドレスを指定します
  • WebView を開始します

次の効果が確認できます。

Python のヒントでは、Gui を使用しなくてもグラフィカル インターフェイスを実装できます

まずは試してください。

これは素晴らしいです!

Pywebview は、シンプルな 3 つのモードをサポートしています。モード、サーバーモード、スレッドモード。

シンプルモードはストリーミングブラウザをカスタマイズしたものに相当し、上記例のようにアドレスを指定して閲覧することができます。

サーバー モードは、Web アプリケーションをパッケージ化することと同じです。つまり、ローカル サーバーを起動し、カスタマイズされたブラウザで閲覧します。

スレッド モードはより高度です。つまり、より高度なゲームプレイを実現するには、スレッドのステータスを手動で維持する必要があります。

現在のニーズに合わせて、ローカル Web アプリケーションをパッケージ化するサーバー モードを選択します。

Flask との接続

サーバー モードでは、Web アプリケーションがデプロイされている限り、HTTP サーバーが提供されます。

実際のプロジェクトのコードを示しているだけなので、ここでは簡単な Flask アプリケーションを示します。

Flask Web アプリケーションの開発については、以前に著者が書いた Flask の記事を参照してください。

#app.py ファイルを 1 つ作成します:

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() # 启动服务

このアプリケーションは非常に単純で、/ と /detail からアクセスできる 2 ページのみです。

このコードを実行すると、Flask アプリケーションが起動され、http://120.0.0.1:5000 経由でアクセスされます。

Pywebview にインストールする方法は?

非常に簡単です:

import webview
from app import app

if __name__ == '__main__':
window = webview.create_window('Pywebview', app, height=600, width=1000)
webview.start()

    webview を紹介します
  • 作成したアプリを紹介します
  • Webview ウィンドウを作成し、アプリを URL パラメーターとして渡します
  • その後、WebView を開始します
ここで重要なのは、Flask アプリケーションを URL パラメーターとして使用することです。Webview は次のことを見つけます。渡されたパラメータがフラスコアプリケーションの場合、サービスモードが開始されます。

プログラムを実行すると、ブラウザでの場合と同じ効果が確認できます:

Python のヒントでは、Gui を使用しなくてもグラフィカル インターフェイスを実装できます

Flask への接続

ディレクトリの問題

これで、このプロジェクトを exe にパッケージ化できます。

まず、pyinstaller[4]

pip install pyinstaller

をインストールする必要があります。次に、実行するプログラム ディレクトリを入力します。

pyinstall -F -w main.py

    F パラメータは、プログラムを実行可能ファイルにパッケージ化することを意味します。ファイルを追加せずにこのパラメータはフォルダにパッケージ化されます
  • #w パラメータは、パッケージ化された実行可能プログラムの実行時にコマンド ライン ウィンドウが表示されないことを示します。この機能は Windows システムでのみ使用できます
  • すぐに、プログラム ディレクトリに dist フォルダーが生成され、その中に実行可能ファイル main.exe が作成されます。これがパッケージ化された結果です。

ダブルクリックして実行すると、効果がわかります...

待って、想像したものとは違うようです!

Python のヒントでは、Gui を使用しなくてもグラフィカル インターフェイスを実装できます#Flask に接続

何が起こっているのですか?

プロンプトによると、ページのテンプレート ファイルが見つからないためです。

以前に Flask アプリを作成したとき、app.py ファイルが配置されているディレクトリのテンプレート ディレクトリであるデフォルトのテンプレート パスを使用しました。パッケージ化後に見つからないのはなぜですか?

これは、Windows では実行可能ファイルが実行されると特定のディレクトリに解凍され、テンプレート ファイルが exe ファイルにパッケージ化されていないため、実行時にテンプレート ファイルが見つからないためです。

完美呈现

如何解决这个问题呢?

作为不使用外部数据或文件的程序,只需要将程序本身打包就可以了,但大部分程序都需要外部数据,比如我们的 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/


以上がPython のヒントでは、Gui を使用しなくてもグラフィカル インターフェイスを実装できますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は51cto.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。