1

私はTKの学習を開始しました(Pythonから)。ウィジェットを表示するために Grid Layout manager を使用できると感じました (簡単に聞こえます) が、今では間違った決定だったと感じています。たとえば、内部に複数のフレーム (ウィザードのようなフォーム) を持つフレームを計画していました。そのため、そのフォームの下部に 2 つのボタン (次へ、前へ) が必要でした。今回は一番下のフレームの右端に配置したかったのですが、配置が難しそうです。

両方のボタンに別々の内部フレームを作成しようとしましたが、結果を得ることができませんでした。グリッドレイアウトマネージャーでそのような結果を達成できるかどうか教えてもらえますか

from Tkinter import *
tk = Tk()
main_frame = Frame(tk)
main_frame.grid(row=0)
frame3 = Frame(main_frame, bg="orange", width=1000, height=100)
frame3.grid(row=1,column=0,columnspan=2)
frame3a = Frame(frame3)
frame3b = Frame(frame3)
frame3a.grid(row =0 ,column = 0)
frame3b.grid(row = 0, column = 1)
btn1 = Button(frame3a, text='Next', width = 10, command=next)
btn1.grid(padx=200, pady =40 )
btn2 = Button(frame3b, text='Previous', width = 10, command=prev)
btn2.grid(padx=00, pady =40 )
frame3.grid_propagate(False)
tk.mainloop()

前もって感謝します

4

1 に答える 1

3

はい、できます。スティッキー属性だけでなく、グリッドの行/列属性をさらに使用します。

読む: http://effbot.org/tkinterbook/grid.htm

私はあなたがあなたのウィンドウをこのように見せたいと思っていると仮定しています(粗いASCII着信)

+------------+------------+
|            |            |
|  FRAME     |    FRAME   |
|------------+------------|
|        FRAME  |PREV|NEXT|
+-------------------------+

これを行うには、packではなくを使用しますgrid。ボトム フレームを作成し、それをボタンの高さに合わせて、両方を正しくパックします。そのボトム スペースに他のがらくたを貼り付けたい場合は、グリッド マネージャーを使用してフレームを邪魔にならないように押し出すことができます。Pack はボタンが含まれるフレームでのみアクティブになりますが、gridmanager を使用してボタンフレームを移動できます。

from Tkinter import * 
tk = Tk() 
main_frame = Frame(tk) 
main_frame.grid(row=0) 
frame1 = Frame(main_frame, bg="orange", width=500, height=100)
frame2 = Frame(main_frame, bg="blue", width=500, height=100)
frame3 = Frame(main_frame, bg="green", width=1000, height=50)
frame1.grid(row=1,column=1)
frame2.grid(row=1,column=2) 
frame3.grid(row=2,column=1,columnspan=2)
frame3.pack_propagate(0) # Keeps bottom frame from resizing
btn1 = Button(frame3, text='Next', width = 10) 
btn1.pack(side='right')  # sticks on side
btn2 = Button(frame3, text='Previous', width = 10) 
btn2.pack(side='right')  # sticks on side
tk.mainloop()
于 2012-07-13T14:27:45.247 に答える