我们如何更改此框架的标题?

时间:2015-06-12 15:46:41

标签: python tkinter

我正在玩一些我在网上找到的Tkinter代码:

from Tkinter import * 

class ScrolledList(Frame):
    def __init__(self, options, parent=None):
        Frame.__init__(self, parent)
        self.pack(expand=YES, fill=BOTH)                  
        self.makeWidgets(options)

    def handleList(self, event):
        index = self.listbox.curselection()            
        label = self.listbox.get(index)                
        self.runCommand(label)                         

    def makeWidgets(self, options):                    
        sbar = Scrollbar(self)
        list = Listbox(self, relief=SUNKEN)
        sbar.config(command=list.yview)                
        list.config(yscrollcommand=sbar.set)              
        sbar.pack(side=RIGHT, fill=Y)                     
        list.pack(side=LEFT, expand=YES, fill=BOTH)    
        pos = 0
        for label in options:                          
            list.insert(pos, label)                    
            pos = pos + 1

        list.bind('<Double-1>', self.handleList)       
        self.listbox = list
    def runCommand(self, selection):                   
        print 'You selected:', selection

if __name__ == '__main__':
    options = map((lambda x: 'Lumberjack-' + str(x)), range(20))
    ScrolledList(options).mainloop()

我的问题是:框架在哪里创建?我没有看到类似的东西:

F1 = Tkinter.Frame()

如果我想添加标签,请说:

label = Tkinter.Label(F1)

我希望能够添加标签,并在完成后销毁整个窗口(最有可能在frame.destroy()之后添加print selection行,但我不知道该解决什么问题在该代码中。)

2 个答案:

答案 0 :(得分:5)

Frame没有头衔;这是有效的,因为Tkinter在第一次创建任何窗口小部件时自动创建Tk实例,并且Tkinter检测到尚未创建根窗口(HT @BryanOakley)。如果要更改窗口标题,请明确创建Tk实例并将其作为parent提供给ScrolledList

if __name__ == '__main__':
    options = map((lambda x: 'Lumberjack-' + str(x)), range(20))
    app = Tk()
    app.title('Demo')
    ScrolledList(options, parent=app)
    app.mainloop()

在许多方面,这样做会更好,因为它更容易理解正在发生的事情。

  

我的问题是[原文如此]框架被创建了吗?

ScrolledList 一个Frame,这就是整个继承点(class ScrolledList(Frame):表示“定义一个新类ScrolledListFrame继承其行为。因此框架由ScrolledList(...)创建。

答案 1 :(得分:1)

正如@jonrsharpe指出的那样,ScrolledList is a Frame,因为该类是从它派生的。基础Frame类在ScrolledList.__init__()方法的第一行初始化:

class ScrolledList(Frame):
    def __init__(self, options, parent=None):
        Frame.__init__(self, parent)  # <- calls base class constructor
          ...

此外,框架没有标题,因此最接近框架的方法是将框架添加到框架所在的窗口中。这可以通过显式创建根窗口来完成,这样你就可以引用它,使用它来设置它的标题,然后明确地将窗口作为ScrolledList parent:< / p>

if __name__ == '__main__':
    root = Tk()
    root.title('MyTitle')
    root.minsize(200, 200)  # also added so title is visible
    options = map((lambda x: 'Lumberjack-' + str(x)), range(20))
    ScrolledList(options, root)  # <- Passes root window as the parent
    root.mainloop()

screenshot of scrolllist with titel