Как отключить ручное изменение размера столбца дерева Tkinter?

Поскольку я не могу горизонтально прокручивать столбец Treeview из-за того, что, как представляется, является ограничением Tk / Tkinter, я хочу сделать его липким, чтобы он был прикреплен к кадру.

Проблема в том, что пользователь может вручную изменить размер столбца Treeview, который может испортить мой интерфейс определенным образом. Можно ли отключить такую ​​функциональность?

Обратите внимание на размер заголовка столбца.

Обратите внимание на размер заголовка столбца.

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

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

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

  • изменение цвета элементов ttk.Progressbar в xpnative теме - python
  • Python: отображение Dict of Dicts с использованием дерева пользовательского интерфейса для ключей и любого другого виджета для значений
  • Как создать представление дерева с флажками в Python
  • Почему ttk Progressbar появляется после процесса в Tkinter
  • Как изменить цвет кнопки ttk
  • Цвет окна по умолчанию Tkinter и шестнадцатеричные цветовые коды
  • Python: как получить информацию о запуске startbar () из одного окна (класса) в другое
  • Установите значение по умолчанию для ttk Combobox
  • 2 Solutions collect form web for “Как отключить ручное изменение размера столбца дерева Tkinter?”

    Следующие испытания были протестированы только в Windows, другие ОС могут отличаться.

    Для любых будущих читателей, поскольку Tk 8.6, Treeviews имеют метод ident_region, который принимает положение экрана (x, y) и возвращает строку, соответствующую области древовидного изображения, которую занимают эти координаты.

    Одним из возвращаемых значений является «разделитель».

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

    Например:

     def handle_click(event): if treeview.identify_region(event.x, event.y) == "separator": return "break" #... treeview.bind('<Button-1>', handle_click) 

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

    Обратите внимание, что даже если изменение размера отключено, курсор «двойной стрелки» (⇔) будет по-прежнему отображаться. Вы также можете не показывать курсор двойной стрелки, выполняя то же самое с событием <Motion> (привязка к нему, проверяя, находится ли он над разделителем и останавливает событие от распространения, возвращая строку "break" ).

     >>> sys.version '3.6.0 (v3.6.0:41df79263a11, Dec 23 2016, 08:06:12) [MSC v.1900 64 bit (AMD64)]' >>> tkinter.TkVersion 8.6 

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

     def disableEvent(event): return "break" treeviewName.bind("<Button-1>", disableEvent) 

    Если вам действительно нужно проверить, какой виджет был нажат, event.widget содержит виджет, который был нажат.

    Python - лучший язык программирования в мире.