2017-04-12 1 views
0

저는 크롬을 통해 현재 간단하게 제공되는 매우 간단한 플라스크 백엔드로 파이썬 데스크톱 웹 앱을 만들었습니다. 내가 pywebview를 사용하여 패키지하려고하지만, intestesting로드 블록으로 만났다.Pywebview는 두 개의 webviews를 열지 않는 한 플라스크 앱을 차단합니다.

내 패키지의 기본 파일에 다음과 같습니다 코드가이 거의 체계적으로 실패

import os 
import sys 
from flasher import app 

import httplib 

import webview 
import threading 


def start_prod_server(): 
    runserver(debug=False, reloader=False) 

def start_gui(): 
    webview.create_window("MyAppName", "http://localhost:5000", height=1000) 

def runserver(debug=True, reloader=False): 
    port = int(os.environ.get('PORT', 5000)) 
    url = "http://localhost:{}".format(port) 

    print("ready!") 
    app.run(host='::', port=port, debug=debug, use_reloader=reloader) 


if __name__ == '__main__': 
    t = threading.Thread(target=start_prod_server) 
    t.daemon = True 
    t.start() 

    # This never works 
    threading.Timer(1.5, start_gui).start() 

    sys.exit() 

을 창 빈 나타나 백엔드는 요청을 포함하여 (아무것도에 응답하지 않습니다 별도의 데스크탑 브라우저). 이 원인이 될 수 무엇

if __name__ == '__main__': 
    t = threading.Thread(target=start_prod_server) 
    t.daemon = True 
    t.start() 

    # This works every time 
    threading.Timer(1.5, start_gui).start() 
    threading.Timer(1.5, start_gui).start() 

    sys.exit() 

:

가 나는 두 개의 웹보기 스레드를 시작하면, 항상 작동 우연히 발견? 파이썬에서의 스레딩에 대한 나의 이해는 상당히 제한되어 있으므로 어디에서 볼 것인지 잘 모르겠습니다. 이것은 pywebview의 버그 일 가능성이 있습니까? 아니면 스레드에 문제가 있습니까?

나는 또한 webview 부분에 대한 대안에 대한 제안을하지만, 응용 프로그램이 이미 잘 작동하므로 파이썬/플라스크 부분을 유지하려고합니다.

답변

0

글쎄, 파고 조금 후에, 나는 해결책을 직접 찾은 것 같아요.

이유가 무엇이든간에 webview.create_window()이 페이지로 이동하여 멈추지 않았습니다. 두 번째 창을 열면 두 창에서 URL로 이동하여 앱을 계속 진행할 수있었습니다. pywebview의 소스에서 ...하지만

if __name__ == '__main__': 
    t = threading.Thread(target=start_prod_server) 
    t.daemon = True 
    t.start() 

    threading.Timer(1.5, start_gui).start() 
    webview.load_url("http://localhost:5000") 

    sys.exit() 

어떤 통찰력을이 여전히 발생하는 이유에 오신 걸 환영과 같이 webview.load_url("http://localhost:5000")을 추가하여 문제가 간단하게 해결된다

(난 아직도 이유를 이해하지 않은 경우) , 두 가지 방법으로 정확히 같은 전화를 걸고 있습니다. self.browser.web_browser.Navigate(url)

관련 문제