我正在使用 python 2.6 和随附的标准 Tkinter 重新设计界面的布局。麻烦的是我注意到一些奇怪的行为,而且我是 Tkinter 的新手,所以这可能只是我因为缺乏经验而忽略的一些简单的事情。
以下是我如何在主框架内嵌套框架以获得所需布局的一些示例代码:
import Tkinter as tk
root = tk.Tk()
master = tk.Frame(root)
frame = tk.Frame(master).grid(sticky = tk.W)
item1 = "Label One"
L1 = tk.Label(frame, text = item1).grid(sticky = tk.W)
b1 = tk.Button(frame, text = "Button 1").grid(sticky = tk.W)
find = tk.Label(frame, text = "Find").grid(sticky = tk.W)
item = tk.Entry(frame, width = 50).grid(sticky = tk.W)
##item.insert(0,"Enter Item to Search For")
L2 = tk.Label(frame, text = "Label Two").grid(sticky = tk.W)
search = tk.Button(frame, text = "Search").grid(row = 3, column = 0)
frame2 = tk.Frame(master).grid(sticky = tk.W)
list1 = tk.Listbox(frame2, width = 100).grid(sticky = tk.W)
##yscroll = tk.Scrollbar(frame2,orient = tk.VERTICAL,command = list1.yview).grid(row = 5, column = 1, sticky = tk.N + tk.S + tk.W)
yscroll = tk.Scrollbar(frame2, orient = tk.VERTICAL).grid(row = 5, column = 1, sticky = tk.N + tk.S + tk.W)
##list1.configure(yscrollcommand = yscroll.set)
##xscroll = tk.Scrollbar(frame2, orient = tk.HORIZONTAL, command = list1.xview).grid(sticky = tk.W + tk.E)
xscroll = tk.Scrollbar(frame2, orient = tk.HORIZONTAL).grid(sticky = tk.W + tk.E)
##list1.configure(xscrollcommand = xscroll.set)
root.mainloop()
当我尝试在条目小部件中插入默认值时会发生以下错误,并且在我开始嵌套框架之前它就起作用了:
Traceback (most recent call last):
File "H:\Tkinter\Grid.py", line 17, in <module>
item.insert(0,"Enter Item to Search For")
AttributeError: 'NoneType' object has no attribute 'insert'
示例代码中所有注释掉的行都发生了类似的错误。这些是我需要执行的操作,因为当前滚动条无法正常工作,因为我无法告诉它们在滚动时更改列表。
1.当你像这样嵌套框架时,我是否必须以不同的方式访问小部件的变量?
2.当我使用嵌套框架并且孩子和父母都使用网格时,为什么我的小部件放置只对应于主人的行数和列数?如果你看一下 Y 轴滚动条的行,我不得不做 row = 5, col = 1 的主人。我相信它应该是 frame2 的第 0 行,第 1 列,因为小部件的父级设置为 frame2,我希望 frame2 也使用网格,但它似乎使用主框架网格。
3.是否可以在不同的框架中显示网格线?