tklib.tkgui.tktooltip のソースコード
"""
Tkinterウィジェットにツールチップ機能を提供するモジュール。
このモジュールは、指定されたTkinterウィジェットにマウスカーソルがホバーした際に
情報テキストを表示するツールチップ機能を提供します。
`tkTooltip` クラスをインスタンス化することで、任意のウィジェットにツールチップを
簡単に追加できます。
関連リンク:
:doc:`tktooltip_usage`
"""
import tkinter as tk
[ドキュメント]
class tkTooltip:
"""
Tkinterウィジェットにツールチップ機能を提供するクラス。
このクラスは、指定されたウィジェットにマウスカーソルが乗るとツールチップを表示し、
カーソルが離れるとツールチップを非表示にする機能を提供します。
ツールチップのテキスト、背景色、前景色をカスタマイズできます。
"""
def __init__(self, widget, text, bg = '#dcfbfe', fg = '#0000ff'):
"""
tkTooltipの新しいインスタンスを初期化します。
:param widget: ツールチップを関連付けるTkinterウィジェット。
:type widget: tkinter.Widget
:param text: ツールチップに表示するテキスト。
:type text: str
:param bg: ツールチップの背景色。デフォルトは'#dcfbfe' (水色)。
:type bg: str, optional
:param fg: ツールチップのテキスト色。デフォルトは'#0000ff' (青)。
:type fg: str, optional
"""
self.widget = widget
self.text = text
self.bg = bg
self.fg = fg
self.tipwindow = None
# トリガーとなるイベントにコールバック関数を設定
self.widget.bind('<Enter>', self.enter)
self.widget.bind('<Leave>', self.leave)
self.widget.bind("<Motion>", self.motion)
[ドキュメント]
def enter(self, event):
"""
マウスカーソルがウィジェットに入ったときにツールチップを表示します。
このメソッドは、'<Enter>'イベントにバインドされており、
ツールチップ表示のトリガーとなります。
:param event: イベントオブジェクト。
:type event: tkinter.Event
"""
self.showtip()
[ドキュメント]
def leave(self, event):
"""
マウスカーソルがウィジェットから離れたときにツールチップを非表示にします。
このメソッドは、'<Leave>'イベントにバインドされており、
ツールチップ非表示のトリガーとなります。
:param event: イベントオブジェクト。
:type event: tkinter.Event
"""
self.hidetip()
[ドキュメント]
def motion(self, event):
"""
マウスカーソルがウィジェット上で移動したときに呼び出されます。
このメソッドは'<Motion>'イベントにバインドされていますが、
現在の実装では何もしません。ツールチップの位置を動的に更新する場合などに使用できます。
:param event: イベントオブジェクト。
:type event: tkinter.Event
"""
# self.hidetip()
# self.showtip()
pass
[ドキュメント]
def showtip(self):
"""
ツールチップウィンドウを作成し表示します。
既存のツールチップウィンドウがあれば破棄し、新たにToplevelウィンドウとして
ツールチップを作成します。このウィンドウはタイトルバーなしで、
関連ウィジェットの右下付近に配置されます。
"""
if self.tipwindow:
self.tipwindow.destroy()
self.tipwindow = tk.Toplevel(self.widget)
self.tipwindow.wm_overrideredirect(True)
self.label = tk.Label(self.tipwindow, text = self.text, justify = tk.LEFT,
background = self.bg, foreground = self.fg, relief = tk.SOLID, borderwidth = 0)
self.label.pack() #ipadx = 1)
x, y, cx, cy = self.widget.bbox('insert')
x += self.widget.winfo_rootx() + 25
y += self.widget.winfo_rooty() + 20
self.tipwindow.wm_geometry(f'+{x}+{y}')
self.tipwindow.deiconify()
[ドキュメント]
def hidetip(self):
"""
ツールチップウィンドウを破棄して非表示にします。
ツールチップウィンドウが存在する場合、それを破棄します。
"""
# self.tipwindow.withdraw()
if self.tipwindow:
self.tipwindow.destroy()
[ドキュメント]
def main():
"""
ツールチップ機能の動作を示すサンプルアプリケーションを実行します。
この関数はTkinterのルートウィンドウを作成し、ラベルウィジェットに
`tkTooltip` クラスを使用してツールチップを追加する例を示します。
"""
root = tk.Tk()
label = tk.Label(root, text = 'Hover on the button')
label.pack(pady = 50)
tip = Tooltip(label, 'Button')
root.mainloop()
if __name__ == "__main__":
main()