>  기사  >  백엔드 개발  >  Python 팁은 Gui를 사용하지 않고도 그래픽 인터페이스를 구현할 수 있습니다.

Python 팁은 Gui를 사용하지 않고도 그래픽 인터페이스를 구현할 수 있습니다.

PHPz
PHPz앞으로
2023-04-12 16:43:071623검색

프로그래머가 두려워하는 것이 있다면 그럴 수도 있을 것 같습니다. 요구 사항이 다시 변경되었습니다!

아니요, 작성자가 브라우저 기반 웹 애플리케이션을 개발한 후 고객이 다음과 같이 말했습니다. 프로그램이 포함되어야 합니다( 없음) 부서(네트워크) 환경에서 실행 중입니다...

이것은 Python 환경을 설치할 수 없다는 의미입니다!

우리를 프로그래머라고 부르는 이유는 무엇입니까? ..

근데 시간이 좀 지나면 더 이상 침착하지 못하다고 하던데...

고객 평가에 영향을 주지 않기 위해 일주일만 시간을 드려요!

GUI를 구상하는 것은 어렵지 않지만, 서비스와 사용자와의 대화형 인터페이스를 정리해야 하며, 그렇지 않으면 GUI에 대한 별도의 인터페이스를 작성해야 하는데 이는 분명히 시간이 충분하지 않습니다.

아니요, 그냥 다른 방법을 생각해 보세요...

그렇지 않으면 웹 애플리케이션을 실행 가능한 프로그램으로 직접 패키징하고 이를 컴퓨터에 복사하여 실행할 수 있습니다. Nodejs의 Electron[1]과 같은 유사한 프레임워크가 많이 있습니다. , 그리고 파이웹뷰[2].

원본 웹 프로그램을 래핑한 후 그냥 하면 됩니다!

아티팩트가 나타납니다

웹 프로그램은 Flask로 개발되므로 패키징 도구로 Python의 Pywebview를 설치해야 합니다.

가상 환경을 생성하거나 [3] 원래 웹 프로젝트 환경에서 다음을 실행합니다.

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는 세 가지 모드를 지원합니다. , 단순 모드, 서버 모드 및 스레드 모드.

간단 모드는 위의 예와 같이 주소를 지정하여 탐색할 수 있는 맞춤형 스트리밍 브라우저와 같습니다.

서버 모드는 웹 애플리케이션 패키징과 동일합니다. 즉, 로컬 서버를 시작하고 사용자 정의된 브라우저에서 찾아봅니다.

스레딩 모드가 더욱 고급화되었습니다. 즉, 더 발전된 게임 플레이를 달성하려면 스레드 상태를 수동으로 유지해야 함을 의미합니다.

현재 요구 사항에 따라 로컬 웹 애플리케이션을 래핑하는 서버 모드를 선택합니다.

Flask로 연결

서버 모드는 HTTP 서버를 제공하며 여기에 웹 애플리케이션만 배포하면 됩니다.

실제 프로젝트의 코드만 보여주기 때문에 간단한 Flask 애플리케이션은 다음과 같습니다.

Flask 웹 애플리케이션 개발에 대해서는 저자가

app.py 파일 만들기 전에 작성한 Flask 기사를 참조할 수 있습니다.

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을 통해 액세스할 수 있는 페이지가 두 개뿐입니다.

이 코드를 실행하면 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는 수신 매개변수가 Flask 애플리케이션임을 발견하면 서비스 모드를 시작합니다.

프로그램을 실행하면 브라우저에서와 동일한 효과를 볼 수 있습니다.

Python 팁은 Gui를 사용하지 않고도 그래픽 인터페이스를 구현할 수 있습니다.

Connecting to Flask

Directory Issues

이제 이 프로젝트를 exe로 패키징할 수 있습니다.

먼저 pyinstaller[4]를 설치해야 합니다.

pip install pyinstaller

그런 다음 프로그램 디렉터리에 들어가서 실행합니다.

pyinstall -F -w main.py
  • F 매개변수는 프로그램을 실행 파일로 패키징한다는 의미입니다. 이 매개변수가 없으면 폴더에 패키징됩니다
  • w 매개변수 패키지된 실행 프로그램을 실행할 때 명령줄 창이 표시되지 않음을 나타냅니다. 이 기능은 Windows 시스템에서만 사용할 수 있습니다. 곧 프로그램 디렉터리에 dist 폴더가 생성되고 main.exe가 생성됩니다. 실행 파일은 패키지된 결과입니다.
더블클릭하여 실행하면 효과를 볼 수 있습니다...

잠깐, 예상했던 것과는 다른 것 같습니다!

Flask에 연결 중Python 팁은 Gui를 사용하지 않고도 그래픽 인터페이스를 구현할 수 있습니다.

무슨 일이 일어나고 있나요?

프롬프트에 따르면, 찾고 있기 때문에 해당 페이지의 템플릿 파일을 찾을 수 없습니다.

앞서 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 51cto.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제