【问题标题】:How to make a tkinter gui and display printed value如何制作 tkinter gui 并显示打印值
【发布时间】:2022-02-10 12:48:45
【问题描述】:

这是我走了多远......我让获胜者知道我想在 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()

【问题讨论】:

    标签: python tkinter progress-bar


    【解决方案1】:

    您可以做的是将 runn 函数集成到类中并更新类变量(如下例所示,self.winner 为获胜者,self.display_winner 为您要显示的标签);

    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()
    

    我们检查我们是否已经显示了获胜者,如果是,我们删除标签并创建一个新标签。如果不是,我们只需为获胜者添加新标签。如果我们不检查这一点,标签将继续在窗口中堆叠。

    如果你想检查新的获胜者和旧的获胜者,你只需添加另一个变量并检查新的获胜者是否与旧的获胜者匹配;

    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()
    

    【讨论】:

    • 感谢这有很大帮助!
    • 太好了,很高兴为您提供帮助!你还有别的问题吗?如果没有,请将您的问题标记为已回答,祝您度过愉快的一周。
    【解决方案2】:

    我建议您阅读 Tkinter 文档中的更多内容:https://docs.python.org/3/library/tk.html

    您还应该开始使用网格 GUI 而不是堆栈 GUI。网格版本更新,更容易学习和修改。

    只需要导入就足够了:
    from tkinter import *
    from tkinter.ttk import *.

    以下是如何从 Stackoverflow 制作进度条的完整说明:tkinter gui with progress bar

    有很多方法可以显示您的代码:展示框、标签、文本框等。因此请通读文档并找到适合您的小部件的方法。

    【讨论】:

      【解决方案3】:

      可以使用tk.Label替换print()输出,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()
      

      【讨论】:

        猜你喜欢
        • 2023-04-08
        • 1970-01-01
        • 2017-11-18
        • 1970-01-01
        • 2019-01-31
        • 1970-01-01
        • 2017-04-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多