我试图让一个按钮在一个新窗口中显示一个表,并在该窗口中添加一个按钮来破坏自身。主要问题是表出现在错误的窗口中。谢谢你帮忙。
我试着自己去做,但我试过的每一件事都行不通。
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()如前所述,表应该显示在图层窗口中,如果可能的话,应该有一个按钮来破坏图层窗口(我可能会很难做到这一点)。
发布于 2019-05-18 15:13:13
您的代码中有一些错误,这似乎是因为您可能对编码、tkinter或两者都不熟悉。
首先创建一个
Toplevel()窗口并将其分配给变量t(t = tk.Toplevel(self)),然后在创建网格时,不是将网格值放入Toplevel窗口,而是将网格值分配给保存Toplevel窗口的变量。
这不是tkinter的工作原理,要将一个元素添加到一个窗口中,您可以将该元素赋予它的主元素,在本例中,网格值的母版是变量t = tk.Toplevel()。
这将将create_window`函数更改为:
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您正在犯的另一个错误是tkinter新用户的标准错误,即您正在为Toplevel窗口创建一个新的循环。
只需要一个循环(root.mainloop()),而创建第二个循环会导致问题,所以您只需删除创建第二个循环(t.mainloop)的调用即可。
更改这些内容会给您提供这样的代码,这些代码应该可以按照您的要求工作:
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
gridVal = tk.Label(t, text=achievs[numberA], relief=tk.RIDGE)
gridVal.grid(row=i, column=j)
numberA = numberA + 1
if __name__ == "__main__":
root = tk.Tk()
main = MainWindow(root)
main.grid(row=4, column=5, padx=5, pady=25)
root.mainloop()https://stackoverflow.com/questions/56199117
复制相似问题