Правильный параметр для передачи связанного события в treeview.identify/identify_region в Tkinter?

У меня есть пара виджетов treeviews tkinter. В целях стиля мне нужно предотвратить ручное изменение размера treeview столбцов width без полного отключения изменения размера столбца.

Используя возможное решение, представленное здесь: Как отключить ручное изменение размера Tkinter Столбец Treeview? я перехватываю события одиночного клика на separators между столбцами и останавливаю событие там. Для этого каждый treeview связывает функцию обработки.

Пример:

self.tree.bind('<Button-1>', lambda event: handle_treeview_single_click(self.tree, event))

def handle_treeview_single_click(tree, event):
    if tree.identify_region(event.x, event.y) == 'separator':
        return 'break'

Запуск кода приводит к следующей ошибке:

  File "C:\Program Files (x86)\Python27\ArcGIS10.2\lib\lib-tk\ttk.py", line 1277, in identify
    return self.tk.call(self._w, "identify", component, x, y)
TclError: bad component "region": must be row or column

это не меняется независимо от объекта, на который я нажимаю (заголовок, ячейка или разделитель). Например, соответствующий параметр выглядит так:

tree = Treeview: .42424440.47830640.47831440.47831800.47831840
x = 464 
y = 14

Не уверен, чего мне здесь не хватает, тем более, что я новичок в python.


person Kamakiri    schedule 15.01.2018    source источник
comment
Я полностью понимаю причину отрицательного ответа. С точки зрения опытного разработчика вопрос может показаться глупым. Используя pycharm и отлаживая его как неопытный, все еще было трудно указать на проблему. Я много пробовал, прежде чем писать сюда. Ссылаясь на: idownvotedbecau.se/noattempt Может быть, вы можете подумать об этом.   -  person Kamakiri    schedule 17.01.2018


Ответы (1)


В исходном коде ttk есть комментарий, объясняющий, почему это может не работать:

def identify_region(self, x, y):
    """
    ...
    * Availability: Tk 8.6"""
    return self.identify("region", x, y)

Поскольку вы используете Python 2.7, вы, вероятно, не используете tk 8.6. Вы можете убедиться в этом, распечатав значение Tkinter.TkVersion

person Bryan Oakley    schedule 15.01.2018
comment
Я проверил версию и вы абсолютно правы. Это 8,5. Большое спасибо. - person Kamakiri; 16.01.2018