tkinter - Как очистить метку при нажатии кнопки второй раз? - PullRequest
0 голосов
/ 19 июня 2020

Я пытаюсь очистить вывод на экране, когда кто-то снова нажимает кнопку.

def eval_click():
    if entry_buysell.get().lower() == 'b':
        stoploss = (float(entry_price.get()) - float(entry_stop_loss.get()))
        take_profit = (float(entry_profit.get()) - float(entry_price.get()))
        ratio = take_profit/stoploss
        if ratio > 2.5:
            output = Label(reasons_window,text="TRADE, risk seems ok.")
            output.grid(row=1, column=2)
        else:
            output = Label(reasons_window,text="DON'T TRADE")
            output.grid(row=1, column=2)

Я пытался использовать output.destroy(), который в основном уничтожает текст, как только он создается.

Я не уверен, как правильно это сделать. Пользователь может вносить изменения в поля ввода и переключатели вывода, но они перезаписываются в последнем сообщении.

Ответы [ 2 ]

2 голосов
/ 19 июня 2020

Вы можете сначала сохранить нажатие кнопки в переменной, чтобы проверить, сколько раз пользователь нажимал кнопку в вашем случае 2 раза, а затем проверьте эту переменную в функции. Теперь у вас есть два варианта

  1. Если вы не хотите снова использовать этот ярлык, просто удалите его с помощью l1.destroy(), а также добавьте l1.winfo_exists() в условие if для проверки. существует ли виджет или нет.

    if track_clicks > 0 and l1.winfo_exists():
        l1.destroy()
    
  2. Если вы хотите использовать метку позже в программе, просто распакуйте его с помощью pack_forget() или grid_forget() / place_forget() для сетка и разместить менеджеры геометрии соответственно.

    if track_clicks > 0:
        l1.pack_forget()
    
  3. Вы также можете сделать l1.config(text=''), удаляя текст метки.


Вот пример:

import tkinter as tk

track_clicks = 0
def click():
    global track_clicks
    if track_clicks > 0 and l1.winfo_exists():
        l1.destroy() # destroys the label
    track_clicks += 1

root = tk.Tk()

l1 = tk.Label(root, text="DON'T TRADE")
l1.pack()
b1 = tk.Button(root, text='Click :)', command=click)
b1.pack()

root.mainloop()
0 голосов
/ 19 июня 2020

Попробуйте следующее:

output.delete('1.0', END)

Предполагая, что вы используете Python3?

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