首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >该表显示在主窗口而不是toplevel窗口中。

该表显示在主窗口而不是toplevel窗口中。
EN

Stack Overflow用户
提问于 2019-05-18 12:51:52
回答 1查看 36关注 0票数 0

我试图让一个按钮在一个新窗口中显示一个表,并在该窗口中添加一个按钮来破坏自身。主要问题是表出现在错误的窗口中。谢谢你帮忙。

我试着自己去做,但我试过的每一件事都行不通。

代码语言:javascript
运行
复制
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()

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-18 15:13:13

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

首先创建一个Toplevel()窗口并将其分配给变量t (t = tk.Toplevel(self)),然后在创建网格时,不是将网格值放入Toplevel窗口,而是将网格值分配给保存Toplevel窗口的变量。

这不是tkinter的工作原理,要将一个元素添加到一个窗口中,您可以将该元素赋予它的主元素,在本例中,网格值的母版是变量t = tk.Toplevel()

这将将create_window`函数更改为:

代码语言:javascript
运行
复制
    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)的调用即可。

更改这些内容会给您提供这样的代码,这些代码应该可以按照您的要求工作:

代码语言:javascript
运行
复制
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()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56199117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档