|
17 | 17 | MARK_RIGHT = "calltipwindowregion_right" |
18 | 18 |
|
19 | 19 |
|
| 20 | +def widget_size(widget): |
| 21 | + widget.update() |
| 22 | + width = widget.winfo_width() |
| 23 | + height = widget.winfo_height() |
| 24 | + return width, height |
| 25 | + |
| 26 | + |
20 | 27 | class CalltipWindow(TooltipBase): |
21 | 28 | """A call-tip widget for tkinter text widgets.""" |
22 | 29 |
|
@@ -75,21 +82,30 @@ def showtip(self, text, parenleft, parenright): |
75 | 82 | int, self.anchor_widget.index(parenleft).split(".")) |
76 | 83 |
|
77 | 84 | super().showtip() |
78 | | - self.tipwindow.wm_attributes('-topmost', 1) |
| 85 | + self.tipwindow.wm_attributes("-topmost", 1) |
79 | 86 |
|
80 | 87 | self._bind_events() |
81 | 88 |
|
82 | 89 | def showcontents(self): |
83 | 90 | """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 | + |
84 | 96 | self.label = ScrolledText(self.tipwindow, wrap="word", |
85 | 97 | background="#ffffd0", foreground="black", |
86 | 98 | 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") |
90 | 102 | 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() |
91 | 107 |
|
92 | | - self.tipwindow.geometry('%dx%d' % (400, 120)) |
| 108 | + self.tipwindow.geometry("%dx%d" % (min(label_w, max_w), min(label_h, max_h))) |
93 | 109 |
|
94 | 110 | def checkhide_event(self, event=None): |
95 | 111 | """Handle CHECK_HIDE_EVENT: call hidetip or reschedule.""" |
|
0 commit comments