Close PyWebView Window with HTML Button click

Question:

Info in advance:

There is a similar question dealing with the same issue.

However, this one doesn’t work for me (or I just don’t know enough to include it properly).

I have only recently started working with pywebview.

The goal:

I want to close the window / end the programme with a link (or button) in HTML.

The problem:

The code used does not work for me.

The function can be reached (the print statement fills up the console,

unfortunately I have no idea why), but the window is not closed.

I am just starting with pywebview, so I don’t really know what to do.

Used pages for problem solving:

PyWebView Website

StackOverflow Question

The Code (Python & HTML):

import sys

import webview


class Api:

    def __init__(self):
        self._window = None

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

    def destroy(window):
        print('Destroying window..')
        window.destroy()
        print('Destroyed!')


if __name__ == '__main__':
    api = Api()
    window = webview.create_window('Blackjack', 'index.html', js_api=api, min_size=(1000, 800))
    webview.start()
<html>
    <body>
        <main>
            <div id="content">
                <a>
                    <div class="block" onclick="exit()">End</div>
                </a>
                <script>
                    function exit() { pywebview.api.destroy() }
                </script>
            </div>
        </main>
    </body>
</html>
Asked By: JueK3y

||

Answers:

In the meantime I have found a solution that closes the window and exits the program.
However, I get an error, unfortunately I do not know why.

The HTML / JS code is correct so far and needs no adjustment.

In the Python script, only def destroy(self) must be specified instead of def destroy(window).

Pretty simple actually, but still took me almost a month to solve.

Answered By: JueK3y

I think you have to use that set_window method

if __name__ == '__main__':
    api = Api()
    window = webview.create_window('Blackjack', 'index.html', js_api=api, min_size=(1000, 800))
    api.set_window(window)
    webview.start()
Answered By: DavidSM
Categories: questions Tags: , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.