You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 04:25:40