Tkinter GUI ウィジェット – 完全なリファレンス

スポンサーリンク

tkinterのGUIウィジェットに関するチュートリアルへようこそ。

この記事では、Tkinterウィジェットについて簡単に紹介し、ウィジェットを作成するための簡単なコードスニペットをいくつか提供します。

この記事の終わりには、すべてのコードを使用して、GUIウィジェットを使用したミニサービスを構築できるようになります。

スポンサーリンク

Tkinterのメインウィンドウを作成する

このステップはTkinterのGUIウィジェットの特徴に関係なく必要なものです。

from tkinter import *
 
root = Tk()
 
#optional
root.configure(background='yellow')
root.geometry('600x800)
 
#place any of your code lines here
 
#end of code
root.mainloop()

上に示したコードスニペットは、パネル上にウィジェットを配置する前に、tkinter GUIボックスを定義するために使用しなければならない骨組みの構造体です。

このコードでは、tkinter ライブラリがインポートされ、Tk() コンストラクタが root オブジェクトを使用してインスタンス化されています。

コードの最後の方では、root.mainloop() を使ってこのプログラム全体を呼び出しています。

root.configure()は、メインフレームに追加のプロパティを追加するために使用します。

この例では、backgroundというプロパティを追加し、root.geometry()`でメインフレームが指定されたサイズになるようにしました。

ただし、これらの使用は任意です。

TkinterのGUIウィジェットを配置する

Tkinterのメインフレームを初期化したところで、様々なウィジェットを見ていきましょう。

よく使われるウィジェットとして、ラベル、ボタン、チェックボタン、エントリ、スライダー(Tkinterではスケールと呼びます)、リストボックス、ラジオボタンなどを紹介する予定です。

以下に示すコード・スニペットをメイン・ウィンドウのコードに追加してください。

1. Tkinter ラベルウィジェット

ラベルウィジェットでは、コンストラクタ Label を使って定義します。

ラベルはルートのメインウィンドウに配置され、テキストは “Hey, welcome to this my GUI” と表示される予定です。

そして、ラベルをwindowの中に詰め込み、引数としてpadyを与えてY軸に少し余裕を持たせています。

label=Label(root,text="Hey, welcome to this my GUI")
label.pack(pady=10)

2. Tkinterボタンウィジェット

ボタンは同じメインウィンドウに配置され、Button()コンストラクタで作成されます。

ボタンのテキストは “press button” と表示されます。

テキストの色が緑であることに注意してください。

そのために、前景に緑を割り当てています。

ボタンが押されたら、ある関数をアクティブにしたいので、その関数をコマンドの引数に代入しています。

関数の名前は button_trigger() です。

ボタンが押されると、この関数がアクティブになり、「ボタンが押されました」というメッセージが表示されることになります。

ボタンはメインのルートウィンドウに詰め込んでいます。

ですから、このボタンを押すと、この関数がアクティブになり、コンソールにメッセージが表示されるのです。

def button_trigerr():
    print("Button Pressed")
 
button = Button(root,text="press button", foreground="green", command=button_trigger)
button.pack(pady=10)

3. Tkinter チェックボタンウィジェット

次の例では、チェックボタンがあります。

このボックスやボタンをチェックすると、電気をつけるように背景が白になります。

そして、チェックを外すと、電気を消すように背景が黒くなります。

試してみましょう。

def check_button_action():
    print(check_button_var.get())
 
    if check_button_var.get()==1:
        root.configure(background='white')
    else:
        root.configure(background='black')
 
check_button_var = IntVar()
check_button = tk.Checkbutton(root, text="on/off", variable=check_button_var, command= button_action)
check_button.pack(pady=10)

まず、Checkbutton()を使ってチェック・ボタンを作ります。

これはルートのメイン・ウィンドウに表示されます。

テキストは “on/off “です。

このチェックボタンには変数を関連付け、それはIntegerです。

チェックボタンによって起動される関数で、button_actionと名付けました。

チェック・ボタンには0と1の2つのデフォルト状態があり、それらのデフォルト状態がこの変数に代入されます。

この変数はチェック・ボタンの状態を記録し、チェック・ボタンの状態を取得します。

チェックボタンの状態を取得するには、variable.get()を参照するだけです。

チェックボタンの状態が1であれば、ボックスにチェックが入っているのと同じことで、ウィンドウの背景を白にすることになります。

0の場合は、ルートウィンドウの背景を黒くして、ライトをオンまたはオフにするような効果を与えています。

そして、これを「main」フレームにpadyを10にして詰め込みました。

4. Tkinter エントリーウィジェット

エントリーウィジェットは、テキストを入力すると、テキストボックスやエントリーからコンソールにテキストを転送し、コンソールにメッセージを表示することができるウィジェットです。

エントリーウィジェットを作成するために、先にフレームを作成しました。

フレームを作成するために、Frame() を使用します。

フレームは、メインのルート・ウィンドウに、ボーダーの幅を5にして、沈むような効果で表示されます。

フレームパックを参照すると、フレームがメインウィンドウにパックされます。

entry_frame = Frame(root, borderwidth=5, relief = SUNKEN)
entry_frame.pack()
 
text_box=Entry(entry_frame)
text_box.pack()
 
def get_entry_text():
    print(text_box.get())
    label.configure(text=text_box.get())
 
button = Button(entry_frame, text='get entry', command=get_entry_text)
button.pack(pady=10)

次に、エントリーのテキストボックスを作成し、エントリーがフレームに入るようにしました。

エントリーをフレームにパックしました。

つまり、フレームがメイン・ウィンドウに入り、エントリーがフレームに入ることになります。

次に、エントリーのテキストをコンソールに転送するためのボタンを作成します。

これで、エントリーのメッセージがコンソールに出力され、メインフレームのラベルも更新されたことに気づきます。

テキストを取得するには、get() メソッドを使用するだけです。

5. Tkinterスケールウィジェット

次に、スライダーまたはスケールウィジェットについて説明します。

このウィジェットでは、レストランの請求書が100ドルで、チップの額の違いが請求書の合計額にどう影響するかを見たいとします。

チップにはスライダーを、請求額には入力ボックスを使用し、ラベルには請求額の合計が表示されます。

ラベルは合計金額を表示します。

slider_frame = Frame(root, borderwidth=5, relief=SUNKEN)
slider_frame.pack(pady=10)
 
def calculate_total_bill(value):
    print(value)
    if bill_amount_entry.get()!=' ':
        tip_percent=float(value)
        bill=float(bill_amount_entry.get())
        tip_amount=tip_percent*bill
        text=f'(bill+tip_amount)'
        bill_with_tip.configure(text=text)
 
slider = Scale(slider_frame, from_=0.00, to=1.0,orient=HORIZONTAL, length=400, tickinterval=0.1, resolution=0.01, command=calculate_total_bill)
slider.pack()

さて、スケールを作成するにはScale()を使用し、ここでは入力テキストボックスのパラメータや引数をすべて入力します。

これは上で作成したものです。

スライダー、入力テキストボックス、ラベルをメインウィンドウの中にあるフレームに詰め込みました。

フレームは前回の例と同じように作成しました。

スライダーによる変更に対して、calculate_total_bill()が有効になります。

この関数は基本的に、エントリーボックスから請求額であるテキストを取得します。

次に、スライダーの目盛りからチップのパーセンテージを受け取り、チップを請求書に適用して、ラベルに表示される合計請求額を出します。

6. Tkinter リストボックスウィジェット

次に、リストボックスウィジェットについて説明します。

ここでは、5つのアイテムを持つリストボックスを用意しました。

この例では、項目の1つを選択するだけです。

そして、ボタンを押すと、その項目のテキストがラベルに転送されます。

listbox_frame=Frame(root,borderwidth=5, relief=SUNKEN)
listbox_frame.pack(pady=10)
 
listbox=Listbox(listbox_frame)
listbox.pack()
 
listbox.insert(END,"one")
 
for item in ["two","three","four","five"]:
    listbox.insert(END, item)
 
def list_item_selected():
    selection=listbox.curselection()
    if selection:
        print(listbox.get(selection[0]))
        list_box_label.configure(text=listbox.get(selection[0]))
 
list_box_button = Button(listbox_frame,text='list item button', command=list_item_selected)
list_box_button.pack()

リストボックスを作るには、Listbox() を使用します。

リストボックスはフレーム内に配置します。

リストボックスを作成したら、リストボックスにアイテムを挿入していきます。

複数のアイテムを挿入したい場合は、for Loopを使用するとよいでしょう。

ここでは、ボタンを作成しました。

ボタンを押すと、作成した list_item_selected() がアクティブになります。

選択項目にアクセスするには、listbox.curslection()を参照します。

実際に何かが選択されていることを確認するために、if selection:を使用しています。

もしアイテムが選択されていれば、リストボックスのアイテムを参照して、実際のアイテムを取得します。

角括弧でゼロを囲ったのは、項目は通常1桁のタプルであり、これによって桁だけを得ることができるからです。

次に、選択したアイテムでラベルを更新します。

7. Tkinterラジオボタンウィジェット

最後の例として、ラジオボタンについて説明します。

選択されたラジオボタンに応じて、ここに画像が表示されます。

ここでは、山、ボート、キャンプがあります。

3つのラジオボタンを作成しました。

すべてのラジオボタンは、メインのルート・ウィンドウの中に配置されます。

テキストには、「mountains, boating and camping」を指定しました。

すべてのラジオボタンは、1つの変数に関連付けられた値を持つことになります。

Label(root, text="choose icon")
 
def radio_button_func():
    print(rb_icon_var.get())
    if(rb_icon_var.get())==1:
        radio_button_icon.configure(text='u26F0')
    elif rb_icon_var_get()==2:
        radio_button_icon.configure(text='u26F5')
    elif rb_icon_var_get()==3:
        radio_button_icon.configure(text='u26FA')
 
rb_icon_var=IntVar()
 
Radiobutton(root,text="mountains",variable=rb_icon_var, value=1, command=radio_button_func).pack()
Radiobutton(root,text="boating",variable=rb_icon_var, value=2, command=radio_button_func).pack()
Radiobutton(root,text="camping",variable=rb_icon_var, value=3, command=radio_button_func).pack()
 
radio_button_icon = Label(root, text=' ', font=("Helvetica",150))
radio_button_icon.pack()

この場合、一度に1つのラジオボタンしかクリックできないので、ここで割り当てた1、2、3のいずれかのラジオボタンに関連付けられた値が変数に代入されることになります。

ラジオボタンがクリックされると、”radio_button_func() “を起動または呼び出すことになります。

もしこの最初のラジオボタンが山のためにクリックされたら、値1がこの変数に代入され、その値を取得して1に等しいかどうかをテストします。

そして、もし1と等しいなら、mountainsのUnicodeテキスト表現を使用することになります。

結論

最後に、よく使われるウィジェットをいくつか紹介します。

  • ラベル – テキストやメッセージを表示します。
  • ボタン – ツールバー、アプリケーションウィンドウ、ポップアップウィンドウ、ダイアログボックスで使用されます。
  • チェックボタン – オンオフの選択を実装するために使用されます。
  • 入力ウィジェット-1行のテキストを入力または表示するために使用されます。
  • スケールウィジェット – 限定された数値を入力させる場合に、エントリウィジェットの代わりに使用します。
  • リストボックス – 選択肢のリストを表示するために使用されます。
  • ラジオボタン – ユーザーに多くの可能な選択肢を提供し、ユーザーにそのうちの1つだけを選択させる方法として使用されます。

これらの様々なウィジェットを試してみて、下のコメント欄であなたのお気に入りのウィジェットを教えてください!

タイトルとURLをコピーしました