[英]How to make a tkinter gui and display printed value
这就是我走了多远....我让获胜者知道我想在 gui 上显示它这是我的代码:我尝试了很多谷歌搜索但没有找到我希望有人可以帮助我
import tkinter as tk
import random
from progress.bar import Bar
backroundcolor = '#C46C6C'
class Application(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self.geometry('500x500')
self.title('TheXoGenie')
self.configure(bg=backroundcolor)
title = tk.Label(self, text="Welcome to TheXoGenie", font='Helvetica 18 bold', bg=backroundcolor)
title.pack(pady= 2, padx= 2)
run = tk.Button(self, text ="Run", command = runn)
run.pack(pady= 5, padx = 5)
def runn():
PEOPLE = [
'Juan',
'Owen'
]
print("\n\n")
bar = Bar('And the winner is...', max=2)
for i in range(2):
[x for x in range(999999)] # short pause...
bar.next()
bar.finish()
print("\n\n\t{}!\n\n".format(random.choice(PEOPLE)))
print("-" * 60 + "\n")
app = Application()
app.mainloop()
您可以做的是将 runn function 集成到 class 中并更新 class 变量(如下例中,self.winner 作为赢家,self.display_winner 作为您要显示的 label);
import tkinter as tk
import random
from progress.bar import Bar
backroundcolor = '#C46C6C'
class Application(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self.winner = None
self.display_winner = None
self.geometry('500x500')
self.title('TheXoGenie')
self.configure(bg=backroundcolor)
title = tk.Label(self, text="Welcome to TheXoGenie", font='Helvetica 18 bold', bg=backroundcolor)
title.pack(pady= 2, padx= 2)
run = tk.Button(self, text ="Run", command = self.runn)
run.pack(pady= 5, padx = 5)
def runn(self):
PEOPLE = [
'Juan',
'Owen'
]
self.winner = random.choice(PEOPLE)
if self.display_winner:
self.display_winner.destroy()
self.display_winner = tk.Label(self, text="The winner is " + self.winner + "!!!", font='Helvetica 32 bold', bg=backroundcolor)
self.display_winner.pack(pady= 10, padx= 2)
app = Application()
app.mainloop()
我们检查我们是否已经显示了获胜者,如果是,我们删除 label 并创建一个新的。 如果不是,我们只需添加新的 label 和获胜者。 如果我们不检查这个,标签将继续堆叠在 window 中。
如果您想将新赢家与旧赢家进行比较,只需添加另一个变量并检查新赢家是否与旧赢家匹配;
import tkinter as tk
import random
from progress.bar import Bar
backroundcolor = '#C46C6C'
class Application(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self.winner = None
self.display_winner = None
self.old_winner = None
self.geometry('500x500')
self.title('TheXoGenie')
self.configure(bg=backroundcolor)
title = tk.Label(self, text="Welcome to TheXoGenie", font='Helvetica 18 bold', bg=backroundcolor)
title.pack(pady= 2, padx= 2)
run = tk.Button(self, text ="Run", command = self.runn)
run.pack(pady= 5, padx = 5)
def runn(self):
PEOPLE = [
'Juan',
'Owen'
]
self.winner = random.choice(PEOPLE)
if self.display_winner:
self.display_winner.destroy()
if self.winner == self.old_winner:
self.display_winner = tk.Label(self, text="The winner is " + self.winner + " again!!!", font='Helvetica 24 bold', bg=backroundcolor)
else:
self.display_winner = tk.Label(self, text="The winner is " + self.winner + "!!!", font='Helvetica 24 bold', bg=backroundcolor)
self.display_winner.pack(pady= 10, padx= 2)
self.old_winner = self.winner
app = Application()
app.mainloop()
我建议您阅读 Tkinter 文档中的更多内容: https://docs.python.org/3/library/tk.html
您还应该开始使用网格 GUI 而不是堆栈 GUI。 网格版本较新,更易于学习和修改。
仅导入就足够了:
从 tkinter 导入 *
从 tkinter.ttk 导入 *.
以下是如何从 Stackoverflow 制作进度条的完整说明: tkinter gui with progress bar
显示代码的方法有很多种:显示框、标签、文本框等。因此请通读文档并找到适合您的小部件的方法。
您可以使用tk.Label
替换print()
output, ttk.Progressbar
替换控制台进度条并使用.after()
更新进度条:
import tkinter as tk
from tkinter import ttk
import random
backgroundcolor = '#C46C6C'
class Application(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self.geometry('500x500')
self.title('TheXoGenie')
self.configure(bg=backgroundcolor)
title = tk.Label(self, text="Welcome to TheXoGenie", font='Helvetica 18 bold', bg=backgroundcolor)
title.pack(pady=2, padx=2)
run = tk.Button(self, text="Run", command=self.runn)
run.pack(pady=5, padx=5)
self.msg = tk.Label(self, text='And the winner is...', font='Helvetica 16 bold', bg=backgroundcolor)
self.bar = ttk.Progressbar(self, orient='horizontal', length=200)
self.winner = tk.Label(self, font='Helvetica 32 bold', bg=backgroundcolor)
def runn(self):
PEOPLE = ['Juan', 'Owen']
# hide the previous winner
self.winner.pack_forget()
# show the message and progress bar
self.msg.pack(pady=10)
self.bar.pack()
def show_winner(n=0):
# update progress bar
self.bar['value'] = n
if n > 100:
# hide the progress bar
self.bar.pack_forget()
# show the winner
self.winner.config(text=random.choice(PEOPLE))
self.winner.pack(pady=10)
else:
# continue the progress bar animation
self.after(300, show_winner, n+20)
show_winner() # start progress bar animation and then show the winner
app = Application()
app.mainloop()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.