我有一个标签,我正在设置一个随机数。
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中显示相同的内容......
答案 0 :(得分:0)
您可以创建支持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)
请注意,因为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上获取文本。