Проблема с функциями привязки в Tkinter

Я сообщил об упрощенной работоспособной версии моего кода, в которой я пытаюсь привязаться к своему Treeview, чтобы выполнить с ним действие. Мои проблемы следующие: функция onSingleClick срабатывает не всегда, функция onDoubleClick никогда не срабатывает.

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

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

Спасибо за время и, пожалуйста, помогите мне исправить эту ошибку!

import tkinter as tk
from tkinter import ttk

class TreeviewM(ttk.Treeview):
    def __init__(self, master=None, **kwargs):
        super().__init__(master, **kwargs)
        
        self.tableId = 0

        # Bind events
        self.bind("<Button-1>", self.on_single_click)
        self.bind("<Double-1>", self.on_double_click)

    def on_single_click(self, event):
        print("Single click event triggered")

    def on_double_click(self, event):
        print("Double click event triggered")

def main():
    root = tk.Tk()
    root.geometry("1000x800")

    columns = ("Name", "Surname")
    table = TreeviewM(root, columns=columns, show = "headings")

    # Define columns and headings
    table.column("Name", width=100, anchor = "center")
    table.column("Surname", width=100, anchor = "center")
    table.heading("Name", text = "Name")
    table.heading("Surname", text = "Surname")
    
    # Insert data
    table.insert("", "end", values=("John", "Doe"))
    table.insert("", "end", values=("Jane", "Doe"))
    
    table.pack(fill = "both", expand=True)

    # Force focus on the widget
    table.focus_set()
    
    root.mainloop()

if __name__ == "__main__":
    main()

Кажется, ваш пример кода работает нормально!?

Derek 14.06.2024 03:42

Какую ОС вы используете? Какой оконный менеджер вы используете?

TheLizzard 14.06.2024 11:57

Попробуйте использовать это. self.bind("<Control-Button-1>", self.on_single_click). Теперь и одинарные, и двойные разделены.

Derek 15.06.2024 05:33
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
71
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Замените self.bind("<Double-1>", self.on_double_click) на self.bind("<Double-Button-1>", self.on_double_click) в строке 12. Я проверил, и это работает с этим изменением.

Спасибо, это помогло решить проблему в моем MRE, но не в полномасштабном коде... в любом случае спасибо.

RandomGuy 14.06.2024 22:58
Ответ принят как подходящий

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

Другие вопросы по теме