首页 > 解决方案 > tkinter 按钮多次打印相同的东西

问题描述

我目前正在做一个有趣的项目,它假装它正在生成一些东西,然后显示一条特定的消息,但我有一个问题:只要我按下屏幕上的按钮,它就会显示一个进度条,即我想要它做什么,但是如果我再次按下按钮,它只会一次又一次地显示相同的内容,有没有办法阻止程序多次打印启动生成文本和进度条?

这是代码:

# my little import area
import tkinter as tk
from tkinter import ttk

# Initialization
win = tk.Tk()
win.title("StackOverflow")

# Window Size
win.resizable(False, False)
win.minsize(750,500)

# Button clicked command
def buttonclicked():
    tk.Label(win, text="Starting to generate...").pack()
    pb.pack()
    pb.start(500)

#Widgets

headerlabel = tk.Label(win, text="StackOverFlow Question")
generatebutton = tk.Button(win, text="Generate", command=buttonclicked)
pb = ttk.Progressbar(win, orient="horizontal", length=250, mode="determinate")

#Positioning
headerlabel.pack()
generatebutton.pack()

win.mainloop()

标签: pythondebuggingtkinter

解决方案


你可以把

global generatebutton
generatebutton.config(state='disabled')

在您的 buttonclicked 函数中(这很愚蠢,因为该global关键字通常使用起来很糟糕,它会将您的代码变成噩梦),或者使用 OOP 来发挥您的优势。您也可以使用win.destroy()generatebutton.destroy()

这是更多 OOP 密集型代码示例:

import tkinter as tk
from tkinter import ttk

class Joke:
    def __init__(self):
        self.win = tk.Tk()
        self.win.title("StackOverflow")

        self.win.resizable(False, False)
        self.win.minsize(750,500)

        headerlabel = tk.Label(self.win, text="StackOverFlow Question")
        self.generatebutton = tk.Button(self.win, text="Generate", command=self.buttonclicked)
        self.pb = ttk.Progressbar(self.win, orient="horizontal", length=250, mode="determinate")

        headerlabel.pack()
        self.generatebutton.pack()

        self.win.mainloop()

    def buttonclicked(self):
        tk.Label(self.win, text="Starting to generate...").pack()
        self.pb.pack()
        self.pb.start(500)
        self.generatebutton.config(state='disabled')

Joke()

希望这会有所帮助!


推荐阅读