Frame-size больше не отображается после использования grid_forget () - Python tkinter - PullRequest
0 голосов
/ 10 апреля 2020

Я тестировал способ скрытия и показа кадров нажатием кнопки (кнопки станут панелью меню позже). Итак, я создал этот код:

import tkinter as tk
from tkinter import *


win = Tk()

win.geometry("275x350")
win.title("Password Manager")
win.configure(background="white")

frame1 = Frame(win, width=200, height=200)
frame1.grid_propagate(False)
frame2 = Frame(win, width=200, height=200)
frame2.grid_propagate(False)
Label(frame1, text="Hello world", font="20").grid()
Label(frame2, text="Zweiter frame", font="20").grid()

def runGrid(run, destroy):
    run.grid(row=1, column=2)
    destroy.grid_forget()


def run2nd(run, destroy):
    run.grid(row=1, column=2)
    destroy.grid_forget()

Button(win, text="Run", command=lambda:runGrid(frame1, frame2)).grid(row=0, column=0)
Button(win, text="Run 2nd", command=lambda:run2nd(frame2, frame1)).grid(row=0, column=1)


win.mainloop()

Так вот в чем проблема ... После нажатия первой кнопки первый кадр появляется в нужном ему размере. После нажатия 2-й кнопки 2-й кадр подходит к нужному размеру. Но при повторном нажатии первой кнопки (после однократного нажатия обеих кнопок) рамка просто отображается, как grid_propagate было удалено из кода (рамка такая же большая, как и метка в ней). Может кто-нибудь объяснить мне ошибку в моем коде, которая вызывает проблему?

Большое спасибо;)

1 Ответ

1 голос
/ 10 апреля 2020

Я нашел другой способ получить то, что я хочу:

Просто используя grid_remove() вместо grid_forget(), это работает. Но я все еще надеюсь, что кто-то может ответить на мой вопрос, потому что он действительно должен работать и с grid_forget(), я думаю.

...