Tôi hiện đang viết trình chỉnh sửa lược đồ màu. Để xem trước sơ đồ, tôi sử dụng một tiện ích văn bản, nơi tôi chèn văn bản với các thẻ màu tương ứng (mà tôi tạo ra theo chương trình).Python tkinter: dừng tuyên truyền sự kiện trong thẻ tiện ích văn bản
Những gì tôi muốn là hành vi sau đây:
- nhấp chuột bất cứ nơi nào trên widget văn bản mà không có văn bản là: màu nền thay đổi
- nhấp chuột trên văn bản chèn vào với một thẻ: thẻ thay đổi tương ứng với màu foreground
Bây giờ đây là vấn đề của tôi:
Khi tôi bấm vào một văn bản được gắn thẻ, các gọi lại của thẻ được gọi. Càng xa càng tốt. Nhưng sau đó, gọi lại của tiện ích văn bản được gọi là tốt, mặc dù tôi trở lại "phá vỡ" trong phương pháp gọi lại thẻ (mà nên dừng xử lý sự kiện tiếp theo). Tôi làm cách nào để ngăn chặn điều này?
Để minh họa cụ thể vấn đề này, tôi đã viết ví dụ làm việc này (đối với Python 2 & 3):
#!/usr/bin/env python
try:
from Tkinter import *
from tkMessageBox import showinfo
except ImportError:
from tkinter import *
from tkinter.messagebox import showinfo
def on_click(event, widget_origin='?'):
showinfo('Click', '"{}"" clicked'.format(widget_origin))
return 'break'
root = Tk()
text = Text(root)
text.pack()
text.insert(CURRENT, 'Some untagged text...\n')
text.bind('<Button-1>', lambda e, w='textwidget': on_click(e, w))
for i in range(5):
tag_name = 'tag_{}'.format(i)
text.tag_config(tag_name)
text.tag_bind(tag_name, '<Button-1>',
lambda e, w=tag_name: on_click(e, w))
text.insert(CURRENT, tag_name + ' ', tag_name)
root.mainloop()
Any help is appreciated!
Chỉnh sửa: Đã thử Python 2.
Thẻ là các mục dành riêng cho văn bản và không có lớp Thẻ. Chúng chắc chắn không được phân lớp từ BaseWidget. Ví dụ, Ditto, cho các hạng mục cụ thể của Canvas như các cung và đường. Giải pháp tốt. –