hitomisky 2022-11-21 19:45 采纳率: 0%
浏览 2

利用python 的pysimplegui 模块编写的 gui列表显示bug求解

问题遇到的现象和发生背景

利用pysimplegui 编写的简单界面,利用列表框根据列表格式,按需生成对应的结果,目前碰到的是第二个列表框会出现无法选中的情况,电击第三个列表框的值第二个列表框会被重置,脑子不好使,不懂哪里处问题了

用代码块功能插入代码,请勿粘贴截图
import PySimpleGUI as sg

L = [
    ['广西', [['南宁', ['江南', '邕宁', '青秀']], ['柳州', ['柳城', '鹿寨', '融水']], ['桂林', ['阳朔', '容县', '桂平']]]],
    ['浙江', [['北宁', ['江北', '六宁', '蓝秀']], ['西州', ['西城', '露天', '天水']], ['西林', ['阳关', '李县', '兰平']]]],
    ['北京', [['系宁', ['江西', '⑧宁', '黄秀']], ['南州', ['北城', '鹿南', '地水']], ['北林', ['阳桥', '江县', '都平']]]]
]

ll = []
mm = []
layout = [
    [sg.Text("这是第一行数据")],

    [sg.Button('test')],
    [sg.Listbox([], key='-1-', size=(10, 5), enable_events=True),
     sg.Listbox([], key='-2-', size=(10, 5), enable_events=True),
     sg.Listbox([], key='-3-', size=(10, 5), enable_events=True)],
    [sg.Ok('确定'), sg.Exit('取消')]
]
windows = sg.Window("我的程序", layout)
while True:
    event, values = windows.read()
    print(event, values)

    if event in (None, '取消') or event == sg.WIN_CLOSED:
        # sys.exit()
        break
    if event in (None, 'Exit'):
        break

    if event == 'test':
        list_country = []

        for i in L:
            # print(i[0])
            list_country.append(i[0])
        # print(list_country)
        windows['-1-'].update(values=list_country)

    if values['-1-']:
        temp = []

        for i in L:
            # print(i[0],type(i[0]))
            # print(values['-1-'][0], type(values['-1-'][0]))
            if i[0] == values['-1-'][0]:
                # print(i)

                for j in i[1]:
                    # print(j)
                    # print(k)

                    temp.append(j[0])
        ll = temp
        # print(ll)
        windows['-2-'].update(values=ll)

        if values['-2-']:
            temp = []

            for i in L:
                # print(i[0],type(i[0]))
                # print(values['-1-'][0], type(values['-1-'][0]))
                if i[0] == values['-1-'][0]:
                    # print(i)
                    # print(i[0])
                    for j in i[1]:
                        # print(j)

                        if j[0] == values['-2-'][0]:
                            mm = j[1]
        # print(mm)
        windows['-3-'].update(values=mm)

windows.close()


运行结果及报错内容

整个程序运行没有报错,但是会出现选择完第三个列表框后,第二个列表框的值会被清空重置的bug,

img

我的解答思路和尝试过的方法

脑子进水了,没解决思路

我想要达到的结果

根据初始列表的内容,根据第一个列表框里选择的地区内容,第二个列表框生成对应的地区城市列表,选择第二个列表框城市后,第三个列表框会出现对应的县份列表(列表内容是瞎编的,单纯为了测试可行性)

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-11-21 22:44
    关注
    评论

报告相同问题?

问题事件

  • 创建了问题 11月21日

悬赏问题

  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用
  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害