如何在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
相关产品推荐
相关产品推荐

