0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PythonでGUIアプリ作るなら? (原始的Edit)【QAC25 Day6】

Last updated at Posted at 2025-12-05

Day6 PythonでGUIアプリ作るなら? (原始的Edit)

続きものではないので,前回の話は別にみなくていいです.

原始的なGUIアプリ開発をしましょう

「フレームワークは甘えなんよ」(某お舟スクール校長風)

もっと原始的な感じでGUIアプリを開発していきます.

まずはWebサーバーを立てます.

ん? Webサーバー?

まずは今回考えるGUIアプリの構想を共有しましょう.

こういうイメージです.

サーバーはGUIのデザインをHTMLとして送って,ブラウザはそれを描画することでGUIになる.

ブラウザはコマンドをサーバーに送ることで,サーバーはそれを処理してアプリとなる.

…ほらほら,GUIアプリでしょ?

なぜコマンド式になるかというと,ブラウザでは一部の機能が利用できないからです.
ブラウザからはストレージの操作を勝手にできませんし,HTTPリクエストとかも制限があります.そのため,何でもできるサーバーを立ててあげるのです.

まずはWebサーバーを立てる

from aiohttp.web import Application, json_response, Request, run_app

class Cog:
    __registed = []

    def __init__(self, app: Application) -> None:
        for command in dir(self):
            if command.startswith("_") or command.endswith("__"):
                continue
            app.router.add_post( f"/api/{command}", getattr(self, command))
            self.__registed.append(command)

def Command(func):
    async def wrapper(cls: Cog, request: Request, *args, **kwargs):
        req = {}
        if request.json is not None:
            req = request.json
        try:
            return json_response({"result": True, "value": await func(cls, **req)})
        except Exception as e:
            return json_response({"result": False, "error": str(e)})
    return wrapper

class Commands(Cog):
    @Command
    async def test(self, req: Request):
        db = nanka_db()
        data = db.nanka_data()
        return data

if __name__ == "__main__":
    app = Application()
    Commands(app)
    run_app(app)

(ごめんなさい昔のコードを引っ張て来てかつデバッグも何もしてないので動くかは知りません)

イメージとしてはこんな感じです.

これに適当なHTMLを書いてstatic routeしたものをブラウザで開けばGUIアプリっぽくなりますよね?

もっとGUIアプリ味を…!

そこでPyWebViewというものを使います!

WebViewというものを表示できるライブラリなのですが,さっきWebサーバーを立てたので,そのWebサーバーのURLをWebViewで開けば…GUIアプリになりそうじゃないですか?

一応サンプルコードはDocsからして以下の通りです.

import webview
webview.create_window('Hello world', 'https://pywebview.flowrl.com/')
webview.start()

このPyWebViewとPythonサーバーを使うことでGUIアプリを作れるではありませんか!

…という記事が昔ありました(今更)

完全に忘れてましたがまったくもって過去の私とネタが被ってました.

のであとは過去の私に任せます.

それではあなたも

PythonでGUIアプリを量産するときはPyWebViewというものを使ってみてはいかがですか.

デザインをHTMLで書けるから意外といいかもよ?

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?