03
Мар
2017

Автоматически скрывать скроллбары, когда содержимое умещается в текстовое поле

Реализовал на tkinter собственный класс текстового поля с вертикальной и горизонтальной полосами прокрутки:

import tkinter as tk
import tkinter.ttk as ttk

class CustomText(tk.Frame):
    def __init__(self, parent, *args, **kwargs):
        super().__init__(parent)

        yscrollbar = ttk.Scrollbar(self, orient=tk.VERTICAL)
        xscrollbar = ttk.Scrollbar(self, orient=tk.HORIZONTAL)

        self._text = tk.Text(self, *args,
                                xscrollcommand=xscrollbar.set,
                                yscrollcommand=yscrollbar.set,
                                **kwargs)

        yscrollbar['command'] = self._text.yview
        xscrollbar['command'] = self._text.xview

        self.grid_columnconfigure(0, weight=1)
        self.grid_rowconfigure(0, weight=1)
        self._text.grid(row=0, column=0, sticky='NSEW')
        yscrollbar.grid(row=0, column=1, sticky='NS')
        xscrollbar.grid(row=1, column=0, sticky='EW')

    def write(self, s):
        self._text.insert(tk.END, s)

    def clear(self):
        self._text.delete(0.0, tk.END)

root = tk.Tk()

text = CustomText(root, wrap=tk.NONE)
text.pack()

text.write('*\n' * 100)

tk.mainloop()

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

Скриншот окна

Источник: https://ru.stackoverflow.com/questions/635144/%D0%90%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8-%D1%81%D0%BA%D1%80%D1%8B%D0%B2%D0%B0%D1%82%D1%8C-%D1%81%D0%BA%D1%80%D0%BE%D0%BB%D0%BB%D0%B1%D0%B0%D1%80%D1%8B-%D0%BA%D0%BE%D0%B3%D0%B4%D0%B0-%D1%81%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B8%D0%BC%D0%BE%D0%B5-%D1%83%D0%BC%D0%B5%D1%89%D0%B0%D0%B5%D1%82%D1%81%D1%8F-%D0%B2-%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BE%D0%B2%D0%BE%D0%B5-%D0%BF%D0%BE%D0%BB%D0%B5

Share

Тебе может это понравится...