如何拆分PySimpleGUI中sg.Input组件获取的字符串?附相关代码问题梳理
修复PySimpleGUI输入内容对称差检测的问题
我帮你梳理下代码里的问题,然后给你一个能正常工作的版本:
原代码的核心问题
- 错误获取输入值:你写的
folha1 = '1'.split()是对字符串'1'进行拆分,而不是读取输入框里用户输入的内容,应该用values['1']来获取对应key的输入文本 - 类方法调用问题:
comparador类里的main方法没有定义为静态方法,直接调用会报错 - 冗余导入:导入了
from ast import Import和重复的tkinter.Tk,这些都没用到,完全可以删掉 - 结果展示不友好:直接把集合对称差的列表转成文本显示,可读性很差
修正后的代码
import PySimpleGUI as sg def main(): layout = [ [sg.Text("folha 1", justification='left'), sg.Input(key='1')], [sg.Text("folha 2", justification='left'), sg.Input(key='2')], [sg.Push(), sg.Button("Detetar", key='detetar')] ] window = sg.Window("Main Window", layout) while True: event, values = window.read() if event == sg.WIN_CLOSED: break if event == "detetar": # 获取输入框内容并按空格拆分(如果是其他分隔符可修改split的参数,比如split(',')) folha1 = values['1'].split() folha2 = values['2'].split() # 计算两个列表的对称差 diff = list(set(folha1).symmetric_difference(set(folha2))) # 更友好的结果展示布局 result_layout = [ [sg.Text("差异内容:")], [sg.Listbox(diff, size=(40, 10), key='result')], [sg.Button("关闭", key='close')] ] resposta = sg.Window("差异检测结果", result_layout, resizable=True) while True: res_event, res_values = resposta.read() if res_event in (sg.WIN_CLOSED, 'close'): resposta.close() break window.close() if __name__ == "__main__": main()
关键修改说明
- 简化代码结构:把原来的类改成普通函数
main,避免类方法调用的问题,代码更简洁直观 - 正确读取输入:用
values['1']和values['2']获取用户输入的文本,再用split()按空格拆分(如果你的输入是用逗号等其他分隔符,修改split的参数即可) - 优化结果展示:用
sg.Listbox来展示差异内容,比直接显示列表文本可读性强很多 - 完善窗口逻辑:第二个窗口关闭后会回到主窗口,不会直接退出程序,同时确保所有窗口都能正常关闭
内容的提问来源于stack exchange,提问作者CarefulDRAGA
相关产品推荐
相关产品推荐

