You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从远程Jupyter Notebook向Flask应用传输数据并生成二维码

解决方案

1. Jupyter Notebook自动发送请求

直接用Python的requests库就能实现无人工输入的请求发送,步骤如下:

  • 先在Jupyter里安装requests(如果没装的话):
    !pip install requests
    
  • 编写发送请求的代码,替换成你的Flask服务器实际IP和端口:
    import requests
    
    # Flask服务的地址,把xxx.xxx.xxx.xxx换成实际的服务器IP
    flask_url = "http://xxx.xxx.xxx.xxx:5000/qrcode"
    # 要发送的姓名参数
    payload = {"name": "JohnDoe"}
    
    # 发送GET请求
    response = requests.get(flask_url, params=payload)
    # 打印响应结果,验证是否成功
    print(response.text)
    
    运行这段代码就能自动把参数传给Flask,不需要手动输入。

2. Flask已经在持续监听接口

你不用额外做任何操作——Flask启动后,自带的开发服务器本来就会一直运行,持续监听所有注册的路由(包括/qrcode)。只要你的Flask服务没关闭,每次有请求过来,displayQrCode函数就会被触发执行,自动获取name参数生成二维码。

3. 优化二维码GUI的刷新逻辑

你当前的代码每次请求都会开新线程弹出新窗口,容易出现多个窗口堆积的问题。可以改成单窗口持续运行,更新图片内容,示例代码如下:

import PySimpleGUI as sg
import threading
import os

# 全局变量存储二维码窗口
qr_window = None

def qrCodeWindowShow(img_path='checkin-qrcode.png'):
    global qr_window
    # 如果窗口已经存在,就更新图片,否则创建新窗口
    if qr_window:
        # 更新图片
        qr_window['-QR-'].update(filename=img_path)
        qr_window.refresh()
    else:
        # 初始化窗口布局
        layout = [[sg.Image(filename=img_path, key='-QR-')]]
        qr_window = sg.Window('二维码展示', layout, finalize=True)
        # 启动窗口事件循环(单独线程里运行)
        while True:
            event, values = qr_window.read(timeout=100)
            if event == sg.WIN_CLOSED:
                qr_window = None
                break

# 修改你的Flask路由函数
@app.route('/qrcode', methods=['GET'])
def displayQrCode():
    args = request.args 
    name = args.get('name')
    
    try:
        if not name:
            return 'Error: 缺少name参数'
        # 生成二维码
        img = qrcode.make(name)
        img.save('checkin-qrcode.png')
        # 确保GUI线程正常运行
        if not qr_window or not qr_window.is_closed():
            # 如果窗口没开,启动线程;如果已开,直接更新
            if not qr_window:
                qrWindowThread = threading.Thread(target=qrCodeWindowShow, daemon=True)
                qrWindowThread.start()
            else:
                qr_window['-QR-'].update(filename='checkin-qrcode.png')
                qr_window.refresh()
        print(name)
        return 'Success'
    except Exception as e:
        print(f'错误: {e}')
        return 'Error in GET'

这样每次收到新的name参数时,会直接更新已有窗口里的二维码,而不是弹出新窗口,实现了GUI的持续刷新。

内容的提问来源于stack exchange,提问作者h21

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 04:15:40