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

如何在PySimpleGUI中自动调整输入框大小?

解决方法

方法1:给输入框添加滚动功能(简单高效)

不需要调整输入框大小,直接开启滚动属性,长路径会自动出现水平滚动条,用户拖动即可查看完整内容。只需修改sg.Input的参数:

layout = [
    [sg.Input(size=(30, 1), key='-IN1-', enable_events=True, scroll=True), sg.Button('Browse')],
    [sg.Input(k='-IN2-'), sg.Button('-Date1-')],
    [sg.T('Starting Year:'), sg.Input(size=(5, 1), k='-YEAR-')],
    [sg.Input(k='-IN3-'), sg.Button('-Date2-')],
    [sg.B('Go'), sg.B('Exit')]
]

window = sg.Window("Chooser Using Popups", layout, keep_on_top=True)

while True:
    event, values = window.read()
    if event in (sg.WIN_CLOSED, 'Exit'):
        break
    if event == 'Browse':
        filename = sg.popup_get_file('', no_window=True, keep_on_top=True)
        if filename:  # 处理用户取消选择的情况
            window['-IN1-'].update(filename)

方法2:动态调整输入框宽度

如果需要输入框自动适配路径长度,可以通过测量文本实际显示宽度来修改输入框尺寸:

layout = [
    [sg.Input(size=(30, 1), key='-IN1-', enable_events=True), sg.Button('Browse')],
    [sg.Input(k='-IN2-'), sg.Button('-Date1-')],
    [sg.T('Starting Year:'), sg.Input(size=(5, 1), k='-YEAR-')],
    [sg.Input(k='-IN3-'), sg.Button('-Date2-')],
    [sg.B('Go'), sg.B('Exit')]
]

window = sg.Window("Chooser Using Popups", layout, keep_on_top=True)

while True:
    event, values = window.read()
    if event in (sg.WIN_CLOSED, 'Exit'):
        break
    if event == 'Browse':
        filename = sg.popup_get_file('', no_window=True, keep_on_top=True)
        if filename:
            # 临时创建文本元素测量路径宽度
            temp_text = sg.Text(filename, visible=False)
            window.layout.append([temp_text])
            window.finalize()
            # 获取文本实际像素宽度
            text_width = temp_text.Widget.winfo_reqwidth()
            # 移除临时元素并刷新窗口
            window.layout.pop()
            window.refresh()
            
            # 转换为输入框的尺寸单位(系数可根据字体调整)
            input_width = max(30, text_width // 8)  # 保留最小宽度30
            window['-IN1-'].set_size((input_width, 1))
            window['-IN1-'].update(filename)

关键注意点

  • 窗口创建后,不能通过重新定义layout来更新界面,必须用组件的update()或set_size()方法修改属性。
  • 方法2中的宽度转换系数(如8)可能因系统字体差异略有不同,可根据实际显示效果微调。

内容的提问来源于stack exchange,提问作者josh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 23:55:31