python - Tkinter Text Scrollbar goes Too Far -


i wondering why scrollbar goes far tkinter text widget. have bottom label supposed fill space below, yet somehow scrollbar reaches beyond label end. not sure widget causing this.

import tkinter tk import tkinter.filedialog  class textlinenumbers(tk.canvas):     def __init__(self, *args, **kwargs):         tk.canvas.__init__(self, *args, **kwargs)         self.textwidget = none      def attach(self, text_widget):         self.textwidget = text_widget      def redraw(self, *args):         '''redraw line numbers'''         self.delete("all")          = self.textwidget.index("@0,0")         while true:             dline= self.textwidget.dlineinfo(i)             if dline none: break             y = dline[1]             linenum = str(i).split(".")[0]             self.create_text(5,y,anchor="nw", text=linenum)             = self.textwidget.index("%s+1line" % i)  class customtext(tk.text):      def __init__(self, *args, **kwargs):         tk.text.__init__(self, *args, **kwargs)          self.tk.eval('''             proc widget_proxy {widget widget_command args} {                  # call real tk widget command real args                 set result [uplevel [linsert $args 0 $widget_command]]                  # generate event types of commands                 if {([lindex $args 0] in {insert replace delete}) ||                     ([lrange $args 0 2] == {mark set insert}) ||                      ([lrange $args 0 1] == {xview moveto}) ||                     ([lrange $args 0 1] == {xview scroll}) ||                     ([lrange $args 0 1] == {yview moveto}) ||                     ([lrange $args 0 1] == {yview scroll})} {                      event generate  $widget <<change>> -when tail                 }                  # return result real widget command                 return $result             }             ''')         self.tk.eval('''             rename {widget} _{widget}             interp alias {{}} ::{widget} {{}} widget_proxy {widget} _{widget}         '''.format(widget=str(self)))          self.comment = false  class window(tk.frame):     def __init__(self, *args, **kwargs):         tk.frame.__init__(self, *args, **kwargs)         self.bottomlabel()         self.createtext()      def createtext(self):         self.text = customtext(self, bd=0)            self.vsb = tk.scrollbar(orient=tk.vertical)         self.text.configure(yscrollcommand=self.vsb.set)         self.vsb.configure(command=self.text.yview)          self.linenumbers = textlinenumbers(self, width=55)         self.linenumbers.attach(self.text)          self.vsb.pack(side=tk.right, fill=tk.y)         self.linenumbers.pack(side="left", fill="y")         self.text.pack(side="right", fill="both", expand=true)          self.text.bind("<<change>>", self._on_change)         self.text.bind("<configure>", self._on_change)      def bottomlabel(self):         self.label = tk.label(self, text="lorem ipsum", anchor=tk.w)         self.label.pack(fill=tk.x, side=tk.bottom)      def _on_change(self, event):         self.linenumbers.redraw()  if __name__ == "__main__":     root = tk.tk()     root.title("window")     window = window(root).pack(side="top", fill="both", expand=true)     root.mainloop() 

the problem didn't give scrollbar explicit parent, parent root window. fix pretty simple: make sure has same parent text widget:

self.vsb = tk.scrollbar(self, orient=tk.vertical) 

Comments

Popular posts from this blog

dns - How To Use Custom Nameserver On Free Cloudflare? -

python - Pygame screen.blit not working -

c# - Web API response xml language -