我有一堆这样的框架:
+--+
| |
+-+--+-+
| |
+-+------+-+
| |
+----------+但我希望他们是这样的:
+--+
| |
+---+--+
| |
+---+------+
| |
+----------+做这件事最好的方法是什么?
正在使用pack,无法让他们表现正确。由于某些原因,使用grid根本没有显示它们,并且我的程序挂起
# Main script
root = Tk()
root.geometry('500x500')
for task in TaskList:
GuiTools.TaskBox.TaskBox(root, task)
root.mainloop() # program hangs from this line, to the point of having to use kill to close it
# Taskbox class
class Taskbox(master, task):
__init__(self)
self.TaskFrame = Frame(master, borderwidth=3, relief=RAISED)
. . .
Putting stuff in frame
. . .
self.TaskFrame.pack() # Gives result 1
#self.TaskFrame.grid(column=1, sticky='ne') # no display, causes hang发布于 2012-07-18 02:39:25
在不知道你在帧中放了什么的情况下回答这个问题有点棘手。@sc0tt是正确的,你可能想要使用sticky=tk.E,然而,这可能不足以获得你想要的东西,因为你的框架可能会根据你放在里面的东西来调整自己的大小(除非你使用myframe.grid_propagate(False))。解决这个问题的方法是把columnspan关键字也放进去。
这是一个愚蠢的循环,它会做你想做的事情:
import Tkinter as tk
root = tk.Tk()
frames = []
for i in range(3):
f = tk.Frame(root)
f.grid(row=i, column=0, columnspan=i+1, sticky=tk.E)
frames.append(f)
#Now, you can add buffer spaces (frames) into the grid at
# `row=0,column=0`, `row=0,column=1` and `row=1,column=1` if you need it.
root.mainloop()这有效地划分了网格,如下所示:
+----+-----+-----+
| | | |
+----+-----+-----+
| | |
+----+-----------+
| |
+----------------+发布于 2012-07-18 02:14:41
你就快成功了。在将小部件添加到窗口之前启动mainloop,这将导致在mainloop完成之前不会添加小部件。当主循环结束时,窗口将不再可用,因此添加它们将失败。
下面是一个简单的例子,上面有3个框架,就像你想要的那样:
import Tkinter
root = Tkinter.Tk()
frame_one = Tkinter.Frame(root, width="50", height="50", borderwidth=3, relief=Tkinter.RAISED)
frame_one.grid(row=0, column=0, sticky=Tkinter.E)
frame_two = Tkinter.Frame(root, width="100", height="100", borderwidth=3, relief=Tkinter.RAISED)
frame_two.grid(row=1, column=0, sticky=Tkinter.E)
frame_three = Tkinter.Frame(root, width="150", height="150", borderwidth=3, relief=Tkinter.RAISED)
frame_three.grid(row=2, column=0, sticky=Tkinter.E)
root.mainloop()https://stackoverflow.com/questions/11528236
复制相似问题