본문 바로가기
GUI 튜토리얼/tkinter 한꼬집씩만 따라해보기

30. 위젯에 툴팁 붙이기

by 일코 2022. 11. 28.
반응형

이전 포스팅

2022.11.28 - [기타/tkinter 한꼬집씩만 따라해보기] - 29. 스핀박스 위젯 추가하기

 

29. 스핀박스 위젯 추가하기

이전 포스팅 2022.11.28 - [기타/tkinter 한꼬집씩만 따라해보기] - 28. 메인윈도우에 아이콘 추가하기 28. 메인윈도우에 아이콘 추가하기 이전 포스팅 2022.11.27 - [기타/tkinter 한꼬집씩만 따라해보기] - 27

martinii.fun


 

이번 포스팅에서는 : 위젯에 툴팁 붙이기

지금까지 여러가지 위젯과 레이아웃, 이벤트사용방법 등에 대해 간략히 알려드렸습니다.

이번에 소개해드릴 기능은 바로 "툴팁"입니다.

툴팁이 뭔지 모르시는 분들도, 은연중에 이런저런 앱에서 많이 봐 오셨을 것이라 생각합니다.

아래와 같이 엔트리 등의 위젯에 부가설명을 넣을 수 있는 기능입니다.

tkinter에서는 기본적으로 툴팁을 제공하지는 않습니다.

대신 유능한 프로그래머들이 tkinter에서 간편하게 툴팁을 생성할 수 있도록 

서드파티 모듈을 만들어 두었습니다.

tkinter-tooltip · PyPI

 

tkinter-tooltip

An easy and customisable ToolTip implementation for Tkinter

pypi.org

커맨드프롬프트에서 pip install tkinter-tooltip으로 tktooltip 모듈을 설치합니다.

사용방법은 아래와 같습니다.

간략한 예시코드를 보여드리겠습니다.

import tkinter as tk
from tktooltip import ToolTip

win = tk.Tk()
win.geometry("200x80")

button = tk.Button(win, text="아무 기능 없는 버튼")
button.grid(row=0, column=0)

ToolTip(button, bg="#ffffe0", msg="정말 아무 기능 없는 버튼임", delay=0.1)

win.mainloop()

실행해보면,

이렇게 서드파티 모듈의 힘을 빌려서

툴팁을 간편하게 붙일 수 있습니다.

 

부록

아래와 같은 코드로 번거롭지만 직접 툴팁을 제작해서 사용할 수 있기는 합니다.

더보기
import tkinter as tk


class ToolTip:
    def __init__(self, widget, tip_text=None):
        self.widget = widget
        self.tip_text = tip_text
        widget.bind('<Enter>', self.mouse_enter)
        widget.bind('<Leave>', self.mouse_leave)

    def mouse_enter(self, _event):
        self.show_tooltip()

    def mouse_leave(self, _event):
        self.hide_tooltip()

    def show_tooltip(self):
        if self.tip_text:
            x_left = self.widget.winfo_rootx()  # get widget top-left coordinates
            y_top = self.widget.winfo_rooty() - 18  # place tooltip above widget or it flickers

            self.tip_window = tk.Toplevel(self.widget)  # create Toplevel window; parent=widget
            self.tip_window.overrideredirect(True)  # remove surrounding toolbar window
            self.tip_window.geometry(f"+{x_left}+{y_top}")  # position tooltip

            label = tk.Label(self.tip_window, text=self.tip_text, justify=tk.LEFT,
                             background="#ffffe0", relief=tk.SOLID, borderwidth=1,
                             font=("tahoma", "8", "normal"))
            label.pack(ipadx=1)

    def hide_tooltip(self):
        if self.tip_window:
            self.tip_window.destroy()


win = tk.Tk()
win.geometry("250x80")
label = tk.Label(win, text="레이블에 마우스를 올리면 \n툴팁이 짜잔~")
label.grid(column=0, row=0, sticky="we")

ToolTip(label, '툴팁이 짜잔~ 하고 \n나타납니다.')

win.mainloop()

 

디테일한 세팅이 가능할 것 같다는 장점이 있을 것처럼 느껴지지만
tktooltip에서도 동급의 디테일한 세팅이 가능합니다.

 

다음 포스팅

2022.11.28 - [기타/tkinter 한꼬집씩만 따라해보기] - 31. 커스텀 테마 적용하기

 

31. 커스텀 테마 적용하기

이전 포스팅 2022.11.28 - [기타/tkinter 한꼬집씩만 따라해보기] - 30. 위젯에 툴팁 붙이기 30. 위젯에 툴팁 붙이기 이전 포스팅 2022.11.28 - [기타/tkinter 한꼬집씩만 따라해보기] - 29. 스핀박스 위젯 추가

martinii.fun

 

반응형

댓글0