Очистить содержимое кадра при вызове функции - PullRequest
0 голосов
/ 17 мая 2018

Моя программа создает разные виджеты в зависимости от выбора из переключателя.Все отлично работает, за исключением того, что я не могу очистить старый виджет, если выбран другой переключатель.Предложение здесь: (https://stackoverflow.com/a/15995920/3924118) не работает. Вот соответствующий код.

Из основной программы:

root = Tk()
mainframe = ttk.Frame(root, padding="3 3 12 12")
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
mainframe.columnconfigure(0, weight=1)
mainframe.rowconfigure(0, weight=1)
secondframe = ttk.Frame(mainframe)
secondframe.grid(column=4, row=3)
secondframe.columnconfigure(0, weight=1)
secondframe.columnconfigure(0, weight=1)

А затем функция:

def pct_from_duration():
    """ Calculate needed pct from target duration"""
    tgt_dur_entry = ttk.Entry(mainframe, width=4, textvariable=tgt_dur_inp)
    tgt_dur_entry.grid(column=5, row=3, sticky=(W, E))
    for widget in secondframe.winfo_children():
        widget.destroy()
    ttk.Label(secondframe, textvariable=pct_bond_end).grid(column=1, row=1)
    ttk.Button(mainframe, text="Calculate", command=calculate).grid(column=5, row=4, sticky=W)

FWIW, я не получаю сообщения об ошибке, он просто не удаляет виджеты. Это все Python 3.6.

1 Ответ

0 голосов
/ 17 мая 2018

Может быть, это поможет ... Я приведу пример вашей функции, и она работает (Python 3.5)

import tkinter as tk
from tkinter import *
from tkinter import ttk

class GUI:

    def __init__(self, master):

        def pct_from_duration():
            tgt_dur_entry = ttk.Entry(mainframe, width=4)
            tgt_dur_entry.grid(column=5, row=3, sticky=(W, E))
            for widget in secondframe.winfo_children():
                widget.destroy()
            l3 = ttk.Label(secondframe, text = 'Label').grid(column=1, row=1)
            b2 = ttk.Button(mainframe, text="Calculate").grid(column=5, row=4, sticky=W)

        self.master = master
        mainframe = ttk.Frame(master)
        mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
        mainframe.columnconfigure(0, weight=1)
        mainframe.rowconfigure(0, weight=1)
        secondframe = ttk.Frame(mainframe)
        secondframe.grid(column=4, row=3)
        secondframe.columnconfigure(0, weight=1)
        secondframe.columnconfigure(0, weight=1)
        l = Label(secondframe, text = 'Child_mainframe')
        l.grid()
        l2 = Label(mainframe, text = 'Child_secondframe')
        l2.grid()
        r1 = Radiobutton(master, text="Radiobutton", value=1, command = pct_from_duration).grid()

root = Tk()
root.rowconfigure(0, weight = 1)
root.columnconfigure(1, weight=1)
root.columnconfigure(0, weight=1)
root.columnconfigure(0, weight=2)
my_gui = GUI(root)
root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...