Tkinter

[Python/tkinter] テキストラベルにリンクをつける方法

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()

label-link-image1

そして表示されたテキストをクリックしてみて下さい。
すると、ブラウザが立ち上がり本ホームページが表示されると思います!

すらいむ管理人

まだこの段階ではリンクで飛べるようになりましたがアンダーバーがなくてリンクだと認識しづらいですね。

このテキストにリンクを付ける方法も後半に解説しています!

プログラムの解説

すらいむ管理人

ではこのプログラムについて解説していきたいと思います~!

まずは、リンク先の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_click() をcallback関数ではなく、単に関数として認識してしまうため、プログラムを実行しただけでlink_click() が実行されブラウザが立ち上がってしまいます

 #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()

label-link-image2

プログラムの解説

アンダーバーを表示させるためには、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)

すらいむ管理人

やっぱりリンク青文字でアンダーバーを入れてあげないと分かりづらいですよね!

以上となります。最後まで見ていただきありがとうございました!

別記事で、テキストラベルのフォント(フォントの種類やアンダーバー、斜体など)を設定する方法を解説していますので是非参考にしてみて下さい!

プログラミングをもっと頑張ろうと考えている人はコチラを参考にしてみてください!

プログラミング学習に役立つガジェット厳選4選!筆者が実際に使ってみて有用だと感じた、プログラミングに役立つガジェットを紹介しています!プログラミングされている方には是非とも読んでみてほしい記事です!...