SILENT KILLERPanel

Current Path: > > opt > alt > python37 > lib64 > python3.7 > > 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/python37/lib64/python3.7//idlelib

NameTypeSizeLast ModifiedActions
Icons Directory - -
__pycache__ Directory - -
idle_test Directory - -
CREDITS.txt File 1866 bytes June 05 2023 20:45:13.
ChangeLog File 56360 bytes June 05 2023 20:45:13.
HISTORY.txt File 10312 bytes June 05 2023 20:45:13.
NEWS.txt File 48791 bytes June 05 2023 20:45:13.
NEWS2x.txt File 27172 bytes June 05 2023 20:45:13.
README.txt File 9599 bytes June 05 2023 20:45:13.
TODO.txt File 8478 bytes June 05 2023 20:45:13.
__init__.py File 396 bytes April 17 2024 17:36:04.
__main__.py File 159 bytes April 17 2024 17:36:04.
autocomplete.py File 8954 bytes April 17 2024 17:36:04.
autocomplete_w.py File 20109 bytes April 17 2024 17:36:04.
autoexpand.py File 3216 bytes April 17 2024 17:36:04.
browser.py File 8314 bytes April 17 2024 17:36:04.
calltip.py File 6318 bytes April 17 2024 17:36:04.
calltip_w.py File 7158 bytes April 17 2024 17:36:04.
codecontext.py File 11326 bytes April 17 2024 17:36:04.
colorizer.py File 12992 bytes April 17 2024 17:36:04.
config-extensions.def File 2266 bytes June 05 2023 20:45:13.
config-highlight.def File 2864 bytes June 05 2023 20:45:13.
config-keys.def File 10910 bytes June 05 2023 20:45:13.
config-main.def File 3168 bytes June 05 2023 20:45:13.
config.py File 38173 bytes April 17 2024 17:36:04.
config_key.py File 14465 bytes April 17 2024 17:36:04.
configdialog.py File 104524 bytes April 17 2024 17:36:04.
debugger.py File 19104 bytes April 17 2024 17:36:04.
debugger_r.py File 12140 bytes April 17 2024 17:36:04.
debugobj.py File 4055 bytes April 17 2024 17:36:04.
debugobj_r.py File 1082 bytes April 17 2024 17:36:04.
delegator.py File 1043 bytes April 17 2024 17:36:04.
dynoption.py File 2017 bytes April 17 2024 17:36:04.
editor.py File 65614 bytes April 17 2024 17:36:04.
extend.txt File 3642 bytes June 05 2023 20:45:13.
filelist.py File 3896 bytes April 17 2024 17:36:04.
format.py File 15777 bytes April 17 2024 17:36:04.
grep.py File 7479 bytes April 17 2024 17:36:04.
help.html File 62214 bytes June 05 2023 20:45:13.
help.py File 11734 bytes April 17 2024 17:36:04.
help_about.py File 8981 bytes April 17 2024 17:36:04.
history.py File 4043 bytes April 17 2024 17:36:04.
hyperparser.py File 12883 bytes April 17 2024 17:36:04.
idle.py File 454 bytes April 17 2024 17:36:04.
idle.pyw File 570 bytes June 05 2023 20:45:13.
iomenu.py File 20632 bytes April 17 2024 17:36:04.
macosx.py File 9662 bytes April 17 2024 17:36:04.
mainmenu.py File 3918 bytes April 17 2024 17:36:04.
multicall.py File 18648 bytes April 17 2024 17:36:04.
outwin.py File 5788 bytes April 17 2024 17:36:04.
parenmatch.py File 7204 bytes April 17 2024 17:36:04.
pathbrowser.py File 3193 bytes April 17 2024 17:36:04.
percolator.py File 3130 bytes April 17 2024 17:36:04.
pyparse.py File 19947 bytes April 17 2024 17:36:04.
pyshell.py File 57247 bytes April 17 2024 17:36:04.
query.py File 14898 bytes April 17 2024 17:36:04.
redirector.py File 6875 bytes April 17 2024 17:36:04.
replace.py File 9889 bytes April 17 2024 17:36:04.
rpc.py File 21137 bytes April 17 2024 17:36:04.
run.py File 20293 bytes April 17 2024 17:36:04.
runscript.py File 8781 bytes April 17 2024 17:36:04.
scrolledlist.py File 4465 bytes April 17 2024 17:36:04.
search.py File 5566 bytes April 17 2024 17:36:04.
searchbase.py File 7537 bytes April 17 2024 17:36:04.
searchengine.py File 7472 bytes April 17 2024 17:36:04.
sidebar.py File 13585 bytes April 17 2024 17:36:04.
squeezer.py File 12840 bytes April 17 2024 17:36:04.
stackviewer.py File 4454 bytes April 17 2024 17:36:04.
statusbar.py File 1441 bytes April 17 2024 17:36:04.
textview.py File 6813 bytes April 17 2024 17:36:04.
tooltip.py File 6565 bytes April 17 2024 17:36:04.
tree.py File 16357 bytes April 17 2024 17:36:04.
undo.py File 11046 bytes April 17 2024 17:36:04.
window.py File 2616 bytes April 17 2024 17:36:04.
zoomheight.py File 4203 bytes April 17 2024 17:36:04.
zzdummy.py File 961 bytes April 17 2024 17:36:04.

Reading File: //opt/alt/python37/lib64/python3.7//idlelib/calltip_w.py

"""A call-tip window class for Tkinter/IDLE.

After tooltip.py, which uses ideas gleaned from PySol.
Used by calltip.py.
"""
from tkinter import Label, LEFT, SOLID, TclError

from idlelib.tooltip import TooltipBase

HIDE_EVENT = "<<calltipwindow-hide>>"
HIDE_SEQUENCES = ("<Key-Escape>", "<FocusOut>")
CHECKHIDE_EVENT = "<<calltipwindow-checkhide>>"
CHECKHIDE_SEQUENCES = ("<KeyRelease>", "<ButtonRelease>")
CHECKHIDE_TIME = 100  # milliseconds

MARK_RIGHT = "calltipwindowregion_right"


class CalltipWindow(TooltipBase):
    """A call-tip widget for tkinter text widgets."""

    def __init__(self, text_widget):
        """Create a call-tip; shown by showtip().

        text_widget: a Text widget with code for which call-tips are desired
        """
        # Note: The Text widget will be accessible as self.anchor_widget
        super(CalltipWindow, self).__init__(text_widget)

        self.label = self.text = None
        self.parenline = self.parencol = self.lastline = None
        self.hideid = self.checkhideid = None
        self.checkhide_after_id = None

    def get_position(self):
        """Choose the position of the call-tip."""
        curline = int(self.anchor_widget.index("insert").split('.')[0])
        if curline == self.parenline:
            anchor_index = (self.parenline, self.parencol)
        else:
            anchor_index = (curline, 0)
        box = self.anchor_widget.bbox("%d.%d" % anchor_index)
        if not box:
            box = list(self.anchor_widget.bbox("insert"))
            # align to left of window
            box[0] = 0
            box[2] = 0
        return box[0] + 2, box[1] + box[3]

    def position_window(self):
        "Reposition the window if needed."
        curline = int(self.anchor_widget.index("insert").split('.')[0])
        if curline == self.lastline:
            return
        self.lastline = curline
        self.anchor_widget.see("insert")
        super(CalltipWindow, self).position_window()

    def showtip(self, text, parenleft, parenright):
        """Show the call-tip, bind events which will close it and reposition it.

        text: the text to display in the call-tip
        parenleft: index of the opening parenthesis in the text widget
        parenright: index of the closing parenthesis in the text widget,
                    or the end of the line if there is no closing parenthesis
        """
        # Only called in calltip.Calltip, where lines are truncated
        self.text = text
        if self.tipwindow or not self.text:
            return

        self.anchor_widget.mark_set(MARK_RIGHT, parenright)
        self.parenline, self.parencol = map(
            int, self.anchor_widget.index(parenleft).split("."))

        super(CalltipWindow, self).showtip()

        self._bind_events()

    def showcontents(self):
        """Create the call-tip widget."""
        self.label = Label(self.tipwindow, text=self.text, justify=LEFT,
                           background="#ffffd0", foreground="black",
                           relief=SOLID, borderwidth=1,
                           font=self.anchor_widget['font'])
        self.label.pack()

    def checkhide_event(self, event=None):
        """Handle CHECK_HIDE_EVENT: call hidetip or reschedule."""
        if not self.tipwindow:
            # If the event was triggered by the same event that unbound
            # this function, the function will be called nevertheless,
            # so do nothing in this case.
            return None

        # Hide the call-tip if the insertion cursor moves outside of the
        # parenthesis.
        curline, curcol = map(int, self.anchor_widget.index("insert").split('.'))
        if curline < self.parenline or \
           (curline == self.parenline and curcol <= self.parencol) or \
           self.anchor_widget.compare("insert", ">", MARK_RIGHT):
            self.hidetip()
            return "break"

        # Not hiding the call-tip.

        self.position_window()
        # Re-schedule this function to be called again in a short while.
        if self.checkhide_after_id is not None:
            self.anchor_widget.after_cancel(self.checkhide_after_id)
        self.checkhide_after_id = \
            self.anchor_widget.after(CHECKHIDE_TIME, self.checkhide_event)
        return None

    def hide_event(self, event):
        """Handle HIDE_EVENT by calling hidetip."""
        if not self.tipwindow:
            # See the explanation in checkhide_event.
            return None
        self.hidetip()
        return "break"

    def hidetip(self):
        """Hide the call-tip."""
        if not self.tipwindow:
            return

        try:
            self.label.destroy()
        except TclError:
            pass
        self.label = None

        self.parenline = self.parencol = self.lastline = None
        try:
            self.anchor_widget.mark_unset(MARK_RIGHT)
        except TclError:
            pass

        try:
            self._unbind_events()
        except (TclError, ValueError):
            # ValueError may be raised by MultiCall
            pass

        super(CalltipWindow, self).hidetip()

    def _bind_events(self):
        """Bind event handlers."""
        self.checkhideid = self.anchor_widget.bind(CHECKHIDE_EVENT,
                                                   self.checkhide_event)
        for seq in CHECKHIDE_SEQUENCES:
            self.anchor_widget.event_add(CHECKHIDE_EVENT, seq)
        self.anchor_widget.after(CHECKHIDE_TIME, self.checkhide_event)
        self.hideid = self.anchor_widget.bind(HIDE_EVENT,
                                              self.hide_event)
        for seq in HIDE_SEQUENCES:
            self.anchor_widget.event_add(HIDE_EVENT, seq)

    def _unbind_events(self):
        """Unbind event handlers."""
        for seq in CHECKHIDE_SEQUENCES:
            self.anchor_widget.event_delete(CHECKHIDE_EVENT, seq)
        self.anchor_widget.unbind(CHECKHIDE_EVENT, self.checkhideid)
        self.checkhideid = None
        for seq in HIDE_SEQUENCES:
            self.anchor_widget.event_delete(HIDE_EVENT, seq)
        self.anchor_widget.unbind(HIDE_EVENT, self.hideid)
        self.hideid = None


def _calltip_window(parent):  # htest #
    from tkinter import Toplevel, Text, LEFT, BOTH

    top = Toplevel(parent)
    top.title("Test call-tips")
    x, y = map(int, parent.geometry().split('+')[1:])
    top.geometry("250x100+%d+%d" % (x + 175, y + 150))
    text = Text(top)
    text.pack(side=LEFT, fill=BOTH, expand=1)
    text.insert("insert", "string.split")
    top.update()

    calltip = CalltipWindow(text)
    def calltip_show(event):
        calltip.showtip("(s='Hello world')", "insert", "end")
    def calltip_hide(event):
        calltip.hidetip()
    text.event_add("<<calltip-show>>", "(")
    text.event_add("<<calltip-hide>>", ")")
    text.bind("<<calltip-show>>", calltip_show)
    text.bind("<<calltip-hide>>", calltip_hide)

    text.focus_set()

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

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

SILENT KILLER Tool