Перекрывающаяся полоса прокрутки в интерфейсе tkinter - PullRequest
0 голосов
/ 18 июня 2019

У меня есть двойная рамка полосы прокрутки в графическом интерфейсе, основанная на tkinter, но правая часть горизонтальной полосы прокрутки перекрывается вертикальной полосой, а стрелка вправо не видна.

Я в основном использовал код по следующей ссылке https://lucasg.github.io/2015/07/21/How-to-make-a-proper-double-scrollbar-frame-in-Tkinter/

Как видно из изображения на рисунке справа внизу, две полосы прокрутки перекрываются, а стрелка вправо на горизонтальной полосе прокрутки не видна.

Копирование кода по указанной ссылке, так как он служит минимальным воспроизводимым примером

import tkinter as tk
from tkinter import ttk


class DoubleScrollbarFrame(ttk.Frame):

  def __init__(self, master, **kwargs):
    '''
      Initialisation. The DoubleScrollbarFrame consist of :
        - an horizontal scrollbar
        - a  vertical   scrollbar
        - a canvas in which the user can place sub-elements
    '''

    ttk.Frame.__init__(self,  master, **kwargs)

    # Canvas creation with double scrollbar
    self.hscrollbar = ttk.Scrollbar(self, orient = tk.HORIZONTAL)
    self.vscrollbar = ttk.Scrollbar(self, orient = tk.VERTICAL)
    self.sizegrip = ttk.Sizegrip(self)
    self.canvas = tk.Canvas(self, bd=0, highlightthickness=0, 
                                  yscrollcommand = self.vscrollbar.set,
                                  xscrollcommand = self.hscrollbar.set)
    self.vscrollbar.config(command = self.canvas.yview)
    self.hscrollbar.config(command = self.canvas.xview)

  def pack(self, **kwargs):
    '''
      Pack the scrollbar and canvas correctly in order to recreate the same look as MFC's windows. 
    '''

    self.hscrollbar.pack(side=tk.BOTTOM, fill=tk.X, expand=tk.FALSE)
    self.vscrollbar.pack(side=tk.RIGHT, fill=tk.Y,  expand=tk.FALSE)
        self.sizegrip.pack(in_ = self.hscrollbar, side = tk.BOTTOM, anchor = "se")
    self.canvas.pack(side=tk.LEFT, padx=5, pady=5,
                                             fill=tk.BOTH, expand=tk.TRUE)

    ttk.Frame.pack(self, **kwargs)



  def get_frame(self):
    '''
      Return the "frame" useful to place inner controls.
    '''
    return self.canvas


if __name__ == '__main__':

  # Top-level frame
  root = tk.Tk()
  root.title( "Double scrollbar with tkinter" )
  root.minsize(width = 600, height = 600)
  frame = DoubleScrollbarFrame(root, relief="sunken")

  # Add controls here
  subframe = ttk.Frame( frame.get_frame() ) 
  txt = ttk.Label(subframe, text="Add things here !")

  #Packing everything
  txt.pack(anchor = 'center', fill = tk.Y, expand = tk.Y)
  subframe.pack(padx  = 15, pady   = 15, fill = tk.BOTH, expand = tk.TRUE)
  frame.pack( padx   = 5, pady   = 5, expand = True, fill = tk.BOTH)


  # launch the GUI
  root.mainloop()

Я хочу знать, как я могу изменить код, чтобы видеть правую часть горизонтальной полосы прокрутки.

...