【Python GUI実用サンプル】Tkinter TopLevelとWidget.after()メソッドを使用してToolTip(ツールチップ)を作成する
ツールチップ
ツールチップ(英語:tooltip)とは、グラフィカルユーザインタフェース(GUI)において普及した表現手法・共通要素のひとつ(ウィジェット)である。
これはカーソル(主にマウスポインタ)と連動して使用される。ユーザーがカーソルを何かの項目に合わせたとき、
その項目に覆いかぶさるような形で小さな枠が出現し、その枠内には選択された項目に関する補足情報が表示される。
wikipediaより
サンプルキャプチャ
プログラムサンプルコード
from tkinter import * import tkinter.ttk as ttk class ToolTip: def __init__(self, widget,messeage): self.widget = widget self.tipdialog = None self.id =None self.messeage=messeage self.addEvent() def addEvent(self): self.widget.bind("<Enter>", self.focusAction) self.widget.bind("<Leave>", self.leaveAction) def leaveAction(self, event=None): self.cancel() self.hidetip() def focusAction(self,event): # 今までのをクリアして表示する self.cancel() self.id = self.widget.after(500, self.showTip) def cancel(self): id = self.id self.id = None # 予約されたアクションを取り消す if id: self.widget.after_cancel(id) #説明テキストの表示 def showTip(self): # 既に表示されてる場合は処理の必要なし if self.tipdialog: return # Widget幅の1/3程度右方向に離す x = self.widget.winfo_rootx() + self.widget.winfo_width()/3 # +3与えることでWidgetと少し離す y = self.widget.winfo_rooty() + self.widget.winfo_height()+3 self.tipdialog = Toplevel(self.widget) # □xボタンのバーは必要ない self.tipdialog.wm_overrideredirect(True) # ダイアログの位置を指定 self.tipdialog.wm_geometry("+%d+%d" % (x, y)) # 背景白で左寄せ label = Label(self.tipdialog, text=self.messeage, justify=LEFT, background="#ffffff") label.pack() def hidetip(self): tw = self.tipdialog self.tipdialog = None if tw: tw.destroy() class ToolTipSample(ttk.Frame): def __init__(self ,master): super().__init__(master) label = Label(self, text="ボタンにマウスをかざしてください") label.pack() button = ttk.Button(self,text="toolTip") button.pack() ToolTip(button,"このチップはボタンテスト") ToolTip(label,"このチップはラベルテスト") self.pack() if __name__ == '__main__': master = Tk() master.title("ToolTipSample") master.geometry("300x100") ToolTipSample(master) master.mainloop()
メモ
widget.after
全てのWidgetに共通するメソッド
self.id = self.widget.after(500, self.showTip)
のように指定することで指定ミリ秒(500)後に指定された関数(self.showTip)を実行する。
戻り値としてwidget.after_cancel(実行予約キャンセル)用の識別IDが取得できる
wm_overrideredirect(bool)
拡大縮小(_、□)、閉じる(×)のバーを隠すメソッド
Trueを指定することでバーを隠すことができる
※より詳細な実装を行いたい場合はidleの中にあるtooltip.pyを参考にしてください。