如何在Dearpygui回调函数内创建窗口?技术求助
在Dearpygui的回调函数中创建窗口的方法
当然可以在回调函数内创建窗口,但你的现有代码存在几个需要修正的问题:
- 回调内创建的窗口不能使用已存在的
tag="PW",组件标签必须唯一,重复标签会导致报错 - 原回调函数
lel内部为空,没有实际创建窗口的逻辑
以下是修正后的可运行代码:
import dearpygui.dearpygui as dpg item_table = [] # 创建上下文和视图窗口 dpg.create_context() dpg.create_viewport(title="invengo", width=600, height=600) # 输入回调函数,收集数据 def reg(sender): value = dpg.get_value(sender) print(value) item_table.append(value) # 点击按钮创建新窗口的回调 def lel(sender): # 使用唯一标签创建新窗口 with dpg.window(tag="NEW_WINDOW", label="新创建的窗口", width=300, height=200): dpg.add_text("这是在回调函数里生成的窗口!") dpg.add_button(label="关闭窗口", callback=lambda: dpg.delete_item("NEW_WINDOW")) # 构建主窗口 with dpg.window(tag="PW"): item_name = dpg.add_input_text(label="物品名称", hint="请输入物品名称...", callback=reg, on_enter=True) item_amount = dpg.add_combo(label="数量", default_value=1, items=(1,2,3,"多个"), callback=reg) check_button = dpg.add_button(label="创建新窗口", callback=lel) # 启动GUI dpg.setup_dearpygui() dpg.show_viewport() dpg.set_primary_window("PW", True) dpg.start_dearpygui() dpg.destroy_context() # 打印收集的数据 print(item_table)
关键说明
- 动态创建组件时必须保证标签(tag)唯一,否则会触发Dearpygui的组件冲突错误
- 可以在回调内自由添加各类组件,甚至给新窗口添加关闭按钮实现动态删除
- Dearpygui原生支持在回调中动态创建/修改/删除组件,这是它的核心特性之一
内容的提问来源于stack exchange,提问作者Katwick
相关产品推荐
相关产品推荐

