该表显示在主窗口而不是顶级窗口中

时间:2019-05-18 12:51:52

标签: python-3.x tkinter

我试图让一个按钮在新窗口中显示一个表格,并向该窗口添加一个按钮以销毁自己。主要问题是表格显示在错误的窗口中。 感谢您的帮助。

我尝试自己做,但是我尝试的所有方法都不起作用。


import tkinter as tk

class MainWindow(tk.Frame):
    counter = 0
    def __init__(self, *args, **kwargs):
        tk.Frame.__init__(self, *args, **kwargs)
        self.button = tk.Button(self, text="Create new window", 
                                command=self.create_window)
        self.button.grid(padx = 5, pady = 5, row = 1, column = 3)

    def create_window(self):
        height = 2
        width = 3
        numberA=0
        achievs = ["1", "2", "3", "4", "5", "6"]

        self.counter += 1
        t = tk.Toplevel(self)
        t.wm_title("Window #%s" % self.counter)
        for i in range(height): #Rows
            for j in range(width): #Columns
                t = tk.Label(text=achievs[numberA], relief=tk.RIDGE)
                t.grid(row=i, column=j)
                numberA = numberA + 1
        t.mainloop

if __name__ == "__main__":
    root = tk.Tk()
    main = MainWindow(root)
    main.grid(row=4, column=5, padx=5, pady=25)
    root.mainloop()

如前所述,表格应该显示在顶层窗口中,并且如果可能的话,应该有一个按钮来破坏顶层窗口(我自己可能很难做到这一点)。

1 个答案:

答案 0 :(得分:0)

您的代码中有一些错误,这似乎是因为您可能不熟悉编码,tkinter或两者都不是。

  

首先,您要创建一个Toplevel()窗口并将其分配给变量tt = tk.Toplevel(self)),然后在创建网格时,而不是将网格值放入{您正在{1}}窗口中将网格值分配给保存Toplevel窗口的变量

这不是tkinter的工作原理,要将元素添加到窗口中,您可以将该元素作为主元素,在这种情况下,网格值的主元素是变量Toplevel

这会将``create_window`函数更改为:

t = tk.Toplevel()
  

您要犯的另一个错误是tkinter的新用户的标准错误,即您正在为“顶级”窗口创建新的循环。

仅需要一个循环( def create_window(self): height = 2 width = 3 numberA=0 achievs = ["1", "2", "3", "4", "5", "6"] self.counter += 1 t = tk.Toplevel(self) t.wm_title("Window #%s" % self.counter) for i in range(height): #Rows for j in range(width): #Columns gridVal = tk.Label(t, text=achievs[numberA], relief=tk.RIDGE) gridVal.grid(row=i, column=j) numberA = numberA + 1 ),而创建第二个循环将引起问题,因此您只需删除调用即可创建第二个循环(root.mainloop()

更改这些内容将为您提供这样的代码,该代码应该可以按您希望的方式工作:

t.mainloop