Scrollbar в Tkinter, примеры вертикального и горизонтального скроллбара

Как работают скроллбары в Tkinter

Первые несколько строк приложения создают полосы прокрутки и связывают их с Canvas с помощью параметров xscrollcommand и yscrollcommand, которые относятся к методу set () объектов scroll_x и scroll_y соответственно. Этот метод отвечает за перемещение курсора.

вам также необходимо настроить параметр команды для каждой из полос прокрутки после определения холста:

Используйте другой браузер
self.scroll_x = tk.Scrollbar (self, orient = tk.HORIZONTAL)
self.scroll_y = tk.Scrollbar (self, orient = tk.VERTICAL)
self.canvas = tk.Canvas (self, width = 300, height = 100,
xscrollcommand = self.scroll_x.set,
yscrollcommand = self.scroll_y.set)
self.scroll_x.config (команда = self.canvas.xview)
self.scroll_y.config (команда = self.canvas.yview)

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

Следующим шагом будет добавление фрейма с помощью метода create_window (). Первый аргумент — это место, где должен быть размещен виджет, который, в свою очередь, передается в аргумент окна. Поскольку оси x и y виджета находятся в верхнем левом углу, мы помещаем виджет в позицию (0, 0) и выравниваем его в этом углу с помощью anchor = tk.NW (северо-запад):

Используйте другой браузер
self.frame = tk.Frame (self.canvas)
#…
self.canvas.create_window ((0, 0), window = self.frame, anchor = tk.NW)

Затем мы устанавливаем переменный размер для первой строки и столбца с помощью методов rowconfigure () и columnconfigure (). Параметр веса указывает относительную ширину для распределения дополнительного пространства. Однако в этом примере нет столбцов или строк, размер которых можно изменить.

Ссылка на мероприятие поможет правильно перенастроить холст при изменении размера главного окна. Обработка событий этого типа работает так же, как события мыши и клавиатуры: используйте другой браузер
self.rowconfigure (0, вес = 1)
self.columnconfigure (0, вес = 1)
self.bind(«», автоматическое изменение размера)

В результате мы устанавливаем минимальный размер главного окна равным текущей ширине и высоте, которые можно получить с помощью методов winfo_width () или winfo_height().

Чтобы получить фактический размер контейнера, вы должны сначала заставить диспетчер геометрии нарисовать все дочерние виджеты, вызвав update_idletasks (). Этот виджет доступен во всех классах виджетов и отвечает за то, чтобы Tkinter обрабатывал любые ожидающие события, такие как перерисовка или новые вычисления размеров:

Используйте другой браузер
self.update_idletasks()
self.minsize (self.winfo_width (), self.winfo_height())

Метод resize обрабатывает событие изменения размера окна и обновляет параметр scrollregion, который определяет область холста, которую можно прокручивать. Для пересчета вы можете использовать метод bbox () с константой ALL. Возвращает окружающий размер всего виджета Canvas:

Используйте другой браузер
def resize (авто, событие):
region = self.canvas.bbox (tk.ALL)
self.canvas.configure (scrollregion = регион)
Tkinter автоматически генерирует несколько событий при запуске приложения, поэтому нет необходимости вызывать self.resize () в конце метода __init__.

Только несколько классов виджетов поддерживают стандартные параметры прокрутки: Listbox, Text и Canvas поддерживают xscrollcommand и yscrollcommand, а Entry поддерживают только xscrollcommand. На примере мы показали, как использовать этот шаблон с Canvas, поскольку он может быть общим решением, но та же структура применима к любому виджету.

Также следует отметить, что в этом случае менеджер геометрии не был вызван для рисования кадра, поскольку create_window () делает это автоматически. Чтобы лучше организовать класс вашего приложения, вы можете переместить все функции фрейма и внутренние виджеты в отдельный подкласс фрейма.

 

Python Tkinter Scrollbar Grid

Сетка в Python Tkinter — это менеджер компоновки, который организует виджеты в формате строк и столбцов. Все на оси X — это строки, а все на оси Y — это столбцы.

  • В этом разделе мы узнаем, как добавить полосу прокрутки к текстовому виджету с помощью диспетчера макетов сетки в Python Tkinter.
  • Стратегия состоит в том, чтобы разместить текстовый виджет и виджет полосы прокрутки в row = 0 и column = 0 для текстового виджета и column = 1 для виджета полосы прокрутки. Таким образом, оба виджета будут параллельны друг другу (строки 19, 27).
  • Используя sticky, мы растянем полосу прокрутки в направлении север-юг (строка 27).
  • В конце мы свяжем полосу прокрутки с виджетом текстового поля (строки 29, 30)
  • Примечание. Текстовый виджет можно заменить любым виджетом.

Вот реализация полосы прокрутки с использованием сетки

В этом коде мы создали текстовый редактор с помощью виджета Text Box, и если количество слов превышает ориентацию текстового виджета, появится полоса прокрутки.

из tkinter import * ws = Tk () ws.title (‘PythonGuides’) ws.config (bg = ‘# 5F734C’) frame = Frame (ws, bg = ‘# A8B9BF’) text_box = Text (ws, height = 13 , width = 32, font = (12)) text_box.grid (row = 0, column = 0) text_box.config (bg = ‘# D9D8D7’) sb = Scrollbar (ws, orient = VERTICAL) sb.grid (row = 0, столбец = 1, липкий = NS) text_box.config (yscrollcommand = sb.set) sb.config (command = text_box.yview) ws.mainloop()

Вот вывод кода выше

В этих выходных данных вы можете видеть, что полоса прокрутки начала появляться сразу после того, как слова начали превышать размер текстового поля.

полосы прокрутки python tkinter с использованием сетки
Полоса прокрутки Python Tkinter

Python Tkinter Scrollbar Text box

В этом разделе мы применили полосу прокрутки к текстовому виджету. Результат этой программы будет аналогичен Python Tkinter Scrollbar Frame.

  • В Python Tkinter Scrollbar Frame мы применили полосу прокрутки к виджету Frame, но здесь мы применим ее непосредственно к текстовому виджету.
  • Мы создали текстовый виджет в Python Tkinter и упаковали его СЛЕВА. Итак, мы создали виджет полосы прокрутки и упаковали его ПРАВИЛЬНО.
  • Используемый менеджер компоновки — Pack (), код присутствует в строках 15, 23

из tkinter import * ws = Tk () ws.title (‘PythonGuides’) ws.geometry (‘400×300’) ws.config (bg = ‘# F25252’) frame = Frame (ws) text_box = Text (ws, height = 13, width = 32, font = (12)) text_box.pack (side = LEFT, expand = True) sb_ver = Scrollbar (ws, orient = VERTICAL) sb_ver.pack (side = RIGHT, fill = Y) text_box.config (yscrollcommand = sb_ver.set) sb_ver.config (command = text_box.yview) ws.mainloop()

Вот результат выполнения приведенного выше кода для реализации полосы прокрутки в текстовом виджете

В этих выходных данных вы можете видеть, что текст отображается в текстовом поле, а полоса прокрутки отображается в правой части окна.

полоса прокрутки python tkinter в текстовом поле
Текстовое поле полосы прокрутки Python Tkinter

Python Tkinter Scrollbar Text Widget

В этом разделе мы применили полосу прокрутки к текстовому виджету. Результат этой программы будет аналогичен Python Tkinter Scrollbar Frame.

  • В Python Tkinter Scrollbar Frame мы применили полосу прокрутки к виджету Frame, но здесь мы применим ее непосредственно к текстовому виджету.
  • Мы создали текстовый виджет в Python Tkinter и упаковали его СЛЕВА. Итак, мы создали виджет полосы прокрутки и упаковали его ПРАВИЛЬНО.
  • Используемый менеджер компоновки — Pack (), код представлен в строках 15, 23.

Вот полный код для реализации полосы прокрутки в текстовом виджете

из tkinter import * ws = Tk () ws.title (‘PythonGuides’) ws.geometry (‘400×300’) ws.config (bg = ‘# F25252’) text_box = Text (ws, height = 13, width = 32, font = (12)) text_box.pack (side = LEFT, expand = True) sb_ver = Полоса прокрутки (ws, orient = VERTICAL) sb_ver.pack (side = RIGHT, fill = Y) text_box.config (yscrollcommand = sb_ver.set) sb_ver.config (команда = text_box.yview) ws.mainloop()

Вот результат выполнения приведенного выше кода для реализации полосы прокрутки в текстовом виджете

В этих выходных данных вы можете видеть, что текст отображается в текстовом поле, а полоса прокрутки отображается в правой части окна.

полоса прокрутки python tkinter в текстовом поле
Текстовый виджет полосы прокрутки Python Tkinter

Python Tkinter Scrollbar Not Working

В этом разделе мы рассмотрим возможные причины, по которым полоса прокрутки не работает. Также мы поговорим об общих ошибках и их исправлении при реализации полосы прокрутки в Python Tkinter.

  • Отсутствует диспетчер макетов: первое, что нужно проверить, если вы не видите полосу прокрутки на экране, — это проверить, позиционируется ли виджет полосы прокрутки с помощью диспетчера макетов (упаковка, сетка, место).
  • Кажется маленьким: если полоса прокрутки в Python Tkinter в этом случае кажется маленькой
    • если вы используете диспетчер компоновки сетки, используйте липкий и установите полосу прокрутки NS для вертикальной полосы прокрутки и EW для горизонтальной полосы прокрутки.
    • Если вы используете диспетчер компоновки пакетов, используйте Fill = X для горизонтальной и Fill = Y для вертикальной полосы прокрутки).

А теперь подробнее

Во время инициализации вы можете передать следующие параметры:

Параметры tinyscrollbar()

Название параметра Описание Значение по умолчаниюось

Прокрутите по вертикали или горизонтали (‘x’ / ‘y’).даколесо

Сколько пикселей перематывается за одно движение колесика мыши.40

горка

Включить / отключить прокрутку колесиком мыши (true / false).настоящий

измерение

Размер полосы автоматической прокрутки — в зависимости от содержимого или задается количество в пикселях.’автомобиль’

резак для большого пальца

Автоматический размер курсора — в зависимости от содержимого или установить число в пикселях.’автомобиль’

Примеры инициализации с параметрами

Прокрутка по горизонтальной оси:

jQuery (‘# полоса прокрутки’) tinyscrollbar ({ось: ‘x’});

Фиксированные размеры направляющих и ползунов:

jQuery (‘# полоса прокрутки’) tinyscrollbar ({размер: 100, размер: 15 });

Метод tinyscrollbar_update

Метод tinyscrollbar_update используется для сброса полосы прокрутки. Его следует вызывать, если содержимое внутри области прокрутки изменяется динамически или если блок прокрутки изначально был невидимым (отображение: нет). Пример:

var oScrollbar = jQuery (‘# полоса прокрутки’); oScrollbar.tinyscrollbar (); // здесь находятся команды, которые динамически изменяют содержимое oScrollbar.tinyscrollbar_update();

Метод tinyscrollbar_update может принимать параметр, отвечающий за программную перемотку полосы прокрутки.

Пример параметра Действиеtinyscrollbar_update()tinyscrollbar_update (‘ниже’)tinyscrollbar_update («относительный’)tinyscrollbar_update (X)

по умолчанию сверху
до конца
при изменении содержимого запоминается текущее положение ползунка
перемотка X пикселей сверху

Например, если в вашем HTML-коде есть элемент с id = «scrollbar-anchor», вы можете реализовать кнопку для перемотки назад в определенную позицию:

var oScroll = $ (‘# полоса прокрутки’); oScroll.tinyscrollbar (); // привязка полосы прокрутки $ (‘# scrollbar-anchor’) click (function () {oScroll.tinyscrollbar_update (50); return false; });

Плюсы:

  • Автор плагина заявляет о поддержке iPhone, iPad, Android. Однако на практике было обнаружено, что типичные размеры слайдера не позволяют удобно управлять на мобильном устройстве. Следовательно, в идеале вы должны предоставить отдельные стили для этих устройств с большим ползунком.
  • Прокрутите колесиком мыши, перетащив курсор или щелкнув дорожку.
  • Поддержка перемотки программного обеспечения.
  • Легкий и простой в установке.

Быстрый старт

Подключим библиотеки и не забываем CSS:

  • В HTML создадим немного громоздкую конструкцию для прокрутки:
    Вот сам прокручиваемый контент

    При необходимости настройте стили из tinyscrollbar.css и изображения в соответствии с дизайном.

    Последний шаг — инициализировать прокрутку скриптом:

    Python Tkinter Scrollbar Orient

    Полоса прокрутки в Python Tkinter предоставляет параметр ориентации, с помощью которого мы можем настроить полосу прокрутки в горизонтальном или вертикальном положении.

    • Полосы прокрутки можно применять к виджетам, таким как текстовое поле, фрейм, список и т.д. Требуется наличие вертикальных полос прокрутки, горизонтальных полос прокрутки или того и другого.
    • Следующая команда применяется для применения полос прокрутки. Здесь lb — это переменная для списка, а sb — это переменная, назначенная полосе прокрутки.

    lb.configure (команда yscroll = sb.set) sb.config (команда = lb.yview)

    Код для вертикально ориентированной полосы прокрутки в Python Tkinter

    В этом коде мы установили вертикальную ориентацию полосы прокрутки, теперь пользователи могут прокручивать вверх и вниз для доступа к контенту. Код находится в строке 19.

    from tkinter import * ws = Tk () ws.title (‘PythonGuides’) ws.geometry (‘400×300’) ws.config (bg = ‘# 4A7A8C’) frame = Frame (ws) frame.pack (expand = True, fill = BOTH, padx = 20, pady = 20) lb = Listbox (frame, font = (12)) lb.pack (expand = True, fill = BOTH, side = LEFT) sb = Scrollbar (frame, orient = VERTICAL) sb.pack (fill = Y, side = RIGHT) lb.configure (yscrollcommand = sb.set) sb.config (command = lb.yview) lb.insert (0, ‘Фрукты’) lb.insert (1, ‘Цитрус — апельсины, лаймы, грейпфруты и мандарины ‘) фунт вставка (2, «Косточковые фрукты — абрикосы, сливы, персики и нектарины») фунт вставка (3, «Тропические и экзотические — манго и бананы») фунт вставка (4 , ‘Ягоды — киви, малина, клубника, черника и маракуйя’) lb.insert (5, ‘Дыни — дыни, арбузы и арбузы’) lb.insert (6, ‘Овощи’) lb.insert (7, ‘Green листовой — шпинат и мангольд, салат ‘) фунт вставка (8, «крестоцветные — капуста, брокколи, брюссельская капуста и цветная капуста») фунт вставка (9, «кабачок — кабачки, огурец и кабачок») фунт sert (10, ‘Корень — батат, сладкий картофель и картофель’) lb.insert (11, ‘Съедобный стебель — спаржа и сельдерей’) lb.insert (12, ‘Лук — чеснок, лук и лук-шалот’) ws .mainloop()

    Код для вертикально ориентированной полосы прокрутки в Python Tkinter.

    В этом выводе мы создали вертикально ориентированную полосу прокрутки. Полоса прокрутки начнет появляться, если текст больше поля виджета, содержащего текст. Таким образом, пользователь может прокручивать вверх и вниз для доступа к тексту.

    вертикальная ориентация полосы прокрутки Python tkinter
    Ориент полосы прокрутки Python Tkinter

    Код для горизонтально ориентированной полосы прокрутки в Python Tkinter

    В этом коде мы создали горизонтальную полосу прокрутки в Python Tkinter. В строке 19 вы можете видеть, что мы установили горизонтальную ориентацию полосы прокрутки.

    from tkinter import * ws = Tk () ws.title (‘PythonGuides’) ws.geometry (‘400×300’) ws.config (bg = ‘# 4A7A8C’) frame = Frame (ws) frame.pack (expand = True, fill = BOTH, padx = 20, pady = 20) lb = Listbox (frame, font = (12)) lb.pack (expand = True, fill = BOTH) sb = Scrollbar (frame, orient = HORIZONTAL) sb.pack (fill = X) lb.configure (xscrollcommand = sb.set) sb.config (command = lb.xview) lb.insert (0, ‘Не все герои носят плащи.’) lb.insert (1, ‘Я меняю правила игры синим цветом ‘) lb.insert (2, «Великая сила дает большую ответственность») lb.insert (3, «В именной фразе есть существительное или местоимение в качестве главного слова») lb.insert (4, «От великой державы приходит большая ответственность()

    Вывод для горизонтально ориентированной полосы прокрутки в Python Tkinter

    В этом выводе мы установили горизонтальную ориентацию полосы прокрутки. Теперь пользователи могут проводить пальцем влево и вправо, чтобы увидеть контент.

    text_box.config (yscrollcommand = sb.set) sb.config (command = text_box.yview)

    Вам могут понравиться следующие руководства по Python tkinter:

    • Виджет текстового поля Python Tkinter + примеры
    • Сетка Python Tkinter
    • Python Tkinter OptionMenu
    • Регистрационная форма на Python с использованием Tkinter
    • Извлечение текста из PDF Python + Полезные примеры
    • Приложение Python NumPy nd

    В этом руководстве мы обсудили все о полосе прокрутки Python Tkinter и следующие моменты:

    • Сетка полосы прокрутки Python Tkinter
    • Рамка полосы прокрутки Python Tkinter
    • Холст полосы прокрутки Python Tkinter
    • Колесо мыши с полосой прокрутки Python Tkinter
    • Полоса прокрутки Python Tkinter не работает
    • Текстовый виджет полосы прокрутки Python Tkinter
    • Ориент полосы прокрутки Python Tkinter

    Python Tkinter Scrollbar Frame

    Полоса прокрутки в Python Tkinter может быть применена к Frame, что поможет пользователю прокручивать экран в горизонтальном или вертикальном направлении.

    • Не всегда удается вывести на экран весь текст. Поскольку это затрудняет читаемость содержимого, оно также будет некрасиво выглядеть на экране.
    • Чтобы решить эту проблему, были введены полосы прокрутки. Теперь пользователи могут получить доступ к огромной текстовой информации, просто проведя полосой прокрутки.
    • Применение полосы прокрутки к рамке — самый простой и лучший способ сделать это. Просто поместите оба (полосу прокрутки и другие виджеты) в окно фрейма, а затем упакуйте их в противоположных направлениях.
    • Например, упакуйте полосы прокрутки справа и другие виджеты слева.
    • Вот реализация полос прокрутки в виджете Frame в Python Tkinter.

    Полный код, показывающий реализацию полосы прокрутки на Framein Python Tkinter

    В этом коде мы разместили полосу прокрутки и виджет текстового поля внутри фрейма в Python Tkinter. Затем, используя диспетчер компоновки пакетов, мы разместили полосу прокрутки справа и текстовое поле слева. Это можно увидеть в строках 19 и 27. Итак, наконец, мы связали полосу прокрутки и текстовое поле, код со строками 29, 30.

    from tkinter import * ws = Tk () ws.title (‘PythonGuides’) ws.geometry (‘400×300’) ws.config (bg = ‘# 5F734C’) frame = Frame (ws, bg = ‘# A8B9BF’) text_box = Текст (ws, height = 13, width = 32, font = (12)) text_box.pack (side = LEFT, expand = True) text_box.config (bg = ‘# D9D8D7’) sb_ver = Полоса прокрутки (ws, orient = ВЕРТИКАЛЬНО) sb_ver.pack (side = RIGHT, fill = Y) text_box.config (yscrollcommand = sb_ver.set) sb_ver.config (command = text_box.yview) ws.mainloop()

    Вывод приведенного выше кода, чтобы показать реализацию полосы прокрутки на фрейме в Python Tkinter

    В этом выводе полоса прокрутки отмечена справа. Прокрутка полосы прокрутки покажет текст в текстовом поле.

    Рамка полосы прокрутки Python Tkinter
    Рамка полосы прокрутки Python Tkinter

    Python Tkinter Scrollbar Canvas

    Холст — это свободное пространство, на котором можно рисовать схемы. В дополнение к рисунку мы также можем размещать графику и виджеты (фрейм, текстовое поле, кнопки и т.д.

    • В этом разделе мы узнаем, как добавить полосу прокрутки на холст. Также мы создадим приложение для демонстрации полосы прокрутки Python Tkinter на холсте.
    • Холст используется для создания виджета холста в программе, за которым следует имя окна, в котором вы хотите его разместить. Также укажите ширину и высоту окна области рисования.

    Холст (ширина = 500, высота = 400,)

    • Мы создали фрейм и внутри него поместили холст и виджет полосы прокрутки.
    • Итак, мы связали обе полосы прокрутки (горизонтальную и вертикальную) с холстом

    Вот полный исходный код Python Tkinter Scrollbar Canvas.

    из tkinter import * ws = Tk () ws.title (‘PythonGuides’) frame = Frame (ws, width = 500, height = 400) frame.pack (expand = True, fill = BOTH) canvas = Canvas (frame, bg = ‘# 4A7A8C’, width = 500, height = 400, область прокрутки = (0,0,700,700)) vertibar = Полоса прокрутки (рамка, ориентация = ВЕРТИКАЛЬНАЯ) vertibar.pack (side = RIGHT, padding = Y) vertibar. Config (command = canvas.yview) horibar = Полоса прокрутки (frame, orient = HORIZONTAL) horibar.pack (side = BOTTOM, fill = X) horibar.config (command = canvas.xview) canvas.config (width = 500, height = 400) canvas config (xscrollcommand = horibar.set, yscrollcommand = vertibar.set) canvas.pack (expand = True, side = LEFT, fill = BOTH) ws.mainloop()

    Вот результат выполнения приведенного выше кода для реализации Python Tkinter Scrollbaron Canvas

    полоса прокрутки python tkinter с использованием холста
    Холст полосы прокрутки Python Tkinter

 

Оцените статью
Блог о Python