【问题标题】:How can I remove newline character (\n) at the end of Text widget?如何删除文本小部件末尾的换行符 (\n)?
【发布时间】:2021-03-23 05:07:42
【问题描述】:

我正在开发 Tkinter GUI。

我想知道如何删除 Text 小部件末尾的换行符 (\n)?这让我的应用看起来很丑,我不想要这个。

示例代码为:

from tkinter import *
from tkinter import ttk

window = Tk()
window.title('Advanced Calculator v0.9')
window.geometry('500x400')
window.resizable(False, False)

window.configure(background='black')

hist_t = Text(window, background='black', height='7', foreground='red', font='Verdana', highlightcolor='grey', highlightthickness=1, relief='solid')

Label(window, text='History:', background='black', foreground='red').pack(pady=3, anchor='w')

hist_t.pack(fill='x', padx=3)

hist_t.insert('end', '4 + 4 = 8\n2 + 2 = 4\n5 + 3 = 8\n10 + 13 = 23\n30 + 10 = 40\n12 + 8 = 20')

window.mainloop()

谢谢。

【问题讨论】:

  • rstrip() 有什么问题?为什么换行符会让你的应用变得丑陋?这只是一个空行。还是您的 Text 小部件中实际上有 \ n 字符对?如果是这样,您需要发布一个重现此问题的minimal reproducible example
  • 如果你只想要6行,为什么要把高度设置为7?
  • 问题是,每当我添加一些文本时,最后总是有空行。

标签: python tkinter


【解决方案1】:

断言:

hist_t = tk.Text(...)

您可以随时调用hist_t.delete('end-1c', 'end') 来删除最后一个字符,在这种情况下是换行符。您也可以仅在换行符时删除最后一个字符:

while hist_t.get('end-1c', 'end') == '\n':
    hist_t.delete('end-1c', 'end')

【讨论】:

  • 无法删除由文本小部件自动添加的最终换行符。
【解决方案2】:

您的问题似乎不是任何额外的换行符,只是您将其配置为显示 7 行,但您只插入了 6 行。如果将高度设置为 6,您将看不到此空白行。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-28
      • 2012-01-27
      • 2011-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多