Как закрыть окно pywebview из javascript с помощью pywebview api

Я создавал приложение в pywebview с html и flask, я решил использовать полноэкранный режим и сделать собственные красивые кнопки для сворачивания и выхода, т.е. (window.open('','_self').close();) . Обычный код javascript, который мы используем для выхода или сворачивания окна в firefox, не работал после некоторых исследований. Я получил это https://pywebview.flowrl.com/examples/js_api.html , но я не знаю, как используйте этот API для выхода из приложения, если кто-то может его написать и объяснить, потому что я не понял, если бы кто-то опубликовал код

вот мой код приложения

from flask import Flask
from flask import render_template, jsonify, request
import webview
import sys
import threading
import http.server
import socketserver
from os import system
system("title Fire - By mzw")
state=1
app=Flask(__name__)
app.config["CACHE_TYPE"] = "null"
@app.route('/')
def home():
    return render_template('start.html', name = "Fire")
def start_server():
    cli = sys.modules['flask.cli']
    cli.show_server_banner = lambda *x: None
    app.run(host='0.0.0.0',port=5000)
def start_scanner():
    PORT = 5050
    Handler = http.server.SimpleHTTPRequestHandler
    with socketserver.TCPServer(("", PORT), Handler) as httpd:
        httpd.serve_forever()
if __name__=='__main__':
    t=threading.Thread(target=start_server)
    t.daemon=True
    t.start()
    b=threading.Thread(target=start_scanner)
    b.daemon=True
    b.start()
    webview.create_window("Fire","http://localhost:5000/",fullscreen=True)
    webview.start()
    sys.exit()

вот мой html код

<body>
    <nav class = "navbar navbar-expand-lg navbar-light bg-amber">
        <a class = "navbar-brand" href = "#">{{name}}</a>
        <button class = "navbar-toggler bg-amber" type = "button" data-toggle = "collapse" data-target = "#navbarNavAltMarkup" aria-controls = "navbarNavAltMarkup" aria-expanded = "false" aria-label = "Toggle navigation">
        <span class = "navbar-toggler-icon bg-amber"></span>
        </button>
        <div class = "collapse navbar-collapse bg-amber" id = "navbarNavAltMarkup">
            <div class = "navbar-nav bg-amber">
                <a class = "nav-item nav-link active" href = "#">Home</a>
                <a class = "nav-item nav-link" href = "#">Features</a>
                <a class = "nav-item nav-link" href = "#">Pricing</a>
                <a class = "nav-item nav-link disabled" href = "#">Disabled</a>
            </div>
        </div>
        <div class = "float-right bg-amber">
            <a href = "#"><img style = "width: 30px;height: 30px;" src = "{{ url_for('static', filename='green.png') }}"></a>
            <a href = "#" id = "minimize"><img style = "width: 30px;height: 30px;" src = "{{ url_for('static', filename='blue.png') }}"></a>
            <a href = "#"><img style = "width: 30px;height: 30px;" src = "{{ url_for('static', filename='red.png') }}"></a>
        </div>
        <script type = "text/javascript">
            $("#minimize").click(function(){
                 window.open('','_self').close();
            });
        </script>
    </nav>
</body>
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
2 038
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам просто нужно добавить класс с именем Api в свой код Python, как это объясняется в статье, на которую вы ссылаетесь. В вашем случае этот класс должен включать только конструктор и такой метод:

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

(и любые другие методы, которые вам нужно выполнить из python), а затем вызвать их из javascript с помощью pywebview.api.quit().

ОБНОВЛЯТЬ: Забыл упомянуть важную деталь. Когда вы создаете свое окно, сохраните его в переменной, например:

  api = Api()

  window = webview.create_window(
    ...
    js_api=api,
    ...
  )
  api.set_window(window)

Таким образом, ваш класс API будет выглядеть примерно так:

class Api:

  def __init__(self):
    self._window = None

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

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

Другие вопросы по теме