Как получить предыдущее значение Tkinter для удаления, когда пользователь нажимает кнопку, и генерировать новое значение?

from tkinter import *
import random as r
from collections import Counter

root = Tk()
root.title("Simple Mafs")
root.geometry("600x400")
root.resizable(False, False)


def open_gn():
    gn_wn = Tk()
    gn_wn.title("Simple Mafs - Generate a number")
    gn_wn.geometry("600x400")
    gn_wn.resizable(False, False)

    Label(gn_wn, text='                                                      ').grid(row=0, column=0)
    inst_gn = Label(gn_wn, text='Enter a minimum and maximum value(below 100)')
    inst_gn.config(font=("Yu Gothic UI", 12))
    inst_gn.grid(row=0, column=1)

    Label(gn_wn, text = " Enter a minimum value: ").place(x=295, y=100)
    entry_min = Entry(gn_wn)
    entry_min.insert(0, "0")
    entry_min.place(x=450, y=100)

    Label(gn_wn, text = " Enter a maximum value: ").place(x=295, y=200)
    entry_max = Entry(gn_wn)
    entry_max.insert(0, "99")
    entry_max.place(x=450, y=200)

    Label(gn_wn, text = "Random value is: ").place(x=40, y=40)

    def generate_number():
        min_ = int(entry_min.get())
        max_ = int(entry_max.get())

        random_num = r.randint(min_, max_)
        d_rn = Label(gn_wn, text=random_num)
        d_rn.config(text=random_num, font=("Yu Gothic UI", 30))
        d_rn.place(x=40, y=100)

    Button(gn_wn, text = "Generate", padx=220, pady=25, command=generate_number).place(x=25, y=280)

    gn_wn.mainloop()


def open_coin():
    c_wn = Tk()
    c_wn.title("Simple Mafs - Flip a Coin")
    c_wn.geometry("600x400")
    c_wn.resizable(False, False)

    Label(c_wn, text = "                                                                                ").grid(row=0,
                                                                                                              column=0)
    Label(c_wn, text = "Flip the coin below!", font=("Yu Gothic UI", 12)).grid(row=0, column=1)

    Label(c_wn, text='                    ').grid(row=1, column=1)

    coin_label = Label(c_wn, text = "")
    coin_label.place(relx=0.5, rely=0.2, anchor='s')

    def flip():
        coin_values = ["Heads", "Tails"]
        coin_face = r.choice(coin_values)
        if coin_face == "Heads":
            coin_label.config(text = "Coin: Heads")
        else:
            coin_label.config(text = "Coin: Tails")

    coin = Button(c_wn, text='coin', padx=100, pady=90, command=flip)
    coin.place(relx=0.5, rely=0.5, anchor=CENTER)

    c_wn.mainloop()


def open_average():
    avg_wn = Tk()
    avg_wn.title("Simple Mafs - Averages")
    avg_wn.geometry("840x300")

    Label(avg_wn, text = "              ").grid(row=0, column=0)
    avg_instruct = Label(avg_wn, text = "Enter your values below to get the averages in mean, median, and mode(put a "
                                      "space between commas")
    avg_instruct.config(font=("Yu Gothic UI", 10))
    avg_instruct.grid(row=0, column=1)

    Label(avg_wn, text = "                                     ").grid(row=1, column=0)
    entry = Entry(avg_wn)
    entry.grid(row=2, column=1)

    def calculate():
        list_data = entry.get().split(', ')
        list_data = [float(i) for i in list_data]
        mean = sum(list_data) / len(list_data)
        Label(avg_wn, text='Mean').grid(row=5, column=0)
        Label(avg_wn, text=str(mean)).grid(row=6, column=0)

        list_data_len = len(list_data)
        list_data.sort()

        if list_data_len % 2 == 0:
            median1 = list_data[list_data_len // 2]
            median2 = list_data[list_data_len // 2 - 1]
            median = (median1 + median2) / 2
        else:
            median = list_data[list_data_len // 2]
        Label(avg_wn, text='Median: ').grid(row=5, column=1)
        Label(avg_wn, text=median).grid(row=6, column=1)
        list_data_for_mode = Counter(list_data)
        get_mode = dict(list_data_for_mode)
        mode = [k for k, v in get_mode.items() if v == max(list(list_data_for_mode.values()))]

        if len(mode) == list_data_len:
            get_mode = ["No mode found"]
        else:
            get_mode = [str(i) for i in mode]

        Label(avg_wn, text = "Mode: ").grid(row=5, column=2)
        Label(avg_wn, text=get_mode[0]).grid(row=6, column=2)

    Label(avg_wn, text = "                                     ").grid(row=3, column=0)

    Button(avg_wn, text='Enter', command=calculate).grid(row=4, column=1)


def rand_stat():
    pass


Label(root, text = "                                           ").grid(row=0, column=0)

title = Label(root, text = "Welcome to Simple Mafs")
title.config(font=("Yu Gothic UI", 24))
title.grid(row=0, column=1)

button1 = Button(root, text = "Generate a random number", padx=80, pady=25, command=open_gn)
button1.place(x=2.25, y=100)

button2 = Button(root, text = "Calculate mean, mode, median, and range", padx=20, pady=25, command=open_average)
button2.place(x=325, y=100)

button3 = Button(root, text = "Flip a Coin", padx=125, pady=25, command=open_coin)
button3.place(x=2.25, y=200)

button4 = Button(root, text = "Calculator", padx=105, pady=25, command=rand_stat)
button4.place(x=325, y=200)

root.mainloop()

Перейдите к open_gn(), потому что там проблема. Я хочу создать приложение, которое может делать статистические/случайные вещи, и в нем я хочу создать приложение, которое может генерировать случайное число. Приложение генерирует число, но предыдущее значение остается и мешает созданию текущего числа.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
29
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы создаете новый ярлык всякий раз, когда выполняется generate_number(), и помещаете эту новую метку в ту же позицию, которая будет накладываться на предыдущую метку.

Вам нужно один раз создать метку вне функции и просто обновить ее текст внутри функции:

def open_gn():
    ...
    Label(gn_wn, text = "Random value is: ").place(x=40, y=40)
    # create label for generated random number
    d_rn = Label(gn_wn, font=("Yu Gothic UI", 30))
    d_rn.place(x=40, y=100)

    def generate_number():
        min_ = int(entry_min.get())
        max_ = int(entry_max.get())

        random_num = r.randint(min_, max_)
        d_rn.config(text=random_num) # update label

    ...

Другие вопросы по теме