大家好。
共有三个模块:Interface、DataManager、 ,General
为了方便理解,我画了一个他们之间交互的图。
该界面是用dearpygui编写的,代码如下:
class Interface():
def draw_main_window(self, start_programm):
with dpg.window(label="Example Window", width=1000, height=500, tag='main_wind'):
with dpg.tab_bar():
with dpg.tab(label='Main'):
with dpg.group():
dpg.add_text(default_value="Last Date")
dpg.add_input_text(tag='date_user', no_spaces = True, decimal= True, width=100)
dpg.add_button(label="Поиск", callback=start_program, user_data = dpg.get_value('date_user'))
dpg.set_primary_window(window='main_wind', value=True)
dpg.setup_dearpygui()
dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()
该模块DataManager包含程序的内部结构,目前,为了简化情况,我用一个简单的模块替换了它
class DataManager:
def start_program(self, sender, app_data, user_data):
print(user_data)
print(sender)
print(app_data)
General 类如下所示:
class General():
def __init__(self, data_manager: DataManager, interface: Interface) -> None:
self.data_manager = data_manager
self.interface = interface
def start_program(self):
self.interface.draw_main_window(self.data_manager.start_program)
if __name__ == '__main__':
t = General(SelFlashManager(), GraphInterface())
t.start_program()
我希望当我单击“搜索”按钮时,文本字段中的数据"date_user"将与 to callbackfrom一起发送start_program,DataManager但这种情况不会发生。
单击按钮后我得到
# Пустая строка
31 # id элемента
None # Результат
我怀疑这是由于在窗口初始化时执行了 get_value 函数造成的。我读到有回调调试。但是主事件循环仍然需要在某个地方调用,这样做有点奇怪General,因为整个接口都是在Interface. 告诉我如何确保文本字段中的数据callback(在单击期间)一起进入函数?
在这一行中:
该参数的值
user_data在执行该行时(创建按钮时)“计算”一次,并且在程序运行期间不会再次更改。您希望在单击按钮时计算该值。例如,可以通过向回调传递一个 lambda 来实现,在回调中计算该值并将其传递给真正的回调,然后单击时将直接计算该值: