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

PySimpleGui中隐藏显示内容后如何让sg.Frame保持居中显示?

要实现切换显示后sg.Frame始终居中,只需修改布局逻辑,给每个Frame所在行的左右两侧添加占位元素撑满剩余空间即可,具体修改点和可运行的完整代码如下:

  • 所有sg.Frame所在的行,左右各加一个sg.Push()元素:该元素会自动占据行内的剩余空白空间,强制中间的Frame始终处于水平居中位置
  • 可选:给Window初始化参数加上resizable=True,手动拖拽放大窗口时Frame也会保持居中
  • 如果你的PySimpleGUI版本低于4.45.0不支持sg.Push(),可以用sg.Text('', expand_x=True)替代,效果完全一致
import PySimpleGUI as sg

frameContent=[]
frameContent.append([sg.Text('Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. ')],)
frameContent.append([sg.Text('Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes,')],)
frameContent.append([sg.Text('nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. ')],)
frameContent2=[]
frameContent2.append([sg.Text('Nulla consequat massa quis enim.')],)
frameContent2.append([sg.Text('Donec pede justo, fringilla vel, ')],)
frameContent2.append([sg.Text('aliquet nec, vulputate eget, arcu.')],)
frameContent3=[]
frameContent3.append([sg.Text('In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. ')],)
frameContent3.append([sg.Text('Integer tincidunt. Cras dapibus.')],)
frameContent3.append([sg.Text('Vivamus elementum semper nisi. Aenean vulputate eleifend tellus.')],)
frameContent4=[]
frameContent4.append([sg.Text('In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. ')],)
frameContent4.append([sg.Text('Integer tincidunt. Cras dapibus.')],)
frameContent4.append([sg.Text('Vivamus elementum semper nisi. Aenean vulputate eleifend tellus.')],)
layout = [  
            [sg.Checkbox('Tooltips', key="-showTooltips-", enable_events=True)],
            [sg.Push(), sg.Frame('Frame',frameContent, key='-frame1-',visible=True), sg.Push()],
            [sg.Push(), sg.Frame('Frame',frameContent2, key='-frame2-',visible=True), sg.Push()],
            [sg.Push(), sg.Frame('Frame',frameContent3, key='-frame1Tooltips-',visible=False), sg.Push()],
            [sg.Push(), sg.Frame('Frame',frameContent4, key='-frame2Tooltips-',visible=False), sg.Push()]
        ]

# 可选添加resizable=True,支持窗口拉伸时也保持居中
window = sg.Window('Window Title', layout, resizable=True)
while True:
    event, values = window.read()
    if event in (sg.WIN_CLOSED, 'Exit'):
        break
    if event == '-showTooltips-':
        for i in range(1,3):
            if values['-showTooltips-']:
                window["-frame"+str(i)+'-'].Update(visible=False)
                window["-frame"+str(i)+'-'].hide_row()
                window["-frame"+str(i)+"Tooltips-"].Update(visible=True)
                window["-frame"+str(i)+"Tooltips-"].unhide_row()
            else:  
                window["-frame"+str(i)+'-'].Update(visible=True)
                window["-frame"+str(i)+'-'].unhide_row()
                window["-frame"+str(i)+"Tooltips-"].Update(visible=False)
                window["-frame"+str(i)+"Tooltips-"].hide_row()
window.close()

原有业务逻辑无需任何改动,仅调整布局行结构即可实现无论切换哪个Frame显示,都会自动保持水平居中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:15:04