आप मनमाने ढंग से घटनाओं (माउस, कीबोर्ड, विंडो प्रबंधक और संभवतः दूसरों बाध्य कर सकते हैं) Tkinter में किसी भी विजेट के लिए।
import Tkinter
from functools import partial
def color_config(widget, color, event):
widget.configure(foreground=color)
parent = Tkinter.Tk()
text = Tkinter.Label(parent, text="Hello Text")
text.bind("<Enter>", partial(color_config, text, "red"))
text.bind("<Leave>", partial(color_config, text, "blue"))
text.pack()
Tkinter.mainloop()
functools.partial
के उपयोग यहाँ आप फिर से उपयोग करने के लिए अनुमति देता है: जब पर माउस को हॉवर
उदाहरण के लिए, विगेट्स के रंग में परिवर्तन बाध्य करने के लिए -
उस के लिए एक अच्छा प्रलेखन http://effbot.org/tkinterbook/tkinter-events-and-bindings.htm पर है आपके टेक्स्ट (लेबल) विजेट के लिए एक चर, क्योंकि आप उन्हें एक सूची में जोड़ रहे हैं। यदि कोई लैम्ब्डा का उपयोग करने के लिए बसने के लिए बस जाएगा, तो आपको एक घृणित आश्चर्य होगा, क्योंकि लैम्बडा फ़ंक्शन के शरीर में विजेट का संदर्भ देने वाला चर हमेशा for
लूप के अंदर के अंतिम मान को इंगित करेगा। functools.partial
उस समय परिवर्तनीय सामग्री को "फ्रीज" करें, जिसे एक बार कहा जाता है, और एक नया फ़ंक्शन उत्पन्न करता है।
हालांकि, चूंकि आप आइटम को कैनस में रख रहे हैं, इसलिए आप प्रत्येक आइटम के लिए "भरें" और "भरने योग्य" विशेषताओं को सेट कर सकते हैं, जैसे @ mgilson के उत्तर में, या आप एक अधिक सामान्य वर्ग नहीं बना सकते हैं केवल होवरिंग, लेकिन बाद में लागू करने के लिए चुनी जाने वाली अन्य घटनाएं।
यदि आपकी कक्षा में __call__
विधि है, तो आप कैनवास के bind
विधि पर इसका एक उदाहरण पास कर सकते हैं, ताकि परिणामस्वरूप ऑब्जेक्ट को कैनवास पर प्रत्येक ईवेंट के लिए बुलाया जा सके। इस मामले में, माउस गति घटना पर्याप्त होता: (। ps कैनवास और पाठ नियुक्ति उदाहरण @ mgilson के जवाब से उधार)
from Tkinter import *
class Follower(object):
def __init__(self,on_color="#fff", off_color="#000"):
self.on_color = on_color
self.off_color = off_color
self.previous_item = None
def hover(self, canvas, item, x, y):
x1, y1, x2, y2 = canvas.bbox(item)
if x1 <= x <= x2 and y1 <= y <= y2:
return True
return False
def __call__(self, event):
canvas = event.widget
item = canvas.find_closest(event.x, event.y)
hovering = self.hover(canvas, item, event.x, event.y)
if (not hovering or item != self.previous_item) and self.previous_item is not None:
canvas.itemconfig(self.previous_item, fill=self.off_color)
if hovering:
canvas.itemconfig(item, fill=self.on_color)
self.previous_item = item
master=Tk()
canvas=Canvas(master)
canvas.pack()
canvas.create_text((40,20),text="Hello World!",fill="black")
canvas.create_text((60,80),text="FooBar",fill="black")
canvas.bind("<Motion>", Follower())
master.mainloop()
आप शायद टैग जोड़ने और/या करने के लिए पाठ वस्तुओं आप ताकि आप उन्हें बाद –