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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 11:39:18