Skip to content

Commit ab496a5

Browse files
committed
Feat: Auto resize tooltip window to best size
1 parent 189c268 commit ab496a5

File tree

1 file changed

+21
-5
lines changed

1 file changed

+21
-5
lines changed

Lib/idlelib/calltip_w.py

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,13 @@
1717
MARK_RIGHT = "calltipwindowregion_right"
1818

1919

20+
def widget_size(widget):
21+
widget.update()
22+
width = widget.winfo_width()
23+
height = widget.winfo_height()
24+
return width, height
25+
26+
2027
class CalltipWindow(TooltipBase):
2128
"""A call-tip widget for tkinter text widgets."""
2229

@@ -75,21 +82,30 @@ def showtip(self, text, parenleft, parenright):
7582
int, self.anchor_widget.index(parenleft).split("."))
7683

7784
super().showtip()
78-
self.tipwindow.wm_attributes('-topmost', 1)
85+
self.tipwindow.wm_attributes("-topmost", 1)
7986

8087
self._bind_events()
8188

8289
def showcontents(self):
8390
"""Create the call-tip widget."""
91+
self.label = Label(self.tipwindow, text=self.text, font=self.anchor_widget['font'])
92+
self.label.pack()
93+
label_w, label_h = widget_size(self.label) # get the old version of tooltip window size
94+
self.label.forget()
95+
8496
self.label = ScrolledText(self.tipwindow, wrap="word",
8597
background="#ffffd0", foreground="black",
8698
relief=SOLID, borderwidth=1,
87-
font=self.anchor_widget['font'])
88-
self.label.insert('1.0', self.text)
89-
self.label.config(state='disabled')
99+
font=self.anchor_widget["font"])
100+
self.label.insert("1.0", self.text)
101+
self.label.config(state="disabled")
90102
self.label.pack()
103+
max_w, max_h = widget_size(self.label)
104+
105+
if self.label.yview()[1] == 1: # already shown entire text
106+
self.label.vbar.forget()
91107

92-
self.tipwindow.geometry('%dx%d' % (400, 120))
108+
self.tipwindow.geometry("%dx%d" % (min(label_w, max_w), min(label_h, max_h)))
93109

94110
def checkhide_event(self, event=None):
95111
"""Handle CHECK_HIDE_EVENT: call hidetip or reschedule."""

0 commit comments

Comments
 (0)