我用Tkinter写了一个小程序,用户要我添加一个用户可以删除特定行的功能。
我的问题是如何删除Tkinter中的特定文本行?
我的代码:
import tkinter as tk
class MainApplication(tk.Frame):
def __init__(self, parent, *args, **kwargs):
tk.Frame.__init__(self, parent, *args, **kwargs)
self.parent = parent
self.parent.state('zoomed')
self.Scrol = tk.Scrollbar(self.parent)
self.Text = tk.Text(self.parent, height=50, width=100)
self.Scrol.pack(side="right")
self.Text.pack()
self.Scrol.config(command=self.Text.yview)
self.Text.config(yscrollcommand=self.Scrol.set)
self.Text.tag_configure('red', foreground='red', underline=1)
self.count = 0
self.Text.insert('end', "{} test test test".format(str(self.count)) + "\n", 'red')
self.B = tk.Button(self.parent, text="add text", command=self.addText)
self.B.pack()
self.Text.bind("<Double-Button-1>", self.deleteLine)
def deleteLine(self, event):
self.Text.delete(1.0, 2.0)
def addText(self):
self.count += 1
self.Text.insert('end', "{} test test test".format(str(self.count)) + "\n", 'red')
root = tk.Tk()
app = MainApplication(root)
root.mainloop()
现在我的代码每次单击任何一行时都会删除第一行。我想删除我点击的那一行。
答案 0 :(得分:2)
对于删除当前行,最简单的方法可能是Bryan Oakley 's comment中建议的,直接使用'current'
中的delete
参数:
def deleteLine(self, event):
self.Text.delete('current linestart', 'current lineend+1c')
#return "break" # uncomment if you want to disable selection caused by double-clicking
答案 1 :(得分:0)
使用event.x和event.y属性获取用户单击的行号,然后使用“文本”小部件查询对应的行。最后删除该行。一个副作用是文本小部件将选择一些文本,因为这是单击双按钮时文本小部件的默认绑定(不幸的是不可更改)。你可以通过返回&#34; break&#34;来消除它的影响。在deleteLine方法的末尾。
def deleteLine(self, event):
point = '@' + str(event.x) + ',' + str(event.y)
line_number = self.Text.index(point).split('.')[0]
self.Text.delete(line_number + '.0', line_number + '.end + 1 char')
# Interrupt the default sel tag binding.
return "break"