Python Tkinter,在新页面上创建唯一的ListBox的问题

时间:2019-08-07 17:13:19

标签: python tkinter

在tkinter中,我要逐步处理多个页面,每个页面应该具有唯一的Listbox,其中将填充唯一的信息。

我的问题是“列表框”在其他页面上显示了我的初始页面的信息。即使我将其他页面上的列表框完全删除,第一页上的“列表框”仍会显示。

这基本上是我第一次对任何东西使用类,所以我不确定为什么它不起作用。这些基本上都是从YouTube的操作方法复制而来的,我正在尝试将其调整为所需的功能。

class Uploader(tk.Tk):

    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs) #sets up tk window stuff
        container = tk.Frame(self)
        container.grid(row = 0, column = 0)
        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight=1)

        self.frames = {}
        for F in (Gr7, Gr8, Gr9): #put new pages on this 
            frame = F(container, self)
            self.frames[F] = frame
            frame.grid(row=0, column = 0, sticky = "nsew")    
        self.show_frame(Gr7)

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

class Gr7(tk.Frame):
    def __init__(self,parent,controller):
        tk.Frame.__init__(self, parent)

        lb = tk.Listbox(width=30, height=15)
        lb.insert('end', *homelist)
        lb.grid(row = 1, column = 0)

class Gr8(tk.Frame): 
    def __init__(self,parent,controller):
        tk.Frame.__init__(self, parent)

        lb1 = tk.Listbox(width=30, height=15)
        lb1.insert('end', *homelist1)
        lb1.grid(row = 1, column = 0)


class Gr9(tk.Frame): 
    def __init__(self,parent,controller):
        tk.Frame.__init__(self, parent)

        lb2 = tk.Listbox(width=30, height=15)
        lb2.insert('end', *homelist2)
        lb2.grid(row = 1, column = 0)

1 个答案:

答案 0 :(得分:1)

您没有指定哪个窗口小部件应包含列表框,因此所有的列表框都以根窗口作为其主窗口。因为您将它们全部放在同一行和同一列中,所以只能看到一个列表框。

要解决此问题,并且作为一个很好的一般经验法则,您在创建小部件时应始终明确提供母版:

Rails.application.routes.default_url_options[:host] = 'localhost:3000'