在Tkinter中将IntVar()值从一个窗口传递到另一个窗口

时间:2017-05-20 18:53:35

标签: python python-2.7 python-3.x tkinter

我想使用控制器将存储在IntVar下的值从一个窗口传递到另一个窗口。但问题是价值不会自我更新。

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()

1 个答案:

答案 0 :(得分:0)

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

  hsh = {foo_attribute: 'foo', bar_attribute: 'bar'}
  f = Foo.new
  hsh.each do |k,v|
    f.send("#{k}=",v)
  end
  f.inspect
   => "#<Foo:0x00000004f1f0f0 @bar=#<Bar:0x00000004f1f0c8 @bar_attribute=\"bar\">, @foo_attribute=\"foo\">" 
  f.bar.inspect
   => "#<Bar:0x00000004f1f0c8 @bar_attribute=\"bar\">"