1

私はこのようなフレームのスタックを持っています:

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

しかし、私はそれらをこのようにしたいと思います:

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

これを行うための最良の方法は何ですか?

パックを使用していて、正しく動作させることができませんでした。何らかの理由で、グリッドを使用してもまったく表示されず、プログラムがハングします

# 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 に答える