文本框小部件上的空白行

时间:2015-01-22 11:45:37

标签: windows python-2.7 tkinter

我在获取tkinter文本框的内容时遇到问题。如果我从Excel中粘贴信息(例如),它总是在底部添加一个空行。我想自动删除该行。这就是我用来获取内容的内容:

contents = inputText.get(1.0, "end-1c")
for line in contents.split("\n"):
    line = line.strip()

我最初在其末尾添加了一个'[:-1]',它有效,但仅适用于粘贴到文本框中的文本。如果你手动输入文字,那么显然最后没有尾随'\ n',所以它最终删除了输入的最后一个字符。不好!<​​/ p>

如何让它删除(或忽略)尾随的空行?代码中的'line = line.strip()'进一步向下似乎没有效果。

谢谢,克里斯。

2 个答案:

答案 0 :(得分:1)

你的问题不在于获取文本,你的问题是粘贴似乎比你想象的要多。要获取文本,无论其在窗口小部件中的结果如何,都应使用.get("1.0", "end-1c")。如果任何额外的换行直接来自用户或来自粘贴操作,那么在获取窗口小部件的内容时根本无法知道。对于tkinter,无论文本是如何输入的,文本都是文本。

唯一的解决方案是调整粘贴绑定,即使这是有问题的,因为我认为tkinter无法知道剪贴板内容是来自excel还是来自其他来源。

如果您真正想要的是忽略所有尾随空白行,请在调用strip()

之前在数据上调用split("\n")

答案 1 :(得分:0)

文本框总是在末尾插入一个空行。编辑文本框并插入另一个空行时,问题变得更加复杂。但是,在编辑过程中,您可以删除空行,这样您就不能一直使用 "end-1c"

诀窍是在编辑后删除 1 个或多个额外的空行:

    # Rebuild lyrics from textbox
    self.work_lyrics_score = \
        self.lyrics_score_box.get('1.0', tk.END)
    while self.work_lyrics_score.endswith('\n\n'):
        # Drop last blank line which textbox automatically inserts.
        # User may have manually deleted during edit so don't always assume
        self.work_lyrics_score = self.work_lyrics_score[:-1]       

请注意,这是在 Linux 上。对于 Windows,您可能需要以下内容:

    while self.work_lyrics_score.endswith('\n\r\n\r'):
        # Drop last blank line which textbox automatically inserts.
        # User may have manually deleted during edit so don't always assume
        self.work_lyrics_score = self.work_lyrics_score[:-2]

或者无论 DOS/Windows LF/CR(换行/回车)打字机时代风格的控制代码是什么。