【问题标题】:Setting multiple lines to a label - Tkinter将多行设置为标签 - Tkinter
【发布时间】:2017-06-30 22:30:25
【问题描述】:

我有一个要设置随机数的标签。

output.set(randint(1,4))

output = StringVar()
ttk.Label(mainframe, textvariable=output)

我还有一个条目,用户可以在其中指定他们想要生成多少个随机数。

ttk.Entry(mainframe, textvariable=numberdice, width=5)

我想要做的是让这两个值一起工作,并让输出标签打印多行。

我使用 for 循环将其打印到控制台:

for x in range(int(numberdice)):
    print(randint(1,4))

但我无法让它在 GUI 中显示相同...

【问题讨论】:

  • @TigerhawkT3 我不确定 dup 目标是否回答了这个问题
  • 首先了解"\n"是一个分隔行的“换行符”字符,print为你将它添加到输出的末尾(除非你指定别的东西:print(5, end="HELLO"))你可以得到整个字符串自己做"\n".join(randint(1,4) for x in range(int(numberdice.get()))) 然后在那个值上做output.set()
  • @TadhgMcDonald-Jensen 我尝试了您的建议,但它返回了一个错误sequence item 0: expected str instance, int found,其中 1) 没有意义,2) 更正为 str 会破坏它。我确实将 numberdice 条目设置为 StringVar,所以我假设它与此有关..
  • 我不记得了,但你能在 Tkinter 标签上放多行吗?我不认为这是可能的。我会使用列表视图或其他东西。

标签: python tkinter


【解决方案1】:

如何使用打印功能显示到 GUI

您可以创建一个支持writeStringVar,这样您就可以像文件一样打印到它:

import tkinter as tk

class WritableStringVar(tk.StringVar):
    def write(self, added_text):
        new_text = self.get() + added_text
        self.set(new_text)

    def clear(self):
        self.set("")

然后使用print(... , file=textvar),您可以添加到字符串变量中,就像打印到控制台一样:

root = tk.Tk()

textvar = WritableStringVar(root)

label = tk.Label(root, textvariable=textvar)
label.pack()

for i in range(4):
    print("hello there", file=textvar)

root.mainloop()

请注意,由于打印语句(默认情况下)在末尾添加换行符,因此标​​签底部会有一个额外的空白行,如果它给您带来问题,可以通过删除换行符并在下次添加时重新插入来解决:

class WritableStringVar(tk.StringVar):
    newline = False
    def write(self, added_text):
        new_text = self.get()
        if self.newline: #add a newline from last write.
            new_text += "\n"
            self.newline = False
        if added_text.endswith("\n"): #remove this newline and remember to add one next write.
            added_text = added_text[:-1]
            self.newline = True
        new_text += added_text
        self.set(new_text)

    def clear(self):
        self.set("")
        self.newline = False

无论哪种方式,您都可以利用 prints 方便的语义在您的 GUI 上获取文本。

【讨论】:

    猜你喜欢
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    • 2023-02-17
    • 2016-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多