3

これはこれまでの私のコードです:

master = Tk()
Label(master, text="Input:").grid(row=0)

e1 = Entry(master, width = 100)
e1.grid(row=0, column=1)

Button(master, text='Q', command=q_pressed).grid(row=3, column=2,
                                                sticky=W, padx = 4, pady=4)

Button(master, text='C', command =c_input).grid(row=3, column=1,
                                                sticky=W, padx = 0, pady=4)

Button(master, text='Confirm', command=parse_input).grid(row=3, column=0,
                                                sticky=W, padx = 4, pady=4)

「Q」ボタンが「C」ボタンの横にあるようにしようとしていますが(「C」が「確認」ボタンの横にあるように)、代わりにエントリウィジェットが終了する場所に配置します。

これはグリッド管理の問題であることを理解しています。行=0、テキストとエントリウィジェット、行= 3にボタン用の独自の独立した列(0,1,2)があるようにレイアウトを設定するにはどうすればよいですか?

4

3 に答える 3

4

問題は、Entry e1が非常に長く、100文字が含まれているが、1列にしか及ばないことです。コマンドでcolumnspan使用する列の数を定義するために使用できます。次の例は私のために動作します。自分で決めてください。の妥当な値は何でしょうか。e1gridcolumnspan = 30columnspan

from Tkinter import *
master = Tk()
Label(master, text="Input:").grid(row=0)

e1 = Entry(master, width = 100)
e1.grid(row=0, column=1, columnspan=30)

Button(master, text='Q').grid(row=3, column=2)

Button(master, text='C').grid(row=3, column=1)

Button(master, text='Confirm').grid(row=3, column=0)
mainloop()
于 2013-01-01T21:45:38.857 に答える
2

必要なレイアウトを実行する方法は複数ある可能性があります。私はクリーンなものを提示することにしました。ウィジェットEntryは最初の行の2番目の列で大きな水平方向のスペースを占めるため、次の行でウィジェットをその下に配置すると問題が発生します。その下に3つのボタンがあることがわかっているので、これをEntry2列にまたがって(グリッドを作成columnspan=2しながら)、次の行をグリッドを作成しながら操作できます。しかし、私は別のアプローチを好みます。これにより、全体的に優れたレイアウトも生成されます。Frame必要なのは、2つの列をとる2番目の行にグリッドを作成することです(その上の行には2つのウィジェットがあるため)。次に、この新しいにボタンをグリッドしますFrame

これにより、コードが次のようになります。

import Tkinter

master = Tkinter.Tk()

Tkinter.Label(master, text="Input:").grid(row=0, column=0)
Tkinter.Entry(master, width = 100).grid(row=0, column=1)

frame = Tkinter.Frame()
frame.grid(row=1, column=0, columnspan=2, sticky='w')
Tkinter.Button(frame, text='Confirm').grid(row=0, column=0, sticky='w')
Tkinter.Button(frame, text='C').grid(row=0, column=1, sticky='w')
Tkinter.Button(frame, text='Q').grid(row=0, column=2, sticky='w')

master.mainloop()
于 2013-01-01T21:59:31.570 に答える
0

ここにコードを入力してください{master=Tk()Label(master、text = "Input:").grid(row = 0)

e1 = Entry(master, width=100)
e1.grid(row=0, column=1, columnspan=10)

Button(master, text='Q', width=5, command=q_pressed).grid(row=3, column=1, padx=0, ipadx=5, pady=4, sticky=E)

Button(master, text='C', width=5, command =c_input).grid(row=3, column=1, padx=0, ipadx=5, pady=4, sticky=W)

Button(master, text='Confirm', width=10, command=parse_input).grid(row=3, column=0, padx=0, pady=4, sticky=W)

mainloop()}

エントリ文字列に100文字が必要だったので、単純な数学除算のためにセル/列の幅を10に基づいています。列スパンを10に設定します。padxは境界線の幅に関係するため削除し、内側のテキストの幅に関係するipadxを使用しました。エントリを10文字の幅10列に設定しました。「入力」テキストを1列として使用しました。これにより、テキスト「確認」に10文字または1列を使用できるようになり、幅= 5を使用してボタン「c」と「q」を5文字幅にすることで、列1を半分に分割できます。次に、justfy put"c"Westと"q"Eastを使用します。

これが私の頭の中で最も簡単な方法はたくさんあります。

于 2015-10-07T14:46:19.643 に答える