簡體   English   中英

如何刪除 tkinter 文本框末尾的空白行?

[英]How to remove blank line at end of tkinter textbox?

當我運行此代碼時,它會在我的文本框底部添加一個空行。 我希望我的文本框在按下返回后只顯示 NEW TEXT,但我不知道如何完成它。 我在這個網站上搜索並找不到答案,所以如果這是一個重復的問題,請提前道歉。

import tkinter as tk

def update(event):
    entry.delete('1.0', tk.END)
    entry.insert('1.0', 'NEW TEXT')
    if entry.get('end-1c', 'end') == '\n':
        entry.delete('end-1c', 'end')

root = tk.Tk()
root.config(bg='snow3')
root.geometry('200x200')
entry = tk.Text(root, height=1.3, width=12)
entry.bind('<Return>', update)
entry.configure(wrap='none')
entry.pack()
root.mainloop()

您不能刪除最后的換行符。 這被烘焙到文本小部件中。

但是,問題不在於內置換行符。 問題是在您的 function 運行之后,返回鍵正在插入換行符。 這是因為您的綁定發生在內置綁定之前,這是 tkinter 處理鍵綁定方式的重要組成部分(並且是一個出色的設計。)。

簡而言之,這就是發生的事情:

  • 用戶按下返回鍵
  • 您的 function 是從特定於小部件的綁定中調用的
  • 你的 function 刪除一切
  • 您的 function 插入新文本
  • 你的 function 返回
  • 文本小部件 class 綁定插入換行符

為防止最后一步發生,您需要從 function 中返回字符串“break”。 這將阻止Text小部件定義的默認行為發生。 最終結果是您對 function 中的小部件所做的更改是用戶按下返回鍵時對小部件所做的唯一更改。

def update(event):
    entry.delete('1.0', tk.END)
    entry.insert('1.0', 'NEW TEXT')
    return "break"

有關為什么會發生這種情況的稍長解釋,請參閱問題Basic query about bindtags in tkinter 的答案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM