1

我有一堆这样的框架:

    +--+
    |  |
  +-+--+-+
  |      |
+-+------+-+
|          |
+----------+

但我希望他们是这样的:

        +--+
        |  |
    +---+--+
    |      |
+---+------+
|          |
+----------+

做这个的最好方式是什么?

正在使用 pack 并且无法让他们行为正确。出于某种原因,使用网格根本没有显示它们,我的程序挂起

# 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
4

2 回答 2

4

你几乎拥有它。您在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()
于 2012-07-17T18:14:41.320 回答
1

在不知道您首先将什么放入框架的情况下回答这个问题有点棘手。@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-17T18:39:24.867 回答