tkinter在多个框架中显示带有字典的多个按钮(面向对象编程)

时间:2015-12-10 02:34:29

标签: python dictionary tkinter

我正在使用tkinter使用python 3创建代码。简而言之,代码看起来像这样:

import tkinter as tk
class home(tk.Tk):
#consists of frames
class frame1(tk.Frame):
#consists of buttons
class frame2(tk.Frame):
#consists of buttons

问题是我用字典生成多个按钮,但是当我在第2帧中按下按钮实际发生的是按钮不在第2帧而是在家中。所以每当我切换到第1帧时,第2帧中的按钮仍会显示。谁能给我一个解决方案?

1 个答案:

答案 0 :(得分:0)

  

但是当我按下第2帧中的按钮时实际发生的是按钮不在第2帧但在家中。

通常在创建按钮时将它们放在特定的框架中,而不是使用grid()

  

所以每当我切换到第1帧时,第2帧中的按钮仍会显示。

按钮将显示,直到您销毁它们或grid_forget(),即删除它们。您也可以根据需要多次调用“使用按钮创建新框架”类。不需要每个帧的单独类,请参阅下面的简单示例。

import sys
if sys.version_info[0] < 3:
    import Tkinter as tk     ## Python 2.x
else:
    import tkinter as tk     ## Python 3.x

class Home():
    def __init__(self, root):
        self.root=root
        self.column=0
        main_frame=tk.Frame(self.root)
        main_frame.grid(row=0)
        but=tk.Button(main_frame, text="Open a Frame of Buttons",
                      command=self.open_another)
        but.grid(row=0, column=0)
        tk.Button(main_frame, text="Exit Tkinter", bg="red",
              command=self.root.quit).grid(row=1, column=0, sticky="we")

    def open_another(self):
        """ A new frame is created every time the botton is pressed
        """
        self.column += 1
        another=ButtonFrame(self.root, self.column)

class ButtonFrame():
    def __init__(self, root, col):
        self.fr=tk.Frame(root)
        self.fr.grid(row=0, column=col)
        but=tk.Button(self.fr,
            text="A new frame with a button "+     str(col)).grid(row=0)
        tk.Button(self.fr, text="Destroy This Frame", bg="orange",
                  command=self.fr.destroy).grid(row=1, column=0)

root=tk.Tk()
H=Home(root)
root.mainloop()