如何将random.sample结果输出到Tkinter的Text组件而非终端?
解决Tkinter GUI中把随机号码显示到文本框的问题
嘿,我来帮你搞定这个问题!你现在遇到的情况是生成的彩票号码只会输出到终端,没法显示在界面的output文本框里对吧?咱们直接修改代码里的关键部分就能解决:
问题根源
原来的x()函数用print()把结果输出到了终端,而要把内容放到Tkinter的Text组件中,得用Text组件的insert()方法;另外每次生成新号码前最好清空旧内容,避免内容叠加。还要注意:Text组件没有command属性,你之前调整它的command是没用的,按钮绑定x()的逻辑是对的,只需要修改x()函数内部即可。
修改后的完整代码
我把关键修改部分标出来了,你可以直接替换原来的代码:
from Tkinter import * import random import webbrowser url = 'http://www.google.co.uk' def OpenUrl(): webbrowser.open(url) # 重点修改的x()函数 def x(): # 清空文本框旧内容:1.0代表第一行第一列,END代表文本末尾 output.delete(1.0, END) # 生成6个1-59之间的随机不重复号码 numbers = random.sample(range(1, 60), 6) # 把列表转成友好的字符串格式,还加了排序让号码按从小到大排列 num_str = ' '.join(map(str, sorted(numbers))) # 把号码插入到文本框中 output.insert(END, num_str) window = Tk() window.title("UK Lotto Killa") window.geometry("275x275") l1 = Label(window, text=" UK Lotto Number Generator", font="bold") l1.grid(row=1, column=1, sticky=W) l2 = Label(window, text=" bitsnpcs (2018)", fg="grey", font="none 8") l2.grid(row=13, column=1, sticky=W) output = Text(window, width=23, height=2) output.grid(row=3, column=1, sticky=W) # 以下间距标签和按钮部分保持不变 l3 = Label(window, text=" ") l3.grid(row=2, column=1, sticky=W) l3 = Label(window, text=" ") l3.grid(row=4, column=1, sticky=W) l3 = Label(window, text=" ") l3.grid(row=0, column=1, sticky=W) l3 = Label(window, text=" ") l3.grid(row=10, column=1, sticky=W) l3 = Label(window, text=" ") l3.grid(row=6, column=1, sticky=W) l3 = Label(window, text=" ") l3.grid(row=12, column=1, sticky=W) l3 = Label(window, text=" You have Options - ") l3.grid(row=7, column=1, sticky=W) l3 = Label(window, text=" Donate % of winnings to favorite project.") l3.grid(row=8, column=1, sticky=W) l3 = Label(window, text=" Donate stake to favorite project.") l3.grid(row=9, column=1, sticky=W) Button(window, text="Generate Numbers", width=16, command = x).grid(row=4, column=1, sticky=W) Button(window, text="Donate", width=6, command=OpenUrl).grid(row=11, column=1, sticky=W) window.mainloop()
关键修改点说明
- 清空文本框:每次生成新号码前用
output.delete(1.0, END)清除旧内容,避免多次点击后内容堆积。 - 格式化号码:把
random.sample返回的列表转成字符串,还加了sorted()让号码按从小到大排列,更符合彩票的展示逻辑。 - 插入到文本框:用
output.insert(END, num_str)把格式化后的号码插入到文本框的末尾。
这样点击"Generate Numbers"按钮时,号码就会显示在按钮上方的文本框里啦!
内容的提问来源于stack exchange,提问作者Jade
相关产品推荐
相关产品推荐

