pyimgui 中文

3 篇文章 1 订阅
这篇博客介绍了轻量级界面库ImGui,它提供了模块化的编程方式,比QT更容易上手。通过Pyglet集成,可以简化环境搭建和项目编译。作者分享了如何使用Python和ImGui进行界面设计,包括颜色管理及中文显示,并提供了一个简单的代码示例,展示了如何创建窗口和显示文本。此外,还提到了imgui的社区活跃和渲染速度优势。
摘要由CSDN通过智能技术生成

虽然对 imgui 接触有一段时间了,但还是第一次介绍imgui,imgui 是一个比较优异的轻量级界面渲染项目,其理论上做到了模块的方式去编程界面, 比qt上手容易很多, 环境搭建和项目的编译也比较好, 比qt要简单很多, 再结合python,效果更加好了。

上手imgui直接看官方 demo 代码,底层渲染有 gl,direct,sdl 等实现。

在这里插入图片描述
渲染速度非常快, 社区维护也非常活跃。

再结合python特性,pyimgui 项目可以说将界面编程变成了一个上手快,效果快,调试方便等特点。

imgui 项目采用了大量的push, pop方法来做属性的配置, 我们可以是用python在做,比如颜色。

class ncolor:
    def __init__(self, rgba=[], wtype=[]):
        self.rgba = rgba
        self.wtype = wtype
        pass
    def __exit__(self, exc_t, exc_v, trace):
        if len(self.rgba) == 0: return
        imgui.pop_style_color(len(self.rgba))
    def __enter__(self):
        for i, t in enumerate(self.wtype):
            imgui.push_style_color(t, *(self.rgba[i]))

使用的时候,直接

with ncolor([colorsys.hsv_to_rgb(.9, .6, .6)],[imgui.COLOR_TEXT]):
	imgui.text('abc')

当然,中文也是界面处理的一个难点,反正我不清楚, 我折腾了三四天,总算找到眉目。

# -*- coding: utf-8 -*-
from __future__ import absolute_import

import pyglet
from pyglet import gl
from testwindow import show_test_window

import imgui
# Note that we could explicitly choose to use PygletFixedPipelineRenderer
# or PygletProgrammablePipelineRenderer, but create_renderer handles the
# version checking for us.
from imgui.integrations.pyglet import create_renderer

def main():

    window = pyglet.window.Window(width=1280, height=720, resizable=True)
    gl.glClearColor(1, 1, 1, 1)
    imgui.create_context()
    impl = create_renderer(window)

    io = imgui.get_io()
    # a.ttf 是包含中文编码字符实现的ttf文件, 
    chinese_font = io.fonts.add_font_from_file_ttf('a.ttf',20,io.fonts.get_glyph_ranges_chinese_full())
    # 注意这一句, 这里会去加载字符,没有会报错
    impl.refresh_font_texture()
    def update(dt):
        imgui.new_frame()

        if imgui.begin_main_menu_bar():
            if imgui.begin_menu("File", True):

                clicked_quit, selected_quit = imgui.menu_item(
                    "Quit", 'Cmd+Q', False, True
                )

                if clicked_quit:
                    exit(1)

                imgui.end_menu()
            imgui.end_main_menu_bar()

        show_test_window()
        # 这里是中文的样例
        imgui.push_font(chinese_font)
        imgui.begin('韵abcd',True)
        imgui.pop_font()
        imgui.end()

    def draw(dt):
        update(dt)
        window.clear()
        imgui.render()
        impl.render(imgui.get_draw_data())

    pyglet.clock.schedule_interval(draw, 1/120.)
    pyglet.app.run()
    impl.shutdown()


if __name__ == "__main__":
    main()

总的来说,imgui 项目对界面编程相对qt更加友好,更加贴近底层的封装, 欢迎大家尝试交流。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值