我使用的是Python 2.7和Tkinter.我几乎是面向对象程序的新手.我有一个很长的程序,有许多Tkinter窗口,在某些时候我要求用户加载我用Pandas读取的Excel文件,并希望永久使用和更新该值(数据变量).我现在这样做的方式是使用全局变量,但我知道它是危险的,效率低下而且根本不优雅.
尽管我可以根据构建我的gui类的方式执行controller.show_frame(framename),但我最终自己构建了一些框架,因此数据变量会自行更新.
我在Stack Overflow中阅读并尝试了一些答案但可能已经错误地实现了它们:
self.app_data = {data=[],filename=""}从其他窗口更新它,这里的事情是我认为类gui只实例化了一次,它创建了所有其他窗口类,所以这不起作用.也许我在那里做错了什么.(未在代码上显示).主框架是我需要用于其他目的的某种中间步骤; 以下代码是我的程序的简化.
我知道这是一个糟糕的噩梦代码!谢谢 :)
import Tkinter as tk
import pandas as pd
import tkFileDialog
import tkMessageBox
global data, strat_columns, filename
data = pd.DataFrame([])
strat_columns = []
filename = ""
class gui(tk.Tk):
data = pd.DataFrame([])
filename = ""
def __init__(self):
tk.Tk.__init__(self)
container = tk.Frame(self)
container.pack(side="top",fill="both",expand=True)
self.frames = {}
for F in (main_frame, first_frame):
frame = F(container, self)
self.frames[F] = frame
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame(main_frame)
def show_frame(self,sel_frame): …Run Code Online (Sandbox Code Playgroud)