我正在玩一些我在网上找到的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
行,但我不知道该解决什么问题在该代码中。)
答案 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):
表示“定义一个新类ScrolledList
从Frame
“继承其行为。因此框架由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()