Python - TKinter - Унищожаване на джаджи без намаляване на височината на рамката

Имам проблем, когато имам рамка в игра, която показва текущия напредък на играта (нека наречем тази рамка; „резултати“).

Ако играчът избере да започне нова игра, всички джаджи в резултатите се унищожават и рамката се забравя да я скрие, докато не бъде използвана отново.

Сега проблемът, който имам, е; Когато резултатите се извикват обратно, това е между два други кадъра. Той обаче е запазил размера си в предишната игра, когато е съдържал всички джаджи, преди джаджите да бъдат унищожени. Приспособленията не се показват в рамката, но все още е с размера, който беше, когато приспособленията бяха там.

Веднага щом нова джаджа бъде поставена в резултатите, размерът се коригира, но не мога да разбера как да направя height = 0. Опитах results.config(height=0), но това не проработи.

Някой знае ли как да "нулирам" размера на рамката на 0?

Съжалявам за пословичната „стена от текст“, но не можах да намеря начин да предоставя кода по компактен начин.

Благодаря


person deadfire19    schedule 17.11.2013    source източник


Отговори (1)


Ако разбирам напълно какво искате, тогава тази илюстрация е правилна:

Синята е рамката на резултатите

въведете описание на изображението тук

Резултатите премахнати, всичко останало преоразмерено:

въведете описание на изображението тук

И съответният код за това е нещо като:

import tkinter

RESULTS_WIDTH = 128

root = tkinter.Tk()

left_frame = tkinter.Frame(root, height=64, bg='#cc3399')
right_frame = tkinter.Frame(root, height=64, bg='#99cc33')

def rem_results(event):
    # Remove widget
    results.destroy()
    # Resize other widthets
    left_frame.config(width=128 + RESULTS_WIDTH/2)
    right_frame.config(width=128 + RESULTS_WIDTH/2)
    # Reposition other widgets
    left_frame.grid(row=0, column=0)
    right_frame.grid(row=0, column=1)

def add_results(event):
    # Create results widget
    global results
    results = tkinter.Frame(root, width=RESULTS_WIDTH, height=64, bg='#3399cc')
    results.grid(row=0, column=1)
    # Resize other widgets
    left_frame.config(width=128)
    right_frame.config(width=128)
    # Reposition other widgets
    left_frame.grid(row=0, column=0)
    right_frame.grid(row=0, column=2)

# Initialize results
add_results(None)

# Bind actions to <- and -> buttons
root.bind( '<Left>', rem_results )
root.bind( '<Right>', add_results )

#$ Enter eventloop
root.mainloop()
person Peter Varo    schedule 17.11.2013
comment
Не, в нито един момент не разрушавам рамката на резултата. Използвам results.pack_forget(), за да го премахна, за да спестя необходимостта да създавам рамката всеки път. Освен това избягва използването на global, което не е добре да се използва afaik, така че го избягвам. - person deadfire19; 19.11.2013
comment
Не ви препоръчвам да използвате global, аз го направих само тук, защото при SO в tkinter въпроси не използваме класове, за да помогнем за решаването на проблем (за по-лесно разбиране), само ако OP предоставят код, който използва OO. Но тъй като не публикувахте нищо от вашия код, трябваше да го напиша от нулата. Следващият път трябва да създадете опростена версия на вашия код и да я поставите заедно с въпроса си и ще имате по-добър отговор. - person Peter Varo; 19.11.2013