この記事は、JavaとPythonを基礎から学びたい私のための Advent Calendar 2024の18日目の記事です。
アプリっぽくしていきます
ボタンを押したときの動作
ボタンなので、押したときに何かが起こるようにします。まずはボタンを押したときに文字が出てくるようにします。
commandを使う方法
def ClickEvent():
label2=tk.Label(text='ボタン押したな',foreground='#00fa9a')
label2.pack(padx=30,pady=10)
button=tk.Button(text='ボタン',command=ClickEvent)
button.pack(padx=30,pady=20)
ボタンを押すとbuttonの()内のcommandが発動して、その上のClickEventが呼ばれます。今回はボタンが押されたときにメッセージを出すようにしています。
ちなみにdefはdefine(定義)のようです。Tabキーで右にずらした(インデント)文章がdefの内容です。
bindを使う方法
ボタンを押したときのイベントは、bindを使うことでも設定できるみたいです。こちらは先ほどのcommandと違い、クリックの種類やマウスカーソルが対象物上に存在するかなど様々なイベントを起こせます。
ただしtkinterのボタンでは、クリックのイベントが右クリックしかできませんでした。マウスカーソルが対象物内に入ってきたかなどはうまく動作するようです。
追加した文です
def leftClick(event):
# Left=Left+1
label2=tk.Label(text='左')
label2.pack(padx=10,pady=20)
def mouseEnter(event):
#Right=Right+1
label3=tk.Label(text='マウスカーソルがやってきました')
label3.pack(padx=50,pady=20)
button=tk.Button(text='クリックかカーソル移動')
button.bind("<Button-1>",leftClick)
button.bind("<Enter>",mouseEnter)
button.pack(padx=30,pady=30)
bindの()内、,の左側がイベントの種類(ボタンが押された、マウスカーソルが来たなど)です。"<>"で囲みます。右側はイベントが発生したときに呼ばれるものになります。
tkinterで動かせるもの一覧
イベントの種類 | 説明 |
---|---|
Button-1 | 左クリック(押し込んだ時) |
ButtonRelease-1 | 左クリック後、ボタンが離れた時 |
Enter | マウスカーソルが対象物に来た時 |
Leave | マウスカーソルが対象物から離れた時 |
Motion | マウスカーソルが対象物上で動いた時 |
tkinterで使う以外であれば、うえで紹介した以外にもいろいろなものがあるようです。
これでボタンを動かすことができます。
文字入力できるようにする
文字も行けるようです。これができると、例えば数字を入力してボタンを押すと瞬時に計算してくれる電卓のようなものも作れそうです。
Text()を使用する
txt=tk.Text()
txt.pack(padx=30,pady=60)
これで文字が入力できるフィールドが用意されます。また、入力された文字は
inputtxt=txt.get(1.0,tk.END)
こんな感じでgetを用いることで取得可能なようです
このgetの文は必要なときに使ってください。getされるタイミングは、この処理が行われる瞬間でした。テキストエリアを作成したときに一緒に書いても反応しません。
自分の場合は、ボタンが押されたときに文字がgetされるようにしました。
txt=tk.Text()
txt.pack(padx=30,pady=60)
def leftClick(event):
inputtxt=txt.get(1.0,tk.END)
label2=tk.Label(text='入力された文字:'+inputtxt)
label2.pack(padx=10,pady=20)
こんな感じです。ちなみに()内、","の左側の1.0はget開始位置です。ここでは1.0なので1行目0文字目という意味です。","の左側は終了位置のようです。ENDで最後まで受け付けてくれるみたいです。
Entry()を使用する
先ほどのtextとは異なり、1行の入力ができるものです。webサイトとかによくある、名前入力欄みたいなものです。
txt=tk.Entry(window)
txt.pack(padx=30,pady=60)
Entry()の()内、windowは最初に設定したwindow=tk.Tk()のものです。なくても動くようですが、ないよりはあった方がいいと思います。
文字を取得する場合は、
inputtxt=txt.get()
先ほどと同じくgetで行けました。今回は()内が空であっても取得してくれるみたいです。
まとめ
ボタンを押したときの処理の仕方にもさまざまな種類がある。また、文字を入力したり入力された文字を受け取ったりする処理の仕方もまたいろいろ存在していた。
参考文献