2017-05-20 36 views
0

我想要使用控制器將一個IntVar下存儲的值從一個窗口傳遞到另一個窗口。但問題是價值不會自我更新。將IntVar()值從Tkinter中的一個窗口傳遞到另一個

class DSS(tk.Tk): 

def __init__(self, *args, **kwargs): 

    tk.Tk.__init__(self, *args, **kwargs) 
    container = tk.Frame(self) 
    container.pack(side='top', fill='both', expand=True) 

    container.grid_rowconfigure(0, weight=1) 
    container.grid_columnconfigure(0, weight=1) 

    self.frames = {} 

    for F in [App, Optimize]: 

     frame = F(container, self) 
     self.frames[F] = frame 
     frame.grid(row=0, column=0, sticky='nsew') 

    self.show_frame(App) 
def show_frame(self, cont, extras): 
    print "show frame" 
    frame = self.frames[cont] 
    extras.update(extras) 
    print str(cont) 
    frame.tkraise() 

def return_frame(self, cont): 
    return self.frames[cont] 

這是控制器類。因爲其他代碼太長,我會發布負責轉移的行。

radio_btn = tk.Radiobutton(self.kernel_frame, text=txt, variable=self.v, command=lambda: self.import_kernel(), value=val) 
    radio_btn.grid(row=row_no, column=1, sticky='w') 

這是從哪兒我送的v

價值而這正是我Â嘗試訪問它。

class Optimize(tk.Frame): 

def __init__(self, master, controller, extras): 

    tk.Frame.__init__(self, master) 
    container = tk.Frame(self) 
    container.pack() 
    app = controller.return_frame(App) 
    # self.v = app.v 

    tk.Label(container, text=app.v.get()).pack() 
    tk.Button(container, text="Back", command=lambda: controller.show_frame(App, {})).pack() 

回答

0

您可以使用getvar方法,例如:

import Tkinter as tk 

root = tk.Tk() 

# var tkinter are globals in tkinter and are accessible everywhere 
var = tk.IntVar() 

var.set(123456789) 

my_label = tk.Label(root) 
my_label.pack() 

# Now you can access to your var with its name and getvar method 
# _name return the identifier in tkinter, PY_VAR0, PY_VAR1, etc. 
my_label['text'] = my_label.getvar(var._name) 

# But you can specify your own name for your vars tkinter 
my_var = tk.StringVar(my_label, '', 'my_var') # (master, value, name) 
my_var.set('blabla') 

my_blabla_label = tk.Label(root, text=root.getvar('my_var')).pack() 

root.mainloop() 
相關問題