PySimpleGUI实现9x9 InputText布局及列表排序等问题咨询
PySimpleGUI相关问题解答
1. 实现规整的9x9 InputText数独式布局
要做出类数独的规整排列,核心是统一每个InputText的尺寸,同时可通过分组强化视觉分隔:
- 给所有InputText设置相同的
size参数(比如size=(3,1)),确保每个输入框大小一致 - 若需要模拟数独的3x3区块分隔,可用
sg.Frame将每3行3列的输入框分组,或用sg.Column配合间距调整
示例代码:
import PySimpleGUI as sg # 生成9x9布局,每个输入框带坐标key layout = [] for i in range(9): row = [] for j in range(9): # 每3列加垂直分隔线 if j % 3 == 0 and j != 0: row.append(sg.VerticalSeparator(color='black')) row.append(sg.InputText(size=(3,1), key=(i,j))) # 每3行加水平分隔线 if i % 3 == 0 and i != 0: layout.append([sg.HorizontalSeparator(color='black')]) layout.append(row) window = sg.Window('数独布局', layout) while True: event, values = window.read() if event == sg.WIN_CLOSED: break window.close()
2. 调整sg.FilesBrowse传入Lbox的文件排序
sg.FilesBrowse本身不支持直接设置排序规则,需在获取文件列表后自行处理,再更新Lbox内容:
- 触发文件选择事件后,从
values中取出选中的文件列表 - 根据需求用
sorted()函数排序(比如按文件名、修改时间) - 调用
window['-LBOX-'].update()更新Lbox的显示内容
示例代码:
import PySimpleGUI as sg import os layout = [ [sg.FilesBrowse('选择文件', target='-FILES-')], [sg.Input(key='-FILES-', visible=False)], [sg.Listbox([], size=(50,10), key='-LBOX-')] ] window = sg.Window('文件排序示例', layout) while True: event, values = window.read() if event == sg.WIN_CLOSED: break if event == '选择文件': files = values['-FILES-'].split(';') # 拆分多文件路径 if files: # 按文件名排序,可替换为其他规则 sorted_files = sorted(files, key=lambda x: os.path.basename(x)) window['-LBOX-'].update(sorted_files) window.close()
常用排序规则:
- 按文件名:
key=lambda x: os.path.basename(x) - 按文件修改时间:
key=lambda x: os.path.getmtime(x) - 按文件大小:
key=lambda x: os.path.getsize(x)
3. 获取(0,0)位置的InputText值
最直接的方式是在创建InputText时给每个元素设置坐标格式的key,之后直接通过key取值:
- 生成布局时,给第i行j列的InputText设置
key=(i,j) - 获取值时,直接用
values[(0,0)]或window[(0,0)].get()
示例代码(基于第一个问题的布局):
# 在事件循环中获取(0,0)的值 if event == '获取值': top_left_value = values[(0,0)] sg.popup(f'(0,0)位置的值是:{top_left_value}')
如果未提前设置坐标key,也可通过布局索引定位:
# 假设layout是生成的9x9布局列表 top_left_input = layout[0][0] top_left_value = window[top_left_input.Key].get()
内容的提问来源于stack exchange,提问作者antony yu
相关产品推荐
相关产品推荐

