My purpose is to get the mouse selected text through the Tkinter Text
control.
Part of the code:
self.Text1 = Text(top)
self.Text1.place(relx=0.07, rely=0.09, relheight=0.04, relwidth=0.34)
self.Text1.configure(background="white")
self.Text1.configure(font="TkTextFont")
self.Text1.configure(foreground="black")
self.Text1.configure(highlightbackground="#d9d9d9")
self.Text1.configure(highlightcolor="black")
self.Text1.configure(insertbackground="black")
self.Text1.configure(selectbackground="#c4c4c4")
self.Text1.configure(selectforeground="black")
self.Text1.configure(width=294)
self.Text1.configure(wrap=WORD)
self.Scrolledtext1 = ScrolledText(top)
self.Scrolledtext1.place(relx=0.46, rely=0.19, relheight=0.62
, relwidth=0.4)
self.Scrolledtext1.configure(background="white")
self.Scrolledtext1.configure(font="TkTextFont")
self.Scrolledtext1.configure(foreground="black")
self.Scrolledtext1.configure(highlightbackground="#d9d9d9")
self.Scrolledtext1.configure(highlightcolor="black")
self.Scrolledtext1.configure(insertbackground="black")
def button_down(self,):
global s
s = self.Text1.index('@%s,%s wordstart' % (event.x, event.y))
def button_up(self, ):
global e
e = self.Text1.index('@%s,%s wordend' % (event.x, event.y))
def test(self,):
print(self.Scrolledtext1.get(s,e))
self.Scrolledtext1.bind("<Button-1>", button_down)
self.Scrolledtext1.bind("<ButtonRelease-1>", button_up)
self.Button2.configure(command=test(self,))
Exception in Tkinter callback:
screenshot of traceback showing exception being generated
AttributeError: 'Event' object has no attribute 'Text1'
Your button_up
, button_down
and test
functions are not bound methods. Therefore, they do not get the self
parameter. The value being passed as self
is actually an Event object. Since you use self
in the functions, I would recommend changing them to being bound methods. I assume the code you posted is in the __init__
method. If so, change the last three lines to:
self.Scrolledtext1.bind("<Button-1>", self.button_down)
self.Scrolledtext1.bind("<ButtonRelease-1>", self.button_up)
self.Button2.configure(command=self.test)
And move the three functions to be members of the class:
def button_down(self, event):
global s
s = self.Text1.index('@%s,%s wordstart' % (event.x, event.y))
def button_up(self, event):
global e
e = self.Text1.index('@%s,%s wordend' % (event.x, event.y))
def test(self, event):
print(self.Scrolledtext1.get(s,e))
This is how your class should look afterwards. The three event handler functions are all inside the class.
class YourClassName:
def __init__(self, *args, **kwargs):
# initialization code
# ...
self.Scrolledtext1.bind("<Button-1>", self.button_down)
self.Scrolledtext1.bind("<ButtonRelease-1>", self.button_up)
self.Button2.configure(command=self.test)
def button_down(self, event):
global s
s = self.Text1.index('@%s,%s wordstart' % (event.x, event.y))
def button_up(self, event):
global e
e = self.Text1.index('@%s,%s wordend' % (event.x, event.y))
def test(self, event):
print(self.Scrolledtext1.get(s,e))
Try to pass evt instead of self in your function
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.