删除文本中的特定行

时间:2018-02-02 20:03:00

标签: python tkinter

我用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()

现在我的代码每次单击任何一行时都会删除第一行。我想删除我点击的那一行。

2 个答案:

答案 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"