文本框小部件上的空行

Blank lines on text box widget

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

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

我最初在其末尾添加了一个“[:-1]”,它有效,但仅适用于粘贴到文本框中的文本。如果您手动输入文本,那么很明显末尾没有尾随 '\n',因此它最终删除了最后输入的字符。不好!

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

谢谢,克里斯。

您的问题不在于获取文本,您的问题在于粘贴添加的内容似乎比您预期的要多。要获取文本,无论它如何在小部件中结束,您都应该使用 .get("1.0", "end-1c")。如果有任何额外的换行符直接来自用户或来自粘贴操作,则根本没有办法知道在您获取小部件的内容时。对于 tkinter,文本就是文本,无论它是如何输入的。

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

如果您真正想要的只是忽略 所有 尾随空白行,请在 调用 之前对数据调用 strip() =12=]

文本框总是在末尾插入一个空行。当编辑文本框并插入另一个空行时,问题变得更加复杂。但是,在编辑过程中,您可以删除空行,这样您就不能一直使用 "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(换行/回车 Return)打字机日风格的控制代码是什么。