如何单独从文本小部件中检索行

问题描述 投票:2回答:3

我试图单独检索文本小部件中的每个新行,我有3个Container类实例,第一个实例按预期打印数据但第二​​个实例返回第一行的重复项

我使用object.get('current linestart','current lineend')分别返回新行

完整代码:https://pastebin.com/mLR3zbFg

class Container(tk.Frame):
    def __init__(self, parent = None, priority = 3, bg = 'bisque'):
        self.inpList = []
        self.b = tk.Button(self.f, text = 'add', command = lambda: self.add_task(priority))
    def add_task(self, priority): # refer 1.2_text for implementation
        finished = False
        self.t = tk.Text(self.f)
        self.t.configure(height = 10, wrap = 'word')
        self.t.bind("<Return>", self.save_task)
        self.t.pack(fill = tk.X)


def print_all(self):
    print(self.inpList)

def save_task(self, event):
    td = self.t.get('current linestart', 'current lineend')
    self.inpList.append(td)

if __name__ == '__main__':
    window = tk.Tk()
    window.minsize(300, 600)

    p1 = Container(window, priority = 1)
    p2 = Container(window, bg = 'blue', priority = 2)
    p3 = Container(window, bg = 'red', priority = 3)

    window.mainloop()
python tkinter
3个回答
2
投票

figbeam的答案可能会有效,但如果您输入了大量文本并且您希望单独阅读每一行,那就不会很好。在我看来,这是一个更好的解决方案:

the docs说,current似乎并不像你期望的那样;也就是说,current会给你最接近鼠标的角色(只有当你真正移动你的鼠标时)。这可能是您注意到下面但不是顶部窗口小部件的奇怪行为的原因。

更好的解决方案是移动到文本的末尾,然后向上移动一行,然后使用之前的linestartlineend选择器。即改变

td = self.t.get('current linestart', 'current lineend')

td = self.t.get('end - 1 lines linestart', 'end - 1 lines lineend')

在这次变化之后,事情应该按预期工作!


1
投票

是否有必要分别阅读每一行?否则,您可以将行读入列表,然后单独使用列表项。

据我所知,行的分隔符是换行符,如果使用换行符,可能会使它看起来很奇怪。

以下是将多行读入列表的示例:

line_list = textbox.get('1.0', 'end').split('\n')
for line in line_list:
    # Process line

只是一个想法。


0
投票

线td = self.t.get('current linestart', 'current lineend')不能按预期工作。一种解决方案是在每次更新时阅读文本框的全部内容(如https://stackoverflow.com/a/55739714/2314737中所示)。

在代码中用函数save_task()代替:

def save_task(self, event):
    td = self.t.get("1.0",'end').rstrip()
    self.inpList = td.split('\n')

这也照顾任何删除的行,否则将留在td

另见这个类似的问题:How to read the input(line by line) from a multiline Tkinter Textbox in Python?

© www.soinside.com 2019 - 2024. All rights reserved.