Tkinter - 如何更新帧和每帧之间的参数?

时间:2017-04-02 21:57:59

标签: python tkinter

我需要一些帮助来更新tkinter中两个或更多帧之间的信息。我正在做一个小项目,我有serval框架信息,每个框架是一个类。

第一帧是设置框架 - 因此用户可以单击某些按钮并选择多个内容。 第二帧应显示所选图像。 到目前为止,我可以在设置页面上做出选择,但是当我点击前进到结果页面时,它会显示空帧,没有图像,也没有做出选择。

我尝试使用应在两个框架/类之间传递的信息来执行一些shared_data,因此我可以在结果页面上访问它们,但有些人不知道如何更新信息。所以它没有显示图像,因为结果页面上的模式在初始时为0。

class xyz (tk.Tk):

   def __init__(self, *args, **kwargs):
      tk.Tk.__init__(self, *args, **kwargs)
      ...
      self.shared_data = {
          "no": tk.IntVar(),
          "selectedname": tk.StringVar(),
          "selectedpath": tk.StringVar(),
          .....
       }

      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 (SettingPage, PageResults):
        page_name = F.__name__
        frame = F(container, self)
        self.frames[page_name] = frame
        frame.grid(row=0, column=0, sticky="nsew")

       self.show_frame("SettingPage")

   def show_frame(self, page_name):
       frame = self.frames[page_name]
       frame.tkraise()


class SettingPage(tk.Frame):

   def __init__(self, parent, controller, *args, **kwargs):
      tk.Frame.__init__(self, parent, *args, **kwargs)
      self.controller = controller

      self.controller.shared_data["no"] = 0

      ...

      # after selecting serval buttons
      self.controller.shared_data["no"] = 1

      buttonContinue = ttk.Button(self, text='''CONTINUE >>''', command=lambda: controller.show_frame("PageResults"))
      buttonContinue.place(relx=0.84, rely=0.9, height=43, width=186)


class PageResults(tk.Frame):

  def __init__(self, parent, controller):

      tk.Frame.__init__(self, parent)
      self.controller = controller

      mode =  self.controller.shared_data["no"]

      if mode == 1 :

         #     show image
         #......

我无法向您展示我正在使用的确切实际代码,所以我尝试了这样简化它。我是tkinter的新手,所以任何帮助都会受到很多关注。

谢谢!!

1 个答案:

答案 0 :(得分:0)

问题是因为你这样做:

self.shared_data = {
    "no": tk.IntVar(),
    ...
}

然后你会这样做:

self.controller.shared_data["no"] = 0

因此,shared_data["no"]IntVar开头,然后 用整数替换

使用IntVar时,必须使用set方法更改值,并使用get方法获取值:

self.controller.shared_data["no"].set(0)
...
if self.controller.shared_data["no"] == 0:
   ...