Получить флажок для создания / удаления окна, когда отмечен / не отмечен - PullRequest
0 голосов
/ 11 апреля 2019

Я хочу установить флажок, который при проверке создает виджет прокручиваемого текста, а при снятии флажка - виджет удаляется.

В настоящее время он создает виджет только после того, как я установил флажок, а затем снял флажок, а затем при повторной проверке он ничего не делает, а при снятии флажка создает второй виджет ниже.

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

# Creates Normal Checkbutton
chk_state = BooleanVar()
chk_state.set(False)  # set check state
chk = Checkbutton(window, text='Normal Entries', var=chk_state)
chk.place(x=0, y=0)

#Checks Checkbutton State
def chk_checked(event):
    txt = scrolledtext.ScrolledText(window, height=15, width=35)
    if chk_state.get():
        txt.insert(END, 'Paste Normal Entries Here...')
        txt.pack(anchor='nw', padx=50, pady=50)
    elif txt.winfo_exists():
        txt.pack_forget()
    else:
        pass

#Event when checkbox checked
chk.bind('<Button-1>', chk_checked)

1 Ответ

2 голосов
/ 11 апреля 2019

Вы можете попробовать как это

import tkinter as tk
from tkinter.scrolledtext import ScrolledText

def chk_checked():
    global txt
    if chk_state.get():
        txt = ScrolledText(window, height=15, width=35)
        txt.insert(tk.END, 'Paste Normal Entries Here...')
        txt.pack(anchor='nw', padx=50, pady=50)
    else:
        txt.pack_forget()

window = tk.Tk()
chk_state = tk.BooleanVar()
chk_state.set(False)  # set check state
chk = tk.Checkbutton(window, text='Normal Entries', var=chk_state, command=chk_checked)
chk.place(x=0, y=0)
txt = None

window.mainloop()

Это не лучший способ сделать это, может быть, вы можете создать класс, я думаю, что это было бы лучше.

Проблемас вашим кодом то, что каждый раз, когда вы нажимаете CheckButton, функция chk_checked(event) создает новый ScrolledText, а после работы над ним вместо этого работает с ScrolledText, который был создан ранее.Вы должны объявить global variable (вместо local variable), в котором вы храните ScrolledText, который хотите использовать, и работать только с ним

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