【问题标题】:How to not select blank text in tkinter text widget?如何不在 tkinter 文本小部件中选择空白文本?
【发布时间】:2021-06-11 02:48:48
【问题描述】:

有什么方法可以不在 tkinter 中选择空白文本。

代码如下:

from tkinter import *

root = Tk()

text = Text(root , width = 65 , height = 20 , font = "consolas 14")
text.pack()

text.insert('1.0' , "This is the first line.\n\nThis is the third line.\n\nThis is the fifth line.")

mainloop()

在这里,当我选择几行时,每行末尾的空白文本也会被选中。

我希望空白文本不应该被选中。

有没有办法在 tkinter 中实现这一点?

如果有人可以帮助我,那就太好了。

【问题讨论】:

    标签: python tkinter selection text-widget


    【解决方案1】:

    选择的并不是真正的“区域”:Text 对象包含(和 选择)字符,而不是区域。重要的是区分 被选中的字符,以及它们在屏幕上的表现。

    每行的最后一个字符是换行符'\n'(实际上是 定义一个)。当您将鼠标移到点 '.'(向右)之外时, 您正在选择中包含换行符。

    现在,Text 小部件通常会将前景色和背景色反转为 表示选择了一个字符,但没有显式绘制换行符 作为一个字符,它实际上是不可见的(除了文本 跳到下一行)。这些困扰你的空白区域只是 文本小部件告诉您已选择换行符的方式, 而且我认为您无法更改此显示行为。

    【讨论】:

    • @juao,是的,我实际上是指“空白区域”的空白文本,也许我应该进行编辑。
    • 您对选择的内容感兴趣吗?或者正在 显示什么 ?您的问题不清楚。
    • @juao:我实际上对两者都感兴趣。我不希望空白文本被选中,我也不希望向用户显示空白文本正在被选中。
    • 您的文本有换行符,因为它有多行。我认为 Text 小部件没有不选择换行符的选项。为什么不直接选择所有内容然后执行 s.replace('\n', '')
    • 如果我使用它,所有文本都将保留在一行中,并且不会有换行符。
    【解决方案2】:

    有什么方法可以在 tkinter 中不选择空白文本。

    不,这就是 tkinter 在视觉上表示选择换行符的方式。

    这样做的唯一方法是将 tkinter 的默认选择机制替换为不选择换行符,但是当您获得选择时,您将不会获得换行符。我认为用户会对此感到非常惊讶。

    【讨论】:

    • The only way to do it would be to replace tkinter's default selection mechanism to not select newlines。你好@BryanOakley,你能否在你的回答中提供一些代码来说明我如何实施这个建议?
    • @Lenovo360:不,这是很多工作。我没有时间为您实施解决方案。您只需为按钮单击和拖动设置绑定,并手动将sel 标签添加到除换行符之外的所有内容。如果你这样做,当你复制和粘贴数据时,你会得到一个长字符串而不是多行,因为你会明确地忽略换行符。没有办法知道一行在哪里结束,下一行从哪里开始。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多