Вы можете заменить запись меткой, сначала создав обе, а затем используя pack()
для переключения между ними. Хитрость заключается в том, чтобы не допустить, чтобы их разные размеры влияли на макет приложения, что можно сделать, отключив распространение размера.
В моем примере я создаю новый кадр (entry_frame
) с фиксированным размером, а затем отключаю распространение по размеру (.pack_propagate(False)
). Затем я использую этот новый фрейм для записи / метки. Я даю entry_frame
bg цвет хаки, чтобы вы точно видели, где он находится.
Я немного поиграл с номерами столбцов.
from tkinter import *
root = Tk()
frame1 = Frame(root)
frame1.pack()
def reset():
text_label.pack_forget()
entry1.pack()
cbtn['state'] = NORMAL
def confirm():
global set_cname
entry1.pack_forget()
text_label.config(text=entry1.get())
text_label.pack(side='left')
entry1.delete(0, 'end')
cbtn['state'] = DISABLED
cname = Label(frame1, text="Customer Name: ")
cname.grid(row=0, column=0, padx=5, pady=5, sticky=W)
entry_frame = Frame(frame1, width=130, height=20, bg='khaki')
entry_frame.grid(row=0, column=1, padx=5, pady=5, sticky='nsew')
entry_frame.pack_propagate(False) # Disable size propagation
entry1 = Entry(entry_frame) # Customer name entry
entry1.pack()
text_label = Label(entry_frame) # Label to hold customer name
cbtn = Button(frame1, text="Confirm", command=confirm, width=20)
cbtn.grid(row=1, column=2, padx=5, pady=5)
rbtn = Button(frame1, text="Reset Names", command=reset, width=20)
rbtn.grid(row=2, column=2, padx=5, pady=5)
root.mainloop()
Имейте в виду, что это решение будет чувствительным к изменениям размера шрифта.