问题描述
所以,我一次在 pywebview 中打开了窗口。现在从窗口 1,我想单击一个按钮并在窗口 2 中显示一些文本。它们之间如何通信?我正在考虑使用 Flask-socketio 或任何基于套接字的解决方案。但这似乎有点矫枉过正,是吗?如何轻松实现?
这是在pywebview中打开多个窗口的代码:
import webview
if __name__ == '__main__':
master_window = webview.create_window(title='Window #1',url="<h1>First window</h1>")
second_window = webview.create_window('Window #2',html='<h1>Second window</h1>')
webview.start()
解决方法
好吧,最后,我不得不采用艰难的方式(虽然很容易),即套接字方式。我使用 flask-socketio
来实现此功能。下面是一个例子:
假设我有 2 separate windows
、Window_1 和 Window_2。现在我在 Window_1 中有一个按钮,我将在这里单击一个按钮,然后在 Window_2 中会显示一个弹出窗口。
Window_1.html
<button id="click_me" type="button">Click Me</>
<script>
// add jquery scripts (use a cdn or download from the source)
let socket = io.connect('/');
socket.emit('emit_button_click_signal',{});
</script>
Window_1.py
from flask_socketio import SocketIO
app = Flask(__name__)
socket_io = SocketIO(app,cors_allowed_origins='*')
@socket_io.on('emit_button_click_signal')
def emit_button_click_signal(data):
emit('emit_button_click_signal_to_window_2',{},namespace='/',broadcast=True) # refer to flask-socketio basics for more
Window_2.html
<script>
let socket = io.connect('/');
socket.on('emit_button_click_signal_to_window_2',function (data) {
// trigger some jquery to show a pop up in HTML..
});
</script>
我们通过 window_2.html (JS is emitting)
从 window_1.html (JS is receiving)
向 Window_2.py (which acts as the messenger in OS level)
发送信号。而已。您可以使用它来构建 multi-panel based softwares
,例如 photoshop、AutoCAD、Solidworks 等。