当前位置: 首页 > 工具软件 > pywebview > 使用案例 >

pywebview全屏模式下实现程序退出

太叔凌龙
2023-12-01

用pywebview以全屏模式启动程序后是没有窗口边框的, 当然也就没有关闭按钮了, 可以在前端的页面中画个按钮, 通过js调用自定义的api方法, 参考stackoverflow上的问题:

https://stackoverflow.com/questions/65279193/how-to-close-pywebview-window-from-javascript-using-pywebview-api

直接上代码吧, 看注释

import sqlite3
import webview
from flask import Flask, render_template

app = Flask(__name__)

conn = sqlite3.connect('data.db', check_same_thread=False)
c = conn.cursor()


@app.route('/')
def index():
    # 随机抽题
    data = []
    cursor = c.execute('select * from tiku order by random() limit 2')
    # cursor = c.execute('select * from tiku where id = 62 or id = 67')
    for row in cursor:
        data.append({
            'id': row[0],
            'title': row[1],
            'answer': row[2]
        })
    return render_template('index.html', data=data)


# 定义要传给前端js调用的api类定义, 这里定义了内部属性_window和set_window()方法来传递要操作的webview中的window对象
class Api:
    def __init__(self):
        self._window = None

    def set_window(self, window):
        self._window = window

    def quit(self):
        self._window.destroy()


def start_app():
    api = Api()
    window = webview.create_window(
        title='抽题程序',
        url=app,
        confirm_close=True,
        fullscreen=True,
        js_api=api,
    )
    api.set_window(window)

    cn = {
        'global.quitConfirmation': u'确定关闭?'
    }

    webview.start(localization=cn, debug=True, gui='cef')


if __name__ == '__main__':
    # app.run(port=8000, debug=True)
    start_app()

前端调用

// 调用pywebview的api
$("#exit").click(function () {
      pywebview.api.quit();
})
 类似资料: