Хобрук: Ваш путь к мастерству в программировании

Отрегулировать высоту полосы прокрутки в Tkinter?

Я создал полосу прокрутки в Tkinter, и она работает нормально, но размер кнопки прокрутки не масштабируется правильно (обычно он корректируется в соответствии с размером прокручиваемой области).

Я размещаю все свои виджеты с помощью .pack (), поэтому липкую конфигурацию .grid я бы хотел избежать.

Мой вопрос: какая часть конфигурации полосы прокрутки отвечает за масштабирование высоты?

Пример кода:

    master = Tk()
    FrameBIG = Frame(master)
    Main = Canvas(FrameBIG,height = 1200,width =1500,scrollregion=Main.bbox("all"))
    scroll = Scrollbar(FrameBIG ,orient="vertical", command=Main.yview)
    scroll.pack(side="right", fill="y")
    Main.pack(side = BOTTOM, anchor = NW,fill="x")
    FrameBIG.pack(anchor = W, fill = "x")
14.03.2018

  • Покажите минимальный воспроизводимый пример. Мы не можем отлаживать код, который не видим. Окончательная высота полосы прокрутки является фактором как настройки полосы прокрутки, так и того, как она добавляется в окно. 14.03.2018
  • Я думаю, вы пытаетесь изменить размер полосы прокрутки с окном правильно? 14.03.2018
  • Какую версию Python вы используете? 2.x или 3.x? (вы можете получить версию с python --version или python3 --version) 14.03.2018
  • Ваш код не запускается. Пожалуйста, предоставьте полный и функциональный код. 14.03.2018

Ответы:


1

Код

Main = Canvas(FrameBIG,height=1200,width=1500,scrollregion=Main.bbox("all"))

неверно, потому что Main еще не существует. Должен быть

Main = Canvas(FrameBIG,background="blue", height = 500,width =500)
Main.configure(scrollregion=Main.bbox("all"))

Но это бессмысленно, потому что Main холст был создан прямо сейчас и пуст (поэтому метод bbox возвращает None)

Когда вы создали полосу прокрутки с

scroll = Scrollbar(FrameBIG ,orient="vertical", command=Main.yview)

вы забыли завершить двухэтапный контракт между scroll и Main, поэтому вам нужно добавить строку ниже (сразу после создания scroll)

Main.configure(yscrollcommand=scroll.set)

Теперь код такой

from tkinter import *

master = Tk()
FrameBIG = Frame(master)

Main = Canvas(FrameBIG,background="blue", height = 500,width =500)
Main.configure(scrollregion=Main.bbox("all"))

scroll = Scrollbar(FrameBIG ,orient="vertical", command=Main.yview)
Main.configure(yscrollcommand=scroll.set)

scroll.pack(side="right", fill="y")
Main.pack(side = BOTTOM, anchor = NW,fill="x")
FrameBIG.pack(anchor = W, fill = "x")

master.mainloop()

Теперь вы можете заметить, что на полосе прокрутки нет кнопки. Потому что холст Main пуст. Добавим что-нибудь на Main холст

FrameBIG.pack(anchor = W, fill = "x")

# creates a diagonal from coordinates (0,0) to (500,1000)
Main.create_line(0, 0, 500, 1000)

master.mainloop()

Теперь линия есть, но кнопки прокрутки еще нет, почему? Потому что вам нужно обновить scrollregion холста Main. Итак, давайте сделаем это с

FrameBIG.pack(anchor = W, fill = "x")

Main.create_line(0, 0, 500, 1000)
Main.configure(scrollregion=Main.bbox("all"))

master.mainloop()

Теперь он работает нормально. Вот полный код.

from tkinter import *

master = Tk()
FrameBIG = Frame(master)

Main = Canvas(FrameBIG,background="blue", height = 500,width =500)
Main.configure(scrollregion=Main.bbox("all"))

scroll = Scrollbar(FrameBIG ,orient="vertical", command=Main.yview)
Main.configure(yscrollcommand=scroll.set)

scroll.pack(side="right", fill="y")
Main.pack(side = BOTTOM, anchor = NW,fill="x")
FrameBIG.pack(anchor = W, fill = "x")

Main.create_line(0, 0, 500, 1000)
Main.configure(scrollregion=Main.bbox("all"))

master.mainloop()

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

14.03.2018
Новые материалы

Введение в контекст React
В этом посте мы поговорим о Context API, который был представлен в React 16, и о том, как вы можете их использовать. Что такое контекст? Глядя на определение из react docs , оно..

Шлюз с лицензией OSS, совместимый с Apollo Federation v2, появится в WunderGraph
Сегодня мы рады сообщить, что мы сотрудничаем с поддерживаемой YC Tailor Technologies, Inc. для внедрения Apollo Federation v2. Реализация будет лицензирована MIT (Engine) и Apache 2.0..

Это оно
Ну, я официально уволился с работы! На этой неделе я буду лихорадочно выполнять последние требования Думающего , чтобы я мог сосредоточиться на поиске работы. Что именно это значит?..

7 полезных библиотек JavaScript, которые вы должны использовать в своем следующем проекте
Усильте свою разработку JavaScript Есть поговорка «Не нужно изобретать велосипед». Библиотеки — лучший тому пример. Это поможет вам написать сложные и трудоемкие функции простым способом...

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

C в C.R.U.D с использованием React-Redux
Если вы использовали React, возможно, вы знакомы с головной болью, связанной с обратным потоком данных. Передача состояния реквизитам от родительских компонентов к дочерним компонентам может..

5 обязательных элементов современного инструмента конвейера данных
В цифровом мире предприятия используют конвейеры данных для перемещения, преобразования и хранения огромных объемов данных. Эти конвейеры составляют основу бизнес-аналитики и играют..