【Python】TkinterのButtonウィジェットで絶対に押してしまうボタンを配置する

こんにちは。関東の大学に通う大学生ミンチ(@programminchi)です。今回はPythonのライブラリ、Tkinterを使ってタイトルにもある通り、絶対に押してしまうボタンを作っていきましょう。

 

 

Tkinterの基礎

TkinterはGUIアプリを作るためのライブラリですが、記述の仕方には基本的な形があります。

基本的な記述の仕方は以下の記事で詳しく解説しています。

 

【Python】Tkinterで自分好みの図形を描画する

 

ここではざっくりと説明していきます。

まず以下を見てください。

 

import tkinter as tk
win = tk.Tk()
#ここでウィジェットの設定と配置
win.mainloop()

1行目ではTkinterライブラリをtkという名前でインポートしています。

2行目ではwinというメインウィンドウを生成しています。

 

ウィンドウを設置したらウィジェット(ボタンなど)と呼ばれる部品をウィンドウに配置していきます。

最後の行ではイベントを処理しています。

 

 

Buttonウィジェットを配置する

まずはTkinterで作ったウィンドウ上にボタンを生成していきましょう。

 

基本形

まずはボタンを作る前に上で学んだTkinterの基礎を参考にしてメインウィンドウを作っていきましょう。

以下のようにしてください。

 

win = tk.Tk()
win.title('押すなよ! 絶対に押すなよ!')
win.geometry('450x300')
#ここでボタンの設定と配置をする
win.mainloop()

まず上で説明した通り、1行目ではウィンドウを生成しています。

2行目ではウィンドウのタイトルとして表示する文字を設定しています。

3行目ではgeometry関数をウィンドウに適用して、ウィンドウの横×縦の大きさを決めています。

最後にmainloop関数でイベント処理も忘れずにしてください。

 

実際にButtonウィジェットを配置しよう

それでは上のコードで穴が開いている部分にボタンを設置するためのプログラムを書きます。

以下のようにしてください。

button = tk.Button(win, text='押すなよ!',command=osunayo)
button.pack()

ここでButtonウィジェットの引数(かっこの中身)を見てください。

第1引数はこのボタンを設置したいウィンドウです。

第2引数はボタン上に表示したい文字列です。分かってると思いますが、まだ押さないでくださいね!

第3引数のcommandとはボタンを押した時に呼び出したい関数(コールバック関数)を指定します。osunayo関数はこれから作っていきます。

 

2行目ではpack関数によってウィンドウ上にボタンを設置しています。

 

 

ボタンを押した後にPILモジュールで画像表示

それでは次にボタンが押された時に呼び出される関数(コールバック関数)を設定していきます。

ここではボタンが押されたらある画像が表示されるような関数を設定していきます。

 

PILモジュールをインポートする

Tkinterのウィンドウに画像を表示していくために、まずはPILモジュールをインポートしていきます。

PILモジュールとはPythonに、色々な形式の画像を扱う機能を提供しているライブラリです。

以下のようにインポートしてください。

 

from PIL import ImageTk

PILモジュールの中のImageTkを使うので、上のようにします。

 

コールバック関数を作ろう

それではボタンが押された時にやる処理が記述された関数を作っていきます。

以下のようにしてください。

 

def osunayo():
    canvas = tk.Canvas(bg='black', width=450, height=300)
    canvas.pack()
    img = ImageTk.PhotoImage(file='Pictures/osunayo.jpg')
    canvas.create_image(225,150,image=img)
    win.mainloop()

関数名はosunayoです。特に意味はありません。

関数の中ではまず、Canvasウィジェットによってキャンバスを配置していきます。(画像はウィンドウに直接貼り付けるのではなく、キャンバスを作ってからその上に貼り付ける)

そして、キャンバス(canvas)を作ったらpack関数によってウィンドウ上に配置しています。

 

次にインポートしたImageTk内にある、PhotoImageの引数にあらかじめ用意した画像ファイルを指定します。

最後にキャンバス上にcanvas_create関数によって先ほど指定した画像(img)を配置します。

 

 

全体のコードと実行結果

それではこの記事のタイトルでもあった、絶対に押してしまうボタンを押すとどうなるのでしょうか?(もちろん僕は押すことを推奨しません。)

その前にここまで書いたコードをまとめていきましょう。

 

import tkinter as tk
from PIL import ImageTk

def osunayo():
    canvas = tk.Canvas(bg='black', width=450, height=300)
    canvas.pack()
    img = ImageTk.PhotoImage(file='Pictures/osunayo.jpg')
    canvas.create_image(225,150,image=img)
    win.mainloop()

win = tk.Tk()
win.title('押すなよ! 絶対に押すなよ!')
win.geometry('450x300')
button = tk.Button(win, text='押すなよ!',command=osunayo)
button.pack()
win.mainloop()

 

これを実行すると次のような画面が出てくるはずです。

 

さあ、ボタンがしっかり配置されています。

もちろん押したりしませんよね?

絶対に押さないでくださいね?

 

 

 

ほらそうやってすぐ押すー!!

あれだけ押すなって言ったのに!(これやりたかっただけww)

 

まとめ

ここまでくだらない茶番に付き合ってくれてありがとうございます。

最後の方はどうでもいいので無視しておいてください。(とは言ってももう見てしまったと思いますが)

まあしかし、TkinterでGUIアプリを作っていく上で、ボタンとボタンを押した後の処理というのは結構どんなアプリでも使うものだと思うのでしっかり覚えておいてください。

 

今後も定期的にコンピュータ系の記事を発信していくので是非、興味のある人はツイッターの方もフォローお願いします!!


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です