Кнопка печати tkinter одна и та же вещь несколько раз - PullRequest
0 голосов
/ 01 апреля 2020

В настоящее время я работаю над небольшим развлекательным проектом, который притворяется, что он что-то генерирует, а затем показывает конкретное сообщение c, но у меня есть вопрос: как только я нажимаю кнопку на экране, это показывая индикатор выполнения, это то, что я хочу, но если я нажимаю кнопку еще раз, он снова и снова показывает одно и то же, есть ли способ, чтобы программа не печатала несколько раз Запуск текста и индикатор выполнения ?

Вот код:

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

Ответы [ 2 ]

0 голосов
/ 01 апреля 2020

Использование класса - это хороший способ.

Если вы не хотите создавать класс, вы можете создать Label из функции И использовать .pack() в функции.

Вот оно:

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():
    startlabel.pack()
    pb.pack()
    pb.start(500)

#Widgets

headerlabel = tk.Label(win, text="StackOverFlow Question")

# create the label
startlabel = tk.Label(win, text="Starting to generate...")

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()
0 голосов
/ 01 апреля 2020

Вы можете поместить

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

в функцию, нажатую на кнопку (что глупо, потому что ключевое слово 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()

Надеюсь, что это полезно!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...