Python -Tkinter: удаление и создание фреймов меток функций в один клик - PullRequest
0 голосов
/ 16 апреля 2020

Этот код требует двух нажатий после выбора первой кнопки. 1, чтобы очистить старый меточный кадр и перенастроить кнопки, 2, чтобы создать новый кадр.

Можете ли вы сделать так, чтобы это работало в один клик?

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

from tkinter import *
root=Tk()
root.state('zoomed')

def remove_frame(lf):
    lf.destroy()
    a.config(command=A1)
    b.config(command=A2)
    c.config(command=A3)
def A1():
    a.configure(relief=SUNKEN,state=DISABLED)
    b.configure(relief=RAISED,state=ACTIVE)
    c.configure(relief=RAISED,state=ACTIVE)
    lf=LabelFrame(root,text='one')
    lf.pack()
    e=Button(lf,text='one')
    e.pack()
    b.config(command=lambda: remove_frame(lf))
    c.config(command=lambda: remove_frame(lf))
def A2():
    a.configure(relief=RAISED,state=ACTIVE)
    b.configure(relief=SUNKEN,state=DISABLED)
    c.configure(relief=RAISED,state=ACTIVE)
    lf=LabelFrame(root,text='two')
    lf.pack()
    e=Button(lf,text='two')
    e.pack()
    a.config(command=lambda: remove_frame(lf))
    c.config(command=lambda: remove_frame(lf))
def A3():
    a.configure(relief=RAISED,state=ACTIVE)
    b.configure(relief=RAISED,state=ACTIVE)
    c.configure(relief=SUNKEN,state=DISABLED)
    lf=LabelFrame(root,text='three')
    lf.pack()
    e=Button(lf,text='three')
    e.pack()
    a.config(command=lambda: remove_frame(lf))
    b.config(command=lambda: remove_frame(lf))

l=LabelFrame(root,padx=30,pady=20)
l.pack(padx=0,pady=18)

a=Button(l,text="1",command=A1)
a.grid(row=0,column=1)
b=Button(l,text="2",command=A2)
b.grid(row=0,column=2)
c=Button(l,text="3",command=A3)
c.grid(row=0,column=3)
d=Button(l, text="4",command=root.quit)
d.grid(row=0,column=4)

mainloop()

1 Ответ

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

pradepghr ответил 26 июня 17 в 16: 42

"Вы можете просто использовать лямбду следующим образом:" self.testButton = Button(self, text=" test", command=lambda:[funct1(),funct2()])

Решением было остановить конфигурацию в remove_frame и добавить несколько привязок к оригинальные функции.

def remove_frame(lf):
    lf.destroy()
    # a.config(command=A1)
    # b.config(command=A2)
    # c.config(command=A3)
def A1():
    a.config(relief=SUNKEN,state=DISABLED)
    b.config(relief=RAISED,state=ACTIVE)
    c.config(relief=RAISED,state=ACTIVE)
    lf=LabelFrame(root,text='one')
    lf.pack()
    e=Button(lf,text='one')
    e.pack()

    b.config(command=lambda:[remove_frame(lf),A2()])
    c.config(command=lambda:[remove_frame(lf),A3()])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...