如何将stdout和stderr重定向至PySimpleGUI的Frame元素而非Multiline
解决方案
首先明确:Frame元素本身不支持标准输出重定向,这个功能是PySimpleGUI里Multiline元素独有的特性,所以没法直接给Frame加重定向参数实现需求。
但可以用嵌套的方式解决——把带重定向配置的Multiline放到Frame的布局里,这样既保留Frame的结构,又能实现输出重定向效果。
示例代码(适配你的Frame结构)
把原来Frame里的Column替换成带重定向的Multiline,代码如下:
output_layout = [ [sg.Frame(title=frameTitles[12], font=FrameFontCol1, layout=[ # 将带重定向的Multiline嵌套进Frame布局 [sg.Multiline(size=(0,5), font='Courier 8', text_color="#DBFF33", expand_x=True, expand_y=True, write_only=True, border_width=2, reroute_stdout=True, reroute_stderr=True, echo_stdout_stderr=True, autoscroll=True, auto_refresh=True)] ], expand_x=True)] ]
如果需要保留原有的Column(cb12)
要是你需要保留cb12这个Column的内容,可以把它和Multiline放在Frame的布局里组合,比如上下排列:
output_layout = [ [sg.Frame(title=frameTitles[12], font=FrameFontCol1, layout=[ [sg.Column(cb12, size=(0, size[1]))], [sg.Multiline(size=(0,5), font='Courier 8', text_color="#DBFF33", expand_x=True, write_only=True, border_width=2, reroute_stdout=True, reroute_stderr=True, echo_stdout_stderr=True, autoscroll=True, auto_refresh=True)] ], expand_x=True)] ]
这样就能在Frame容器里实现标准输出的重定向显示了。
内容的提问来源于stack exchange,提问作者hornetbzz
相关产品推荐
相关产品推荐

