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

