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

PySimpleGUI GUI调用subprocess启动Chrome后脚本终止问题求助

解决PySimpleGUI点击按钮后脚本终止的问题

嘿,作为Python新手能写出第一个GUI脚本已经超棒啦!咱们来搞定这个点击「Maths exercise repo」按钮后GUI就关闭的问题~

问题根源

你当前用subprocess.Popen时加了stdout=subprocess.PIPE和stderr=subprocess.PIPE,这两个参数会让Python创建管道来捕获Chrome的输出。但如果不去主动读取这些管道里的内容,当输出积累到一定量时,Chrome进程会被阻塞,进而导致你的GUI主线程卡住甚至终止,看起来就像脚本自己关掉了。

而且对于打开浏览器这种场景,你根本不需要捕获它的输出,所以这两个参数完全是多余的,反而会帮倒忙。

解决方案1:修改subprocess代码

直接去掉那两个管道参数,让Chrome独立运行,不会影响你的GUI主线程:

if event == 'Maths exercises repo':
    # 移除stdout和stderr参数,让Chrome正常独立运行
    subprocess.Popen([CHROME, '你的数学习题仓库URL'], shell=True)

解决方案2:用更简单的webbrowser模块(推荐新手)

Python自带的webbrowser模块可以直接打开URL,不需要手动指定Chrome路径,系统会自动调用默认浏览器,代码更简洁:

首先在脚本顶部导入模块:

import webbrowser

然后修改按钮事件的处理代码:

if event == 'Maths exercises repo':
    webbrowser.open('你的数学习题仓库URL')  # 替换成实际的URL即可

确保你的事件循环完整

最后别忘了确认你的GUI事件循环是正常运行的,完整的结构应该像这样:

import PySimpleGUI as sg
import subprocess
import webbrowser  # 如果用方案2的话需要导入

CHROME = "你的Chrome路径"  # 比如Windows下可能是"C:/Program Files/Google/Chrome/Application/chrome.exe"

layout = [
    [sg.Text('Your typed chars appear here:')],
    [sg.Text('It. Lit. pages', size=(15, 1)), sg.Input(key='str_ITLP')],
    [sg.Text('MAT quiz pages', size=(15, 1)), sg.Input(key='str_MATQ')],
    [sg.Text('Math exercises', size=(15, 1)), sg.Input(key='str_MATH')],
    [sg.Button('Show'), sg.Button('Exit'), sg.Button('Maths exercise repo')]
]
window = sg.Window('Pattern 2B', layout)

# 核心事件循环,必须一直运行才能保持GUI打开
while True:
    event, values = window.read()
    # 处理关闭窗口或Exit按钮
    if event == sg.WIN_CLOSED or event == 'Exit':
        break
    # 处理Show按钮(如果有逻辑的话)
    if event == 'Show':
        # 这里可以添加Show按钮的功能,比如打印输入的内容
        print("It. Lit. pages:", values['str_ITLP'])
        print("MAT quiz pages:", values['str_MATQ'])
        print("Math exercises:", values['str_MATH'])
    # 处理打开数学习题仓库的按钮
    if event == 'Maths exercise repo':
        # 方案1:用subprocess
        # subprocess.Popen([CHROME, '你的实际URL'], shell=True)
        # 方案2:用webbrowser(更简单)
        webbrowser.open('https://你的数学习题仓库地址.com')

# 关闭窗口
window.close()

这样修改后,点击按钮打开Chrome后,你的GUI会继续保持运行,完全不影响其他按钮的使用~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:00:13