问题遇到的现象和发生背景
利用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,
我的解答思路和尝试过的方法
脑子进水了,没解决思路
我想要达到的结果
根据初始列表的内容,根据第一个列表框里选择的地区内容,第二个列表框生成对应的地区城市列表,选择第二个列表框城市后,第三个列表框会出现对应的县份列表(列表内容是瞎编的,单纯为了测试可行性)