将多行设置为标签 - Tkinter

时间:2017-02-13 02:00:34

标签: python tkinter

我有一个标签,我正在设置一个随机数。

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中显示相同的内容......

1 个答案:

答案 0 :(得分:0)

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

您可以创建支持StringVar的{​​{1}},以便您可以像文件一样打印到它:

write

然后使用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)

demo app

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

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 方便的语义在GUI上获取文本。