【问题标题】:Tkinter: How to get written text from user using text widget and print them in multiple lines?Tkinter:如何使用文本小部件从用户那里获取书面文本并将它们打印成多行?
【发布时间】:2020-07-21 13:59:46
【问题描述】:

我想分三行打印这四行段落,但它总是在一行中。

代码是这样的:

def any():
    v = box.get('1.0',END+'-1c')
    print(v)


box = Text(window,width=50,height=20,wrap = WORD)
box.grid(row=0,column=0,padx=15,pady=15)

btn = Button(window,text = 'Click',command = any).grid(row=0,column=1)
window.mainloop()

在我写的文本框中:

Hello world myself Unknown Program Currently
programming with tkinter and wanna print this three
line code in multiple lines rather than a single
line.

我得到了什么:

Hello world myself Unknown Program Currently pragraming with tkinter rand wanna print this three line code in multiple lines rather than a single line.

它是单行打印的,我想在文本框中打印 4 行。我该怎么做?

【问题讨论】:

  • 小部件中的文本以 50 个字符的宽度自动换行。您可以使用 textwrap 模块以类似的方式格式化您收到的文本。
  • 如果您输入了此问题中表示的数据——在四行的每一行末尾都有换行符——当您调用print 时,它根本不会显示为单行。如果它显示为单行,那么您只需插入没有换行符的数据。您能否更新您的问题以更清楚地说明这一点?

标签: python tkinter


【解决方案1】:

即使您的问题看起来像是您输入了四行文本(即:带有换行符的文本),但对输出的唯一解释是您输入了一行长文本,该文本被自动换行通过文本小部件。

如果由于自动换行而希望打印输出与您看到的内容相匹配,您可以遍历显示的每一行,将它们一一打印出来。 Tkinter 有一种方法可以通过使用“display lineend”修改索引来获取显示行的结尾。例如,"1.0 display lineend" 将表示紧接显示行上最后一个字符之后的位置。

您可以使用它来遍历每个显示的行。以下是您可能如何做到的示例:

index = "1.0"
while box.compare(index, "<", "end"):
    text = box.get(index, f"{index} display lineend")
    print(text)
    index = box.index(f"{index} + 1 display line")

这从索引“1.0”开始,直到显示的第一行末尾的所有内容,然后打印出来。然后它将起始索引调整到下一个显示行的开头,并继续直到起始索引与小部件中的最终索引相同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-17
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多