我在获取tkinter文本框的内容时遇到问题。如果我从Excel中粘贴信息(例如),它总是在底部添加一个空行。我想自动删除该行。这就是我用来获取内容的内容:
contents = inputText.get(1.0, "end-1c")
for line in contents.split("\n"):
line = line.strip()
我最初在其末尾添加了一个'[:-1]',它有效,但仅适用于粘贴到文本框中的文本。如果你手动输入文字,那么显然最后没有尾随'\ n',所以它最终删除了输入的最后一个字符。不好!</ p>
如何让它删除(或忽略)尾随的空行?代码中的'line = line.strip()'进一步向下似乎没有效果。
谢谢,克里斯。
答案 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(换行/回车)打字机时代风格的控制代码是什么。