SILENT KILLERPanel

Current Path: > > opt > > alt > python36 > lib64 > python3.6 > idlelib


Operation   : Linux premium131.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64
Software     : Apache
Server IP    : 162.0.232.56 | Your IP: 216.73.216.111
Domains      : 1034 Domain(s)
Permission   : [ 0755 ]

Files and Folders in: //opt//alt/python36/lib64/python3.6/idlelib

NameTypeSizeLast ModifiedActions
Icons Directory - -
__pycache__ Directory - -
idle_test Directory - -
CREDITS.txt File 1866 bytes September 04 2021 03:49:41.
ChangeLog File 56360 bytes September 04 2021 03:49:41.
HISTORY.txt File 10312 bytes September 04 2021 03:49:41.
NEWS.txt File 39839 bytes September 04 2021 03:49:41.
NEWS2x.txt File 27172 bytes September 04 2021 03:49:41.
README.txt File 9592 bytes September 04 2021 03:49:41.
TODO.txt File 8478 bytes September 04 2021 03:49:41.
__init__.py File 396 bytes April 17 2024 17:19:35.
__main__.py File 159 bytes April 17 2024 17:19:35.
_pyclbr.py File 15199 bytes April 17 2024 17:19:35.
autocomplete.py File 9324 bytes April 17 2024 17:19:35.
autocomplete_w.py File 19829 bytes April 17 2024 17:19:35.
autoexpand.py File 3216 bytes April 17 2024 17:19:35.
browser.py File 8281 bytes April 17 2024 17:19:35.
calltip.py File 6067 bytes April 17 2024 17:19:35.
calltip_w.py File 7111 bytes April 17 2024 17:19:35.
codecontext.py File 10490 bytes April 17 2024 17:19:35.
colorizer.py File 11275 bytes April 17 2024 17:19:35.
config-extensions.def File 2266 bytes September 04 2021 03:49:41.
config-highlight.def File 2687 bytes September 04 2021 03:49:41.
config-keys.def File 10775 bytes September 04 2021 03:49:41.
config-main.def File 3128 bytes September 04 2021 03:49:41.
config.py File 38878 bytes April 17 2024 17:19:35.
config_key.py File 13408 bytes April 17 2024 17:19:35.
configdialog.py File 101057 bytes April 17 2024 17:19:35.
debugger.py File 19097 bytes April 17 2024 17:19:35.
debugger_r.py File 12140 bytes April 17 2024 17:19:35.
debugobj.py File 4055 bytes April 17 2024 17:19:35.
debugobj_r.py File 1082 bytes April 17 2024 17:19:35.
delegator.py File 1043 bytes April 17 2024 17:19:35.
dynoption.py File 2017 bytes April 17 2024 17:19:35.
editor.py File 67275 bytes April 17 2024 17:19:35.
extend.txt File 3642 bytes September 04 2021 03:49:41.
filelist.py File 3896 bytes April 17 2024 17:19:35.
grep.py File 6742 bytes April 17 2024 17:19:35.
help.html File 55114 bytes September 04 2021 03:49:41.
help.py File 11325 bytes April 17 2024 17:19:35.
help_about.py File 8981 bytes April 17 2024 17:19:35.
history.py File 4043 bytes April 17 2024 17:19:35.
hyperparser.py File 12882 bytes April 17 2024 17:19:35.
idle.py File 454 bytes April 17 2024 17:19:35.
idle.pyw File 570 bytes September 04 2021 03:49:41.
iomenu.py File 20734 bytes April 17 2024 17:19:35.
macosx.py File 9660 bytes April 17 2024 17:19:35.
mainmenu.py File 3703 bytes April 17 2024 17:19:35.
multicall.py File 18648 bytes April 17 2024 17:19:35.
outwin.py File 5808 bytes April 17 2024 17:19:35.
paragraph.py File 7167 bytes April 17 2024 17:19:35.
parenmatch.py File 7204 bytes April 17 2024 17:19:35.
pathbrowser.py File 3193 bytes April 17 2024 17:19:35.
percolator.py File 3130 bytes April 17 2024 17:19:35.
pyparse.py File 20118 bytes April 17 2024 17:19:35.
pyshell.py File 57728 bytes April 17 2024 17:19:35.
query.py File 12434 bytes April 17 2024 17:19:35.
redirector.py File 6875 bytes April 17 2024 17:19:35.
replace.py File 7502 bytes April 17 2024 17:19:35.
rpc.py File 21137 bytes April 17 2024 17:19:35.
rstrip.py File 868 bytes April 17 2024 17:19:35.
run.py File 17272 bytes April 17 2024 17:19:35.
runscript.py File 7841 bytes April 17 2024 17:19:35.
scrolledlist.py File 4458 bytes April 17 2024 17:19:35.
search.py File 3164 bytes April 17 2024 17:19:35.
searchbase.py File 7451 bytes April 17 2024 17:19:35.
searchengine.py File 7472 bytes April 17 2024 17:19:35.
squeezer.py File 13308 bytes April 17 2024 17:19:35.
stackviewer.py File 4454 bytes April 17 2024 17:19:35.
statusbar.py File 1441 bytes April 17 2024 17:19:35.
textview.py File 6121 bytes April 17 2024 17:19:35.
tooltip.py File 6486 bytes April 17 2024 17:19:35.
tree.py File 15089 bytes April 17 2024 17:19:35.
undo.py File 11047 bytes April 17 2024 17:19:35.
window.py File 2588 bytes April 17 2024 17:19:35.
zoomheight.py File 1340 bytes April 17 2024 17:19:35.
zzdummy.py File 961 bytes April 17 2024 17:19:35.

Reading File: //opt//alt/python36/lib64/python3.6/idlelib/tooltip.py

"""Tools for displaying tool-tips.

This includes:
 * an abstract base-class for different kinds of tooltips
 * a simple text-only Tooltip class
"""
from tkinter import *


class TooltipBase(object):
    """abstract base class for tooltips"""

    def __init__(self, anchor_widget):
        """Create a tooltip.

        anchor_widget: the widget next to which the tooltip will be shown

        Note that a widget will only be shown when showtip() is called.
        """
        self.anchor_widget = anchor_widget
        self.tipwindow = None

    def __del__(self):
        self.hidetip()

    def showtip(self):
        """display the tooltip"""
        if self.tipwindow:
            return
        self.tipwindow = tw = Toplevel(self.anchor_widget)
        # show no border on the top level window
        tw.wm_overrideredirect(1)
        try:
            # This command is only needed and available on Tk >= 8.4.0 for OSX.
            # Without it, call tips intrude on the typing process by grabbing
            # the focus.
            tw.tk.call("::tk::unsupported::MacWindowStyle", "style", tw._w,
                       "help", "noActivates")
        except TclError:
            pass

        self.position_window()
        self.showcontents()
        self.tipwindow.update_idletasks()  # Needed on MacOS -- see #34275.
        self.tipwindow.lift()  # work around bug in Tk 8.5.18+ (issue #24570)

    def position_window(self):
        """(re)-set the tooltip's screen position"""
        x, y = self.get_position()
        root_x = self.anchor_widget.winfo_rootx() + x
        root_y = self.anchor_widget.winfo_rooty() + y
        self.tipwindow.wm_geometry("+%d+%d" % (root_x, root_y))

    def get_position(self):
        """choose a screen position for the tooltip"""
        # The tip window must be completely outside the anchor widget;
        # otherwise when the mouse enters the tip window we get
        # a leave event and it disappears, and then we get an enter
        # event and it reappears, and so on forever :-(
        #
        # Note: This is a simplistic implementation; sub-classes will likely
        # want to override this.
        return 20, self.anchor_widget.winfo_height() + 1

    def showcontents(self):
        """content display hook for sub-classes"""
        # See ToolTip for an example
        raise NotImplementedError

    def hidetip(self):
        """hide the tooltip"""
        # Note: This is called by __del__, so careful when overriding/extending
        tw = self.tipwindow
        self.tipwindow = None
        if tw:
            try:
                tw.destroy()
            except TclError:
                pass


class OnHoverTooltipBase(TooltipBase):
    """abstract base class for tooltips, with delayed on-hover display"""

    def __init__(self, anchor_widget, hover_delay=1000):
        """Create a tooltip with a mouse hover delay.

        anchor_widget: the widget next to which the tooltip will be shown
        hover_delay: time to delay before showing the tooltip, in milliseconds

        Note that a widget will only be shown when showtip() is called,
        e.g. after hovering over the anchor widget with the mouse for enough
        time.
        """
        super(OnHoverTooltipBase, self).__init__(anchor_widget)
        self.hover_delay = hover_delay

        self._after_id = None
        self._id1 = self.anchor_widget.bind("<Enter>", self._show_event)
        self._id2 = self.anchor_widget.bind("<Leave>", self._hide_event)
        self._id3 = self.anchor_widget.bind("<Button>", self._hide_event)

    def __del__(self):
        try:
            self.anchor_widget.unbind("<Enter>", self._id1)
            self.anchor_widget.unbind("<Leave>", self._id2)
            self.anchor_widget.unbind("<Button>", self._id3)
        except TclError:
            pass
        super(OnHoverTooltipBase, self).__del__()

    def _show_event(self, event=None):
        """event handler to display the tooltip"""
        if self.hover_delay:
            self.schedule()
        else:
            self.showtip()

    def _hide_event(self, event=None):
        """event handler to hide the tooltip"""
        self.hidetip()

    def schedule(self):
        """schedule the future display of the tooltip"""
        self.unschedule()
        self._after_id = self.anchor_widget.after(self.hover_delay,
                                                  self.showtip)

    def unschedule(self):
        """cancel the future display of the tooltip"""
        after_id = self._after_id
        self._after_id = None
        if after_id:
            self.anchor_widget.after_cancel(after_id)

    def hidetip(self):
        """hide the tooltip"""
        try:
            self.unschedule()
        except TclError:
            pass
        super(OnHoverTooltipBase, self).hidetip()


class Hovertip(OnHoverTooltipBase):
    "A tooltip that pops up when a mouse hovers over an anchor widget."
    def __init__(self, anchor_widget, text, hover_delay=1000):
        """Create a text tooltip with a mouse hover delay.

        anchor_widget: the widget next to which the tooltip will be shown
        hover_delay: time to delay before showing the tooltip, in milliseconds

        Note that a widget will only be shown when showtip() is called,
        e.g. after hovering over the anchor widget with the mouse for enough
        time.
        """
        super(Hovertip, self).__init__(anchor_widget, hover_delay=hover_delay)
        self.text = text

    def showcontents(self):
        label = Label(self.tipwindow, text=self.text, justify=LEFT,
                      background="#ffffe0", relief=SOLID, borderwidth=1)
        label.pack()


def _tooltip(parent):  # htest #
    top = Toplevel(parent)
    top.title("Test tooltip")
    x, y = map(int, parent.geometry().split('+')[1:])
    top.geometry("+%d+%d" % (x, y + 150))
    label = Label(top, text="Place your mouse over buttons")
    label.pack()
    button1 = Button(top, text="Button 1 -- 1/2 second hover delay")
    button1.pack()
    Hovertip(button1, "This is tooltip text for button1.", hover_delay=500)
    button2 = Button(top, text="Button 2 -- no hover delay")
    button2.pack()
    Hovertip(button2, "This is tooltip\ntext for button2.", hover_delay=None)


if __name__ == '__main__':
    from unittest import main
    main('idlelib.idle_test.test_tooltip', verbosity=2, exit=False)

    from idlelib.idle_test.htest import run
    run(_tooltip)

SILENT KILLER Tool