如何从含Tkinter类的脚本中获取变量作为main.py的输入
如何将Tkinter UI中的变量传递给main.py
方法1:把变量设为UI类的实例属性,在main中直接获取
先修改supertrend02_tk.py里的UI类,把selected和dia_inicial定义成实例变量(加self.前缀),这样外部实例化后就能访问:
# supertrend02_tk.py import tkinter as tk from tkinter import ttk class SuperTrendUI: def __init__(self, root): self.root = root # 初始化实例变量,用来存UI输入的值 self.selected = None self.dia_inicial = None # 示例UI元素(根据你实际的界面调整) self.option_combo = ttk.Combobox(root, values=["A", "B", "C"]) self.option_combo.pack(pady=5) self.date_input = ttk.Entry(root, placeholder="输入初始日期") self.date_input.pack(pady=5) # 确认按钮,点击后把UI值存到实例变量,退出主循环 self.confirm_btn = ttk.Button(root, text="确定", command=self.save_values) self.confirm_btn.pack(pady=10) def save_values(self): # 从UI控件读取值,赋值给实例变量 self.selected = self.option_combo.get() self.dia_inicial = self.date_input.get() self.root.quit() # 停止UI循环,让main.py继续执行
然后在main.py里实例化UI,等用户操作完成后读取变量:
# main.py from supertrend02_tk import SuperTrendUI import tkinter as tk if __name__ == "__main__": root = tk.Tk() app = SuperTrendUI(root) root.mainloop() # 启动UI,直到用户点击确定 # 现在可以直接拿UI实例里的变量用 print("选中项:", app.selected) print("初始日期:", app.dia_inicial) # 在这里写你的业务逻辑,比如把变量传入处理函数 # your_function(app.selected, app.dia_inicial)
方法2:用回调函数直接触发main中的逻辑
如果希望用户点击确认后立刻执行main里的代码,可以把处理函数传给UI类:
# supertrend02_tk.py import tkinter as tk from tkinter import ttk class SuperTrendUI: def __init__(self, root, callback_func): self.root = root self.callback = callback_func # 保存传入的处理函数 # 同样的UI元素示例 self.option_combo = ttk.Combobox(root, values=["A", "B", "C"]) self.option_combo.pack(pady=5) self.date_input = ttk.Entry(root, placeholder="输入初始日期") self.date_input.pack(pady=5) self.confirm_btn = ttk.Button(root, text="确定", command=self.trigger_callback) self.confirm_btn.pack(pady=10) def trigger_callback(self): selected_val = self.option_combo.get() dia_val = self.date_input.get() self.callback(selected_val, dia_val) # 调用处理函数,传入变量 self.root.destroy() # 关闭窗口
main.py里定义处理函数,传给UI类:
# main.py from supertrend02_tk import SuperTrendUI import tkinter as tk def process_ui_data(selected, dia_inicial): # 这里写处理变量的逻辑 print("收到选中项:", selected) print("收到初始日期:", dia_inicial) # 比如调用你的核心功能函数 # core_process(selected, dia_inicial) if __name__ == "__main__": root = tk.Tk() # 把处理函数传给UI类 app = SuperTrendUI(root, process_ui_data) root.mainloop()
为啥直接导入变量不行?
你之前直接导入失败,大概率是这两个原因:
- UI里的变量是局部变量(没加
self.),外部根本访问不到; - Tkinter的
mainloop()会阻塞程序,直接导入的话,变量还没被用户赋值就被读取了,拿到的都是初始空值。
内容的提问来源于stack exchange,提问作者ur mom
相关产品推荐
相关产品推荐

