2017-01-31 6 views
0

Я пытаюсь создать небольшое приложение в бутылке, и подумал, что попробую использовать pywebview в качестве зрителя. Когда я запускаю следующий файл, я получаю два экземпляра окна webview. Первая показывает страницу, вторая - стрелка вращающегося колеса. Полагаю, закрытие второго окна закрывает веб-сервер, но не убивает поток.BottlePy и PyWebView

Почему появляются два окна?

import sys 
import threading 

from bottle import Bottle, ServerAdapter 
import webview 


class MyWSGIRefServer(ServerAdapter): 
    server = None 

    def run(self, handler): 
     from wsgiref.simple_server import make_server, WSGIRequestHandler 
     if self.quiet: 
      class QuietHandler(WSGIRequestHandler): 
       def log_request(*args, **kw): pass 
      self.options['handler_class'] = QuietHandler 
     self.server = make_server(self.host, self.port, handler, **self.options) 
     self.server.serve_forever() 

    def stop(self): 
     # self.server.server_close() <--- alternative but causes bad fd exception 
     self.server.shutdown() 

app = Bottle() 
listen_addr = 'localhost' 
listen_port = 8080 

server = MyWSGIRefServer(host='localhost', port=8080) 

@app.route('/') 
def hello(): 
    return "Hello World!" 




def start_server(): 
    app.run(server=server, reloader=True) 


try: 
    print(threading.enumerate()) 
    serverthread = threading.Thread(target=start_server) 
    serverthread.daemon = True 
    print("starting web server") 
    serverthread.start() 
    print("starting webview") 
    webview.create_window('bottle test', "http://localhost:8080/") 
    print("webview closed. closing server") 

    sys.exit() 
    server.stop() 
except Exception as ex: 
    print(ex) 

ответ

1

Выпуск помощью reloader=True при запуске сервера. Установка этого параметра на False предотвращает появление второго окна.

Смежные вопросы