tkinterでもwebサイトのようにテキストにリンクを付けることってできるのかな、、、?
いいところに気が付きましたね!
実はtkinter上に表示させたテキストにもwebサイトのようにリンクを付けることができるんです!
でもたぶん難しいですよね。。。
僕に理解できるかどうか。。。
まったく心配はいりません!
実はプログラム上に一行追加するだけでリンクを付けることができるんです!
分かりやすく解説していくので安心してください~!
リンクを紐づけることができればWEBアプリケーションの幅は広がると思います!
本記事では、テキストラベルにリンクを貼り付ける方法やlambda式の用法を分かりやすく解説していますので是非参考にしてみて下さい!
では早速本題に行きましょう!
テキストラベルにリンクを貼る方法
では、実際にテキストラベルにリンク付けてみましょう。
プログラムは以下のように記載します。
今回は、本ブログのURLを用いてハイパーリンク付きラベルを作成してみます。
import tkinter as tk
import webbrowser
def main():
root=tk.Tk()
root.geometry("100x50")
link=tk.Label(root,text="とものプログブログ",fg="blue",cursor="hand1")
link.pack()
link.bind("<Button-1>",lambda e:link_click("https://tomtom-stock.com"))
root.mainloop()
def link_click(url):
webbrowser.open_new(url)
if __name__=="__main__":
main()
そして表示されたテキストをクリックしてみて下さい。
すると、ブラウザが立ち上がり本ホームページが表示されると思います!
まだこの段階ではリンクで飛べるようになりましたがアンダーバーがなくてリンクだと認識しづらいですね。
このテキストにリンクを付ける方法も後半に解説しています!
プログラムの解説
ではこのプログラムについて解説していきたいと思います~!
まずは、リンク先のwebブラウザーにアクセスできるようにするために webbrowser をインポートする必要があります。
import webbrowser
そして作成したラベルインスタンスに .bind() メソッドを用いてクリックされたときのイベントを追加します。
今回はマウスで左クリックされたときに、後述する callback関数として定義した link_click() 関数 が実行できるようにイベントとして<Button-1>を用いています。
(右クリック時に処理したい場合は<Button-2>を選択)
lambda式
そしてcallback関数には、lambda式を用いて引数としてリンク付けしたいURLを記載しています。
lambda式は、コマンドに引数を渡すことができる便利な式です!
link.bind("<Button-1>",lambda e:link_click("https://tomtom-stock.com"))
#lambdaなしの場合
link.bind("<Button-1>",link_click("https://tomtom-stock.com"))
最後に、上記のcallback関数である link_click() 関数を定義していきます。
webbrowser.open_new() でブラウザを新規で立ち上げます。ここで立ち上げられるのは、先ほどlambda式に記載したURLになります!
def link_click(url):
webbrowser.open_new(url)
リンクしたラベルにアンダーバーを入れる
上記プログラムでは、リンク付けしたラベルにアンダーバーが表示されていません。
ですが、実際にリンク付けしたラベルには、アンダーバーが表示されていた方がリンクであることが分かりやすいですよね。
プログラムを、以下のように記載するとアンダーバーを表示させることができます!
import tkinter as tk
import webbrowser
import tkinter.font
def main():
root=tk.Tk()
root.geometry("100x50")
label_font=tkinter.font.Font(size=10,underline=True)
link=tk.Label(root,text="とものプログブログ",fg="blue",cursor="hand1",font=label_font)
link.pack()
link.bind("<Button-1>",lambda e:link_click("https://tomtom-stock.com"))
root.mainloop()
def link_click(url):
webbrowser.open_new(url)
if __name__=="__main__":
main()
プログラムの解説
アンダーバーを表示させるためには、tkinter.font をインポートします。
import tkinter.font
次に、作成したいフォントの書式の型を tkinter.font.Font を用いて定義します。そして作成した型と適用したいラベルを「 font= 」で紐づけることで書式を変更できます!
今回はアンダーバーを付けたかったので underline=True を用いています。
label_font=tkinter.font.Font(size=10,underline=True)
link=tk.Label(root,text="とものプログブログ",fg="blue",cursor="hand1",font=label_font)
やっぱりリンクは青文字でアンダーバーを入れてあげないと分かりづらいですよね!
以上となります。最後まで見ていただきありがとうございました!
別記事で、テキストラベルのフォント(フォントの種類やアンダーバー、斜体など)を設定する方法を解説していますので是非参考にしてみて下さい!
プログラミングをもっと頑張ろうと考えている人はコチラを参考にしてみてください!