python - 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()
解决方案
你可以把
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()
希望这会有所帮助!
推荐阅读
- firebase - 如何将匿名帐户链接到 Flutter 中的电话号码?
- ios - NativeScript-Vue 中的分组 UITableView
- c# - ML.NET 显示哪个分数与哪个标签相关
- php - 将两个数组合二为一,数据对应组合
- python - 机器学习损失高的恒定验证精度
- r - r:在 Flexdashboard 中使用 Shiny 渲染 Kable
- django - 在 django 中使用显示在其他页面上的特定图像进行模板渲染时出错
- botframework - 在没有 .bot 文件的情况下配置机器人
- python - 此代码如何比较列表中的数字并输出最大值?
- ruby-on-rails - 如何在 Rails 3.2 中将兔子作业作为后台进程运行