当前位置: 首页 > news >正文

sg.Multiline 的用法

在PySimpleGUI中,sg.Multiline是一个多行文本组件,支持显示、输入及编辑多行文本,并具备滚动条、颜色/字体定制、事件监听等高级功能。以下是详细用法指南:

1. 基本创建与参数配置

  • 创建语法
    import PySimpleGUI as sg
    multiline = sg.Multiline(default_text='初始内容\n第二行',  # 默认文本size=(40, 5),                   # 显示区域大小(宽度字符数, 高度行数)key='-ML-',                     # 唯一标识符(用于事件和更新)autoscroll=True,                # 新内容自动滚动到底部enable_events=True,             # 启用文本变化事件disabled=False,                 # 是否禁用输入(仅查看)font=('Consolas', 12),         # 字体设置text_color='black',             # 文本颜色background_color='white'        # 背景颜色
    )
    
  • 滚动条:内容超出size范围时,自动显示垂直/水平滚动条;通过expand_x=Trueexpand_y=True配合窗口resizable=True实现组件随窗口扩展。

2. 事件处理与数据交互

  • 获取内容
    event, values = window.read()
    user_input = values['-ML-']  # 通过key获取当前文本
    
  • 更新内容
    window['-ML-'].update('新内容\n第二行')  # 覆盖原有内容
    window['-ML-'].print('追加内容', append=True)  # 追加内容(保留滚动位置)
    
  • 事件监听(需设置enable_events=True):
    if event == '-ML-':  # 当文本变化时触发print("文本已更新:", values[event])
    

3. 高级功能

  • 颜色与格式控制
    • 逐字符设置颜色/背景:
      window['-ML-'].print('红色文本', text_color='red', background_color='yellow')
      
    • 使用cprint快捷语法:
      sg.cprint('白色文本红色背景', c='white on red', window=window, key='-ML-')
      
  • 日志输出集成
    结合Python的logging模块,将日志重定向到Multiline:
    class LogHandler(logging.Handler):def __init__(self, window):super().__init__()self.window = windowdef emit(self, record):self.window['-LOG-'].print(self.format(record), append=True)
    log = logging.getLogger()
    log.addHandler(LogHandler(window))
    log.info("日志消息")
    
  • 语法高亮与自动完成
    通过监听输入事件,结合第三方库(如pygments)实现代码高亮或自动补全:
    if event == '-CODE-':code = values[event]highlighted = highlight(code, PythonLexer(), HtmlFormatter())window['-OUTPUT-'].update(highlighted)
    

4. 布局示例

layout = [[sg.Text("输入内容:"), sg.Input(key='-INPUT-')],[sg.Button("提交"), sg.Button("清空")],[sg.Multiline(key='-OUTPUT-', size=(50, 10), autoscroll=True)],[sg.Statusbar("状态栏", key='-STATUS-')]
]
window = sg.Window("多行文本示例", layout, resizable=True, finalize=True)
while True:event, values = window.read()if event == sg.WIN_CLOSED:breakelif event == '提交':text = values['-INPUT-']window['-OUTPUT-'].print(f"提交内容:{text}", append=True)window['-STATUS-'].update(f"行数:{len(window['-OUTPUT-'].get().split('\n'))}")elif event == '清空':window['-OUTPUT-'].update('')

5. 注意事项

  • 性能优化:处理超长文本(如>10,000行)时,设置write_only=True禁用即时读取,提升性能。
  • 窗口调整:使用resizable=True允许窗口调整大小,配合expand_x/y=True使Multiline动态扩展。
  • 初始化:创建窗口时使用finalize=True确保组件在更新前已准备好。

通过上述配置,sg.Multiline可实现从基础文本显示到高级日志集成、代码编辑器等复杂功能,满足多样化GUI开发需求。

http://www.gsyq.cn/news/117405.html

相关文章:

  • 学生寝室管理系统源码 Python+Django+Vue 前后分离
  • 网络安全必备工具收藏指南:20款神器助你快速入门
  • 公司人员管理系统源码 Python+Django+Vue 前后分离 设计文档
  • 【LangChain4J】图生文文生图,以及第三方平台集成
  • lefthook如何与其他工具组合使用?
  • [GKCTF 2020]CheckIN
  • 基于大数据的交通信号智能控制系统的设计与实现开题报告
  • 在职备战法考,先择校还是先备考?
  • LangChain 1.0重大革新:如何结合Milvus构建生产级Agent全攻略!
  • 多线程核心:互斥与同步
  • 如何在Linux开发板上打印自己的启动LOGO
  • 从 “吹爆” 到 “冷静”:AIGC + 低代码为何难破企业级开发的硬骨头?
  • 基于大数据的高校学生健康服务系统的设计与实现开题报告
  • 【SpringMVC】请求接收与结果响应
  • 非官方接口实现中数据安全与隐私保护的考量
  • 基于SpringBoot的企业财务管理信息系统的设计与实现(程序+文档+讲解)
  • MySQL参数配置一次说清楚
  • centos7 磁盘I/O性能
  • 机器人操作空间速度计算python几种实现函数
  • 告别 LLM 输出的不确定性:深度解析 TypeChat 如何重塑 AI 工程化开发
  • 透过格子玻尔兹曼LBM实现三相驱替:油、水、二氧化碳三组分动态模拟与研究
  • 格子玻尔兹曼方法(LBM)的MRT作用力模型
  • LLC谐振变换器的控制策略多种多样,今天咱们就来聊聊几种常见的闭环仿真方法,顺便用Matlab/Simulink来搞点代码,看看这些控制策略在实际中是怎么玩的
  • 多孩家庭首选 30-40 万新能源7座车型推荐 - 速递信息
  • API赋能:消金电销无缝联的革新实践
  • 力扣 “两数之和” 最优解:哈希表 O (n) 时间复杂度实现详解
  • 基于WEB的高校计算机数据库课程知识图谱系统的设计与实现
  • 2025雅思择校不踩坑!机构综合实力TOP榜祝你选择!! - 速递信息
  • 优化实践:提升 1688 商品详情 API 接口稳定性和数据获取效率
  • TLS网络安全协议巩固知识基础题(2)