В tkinter кнопка перемещается вниз со своего предыдущего положения, когда текст метки появляется в окне

#python #user-interface #tkinter

#python #пользовательский интерфейс #tkinter

Вопрос:

При нажатии кнопки «Рассчитать ИМТ» значение отображается над кнопкой, как и ожидалось, но нажимает кнопку вниз. Я хочу исправить кнопку независимо от того, нажата она или нет.

 from tkinter import *

window = Tk()
window.title("ASA Downloader")
window.geometry("400x400")
frame1 = LabelFrame(window, padx=100, pady=100)

#Labels
weight_label = Label(frame1, text= "Weight")
height_label = Label(frame1, text= "Height")

weight_label.grid(row=0,column=0, columnspan=3)
height_label.grid(row=1,column=0, columnspan=3)

#Entery of weight
int_type= IntVar
w_entry= Entry(frame1, textvariable= int_type)
w_entry.grid(row=0, column=3, columnspan=2)

#Entery of height
h_entry= Entry(frame1, textvariable= int_type)
h_entry.grid(row=1, column=3, columnspan=2)


def bmi():

    result_lable= Label(frame1, text=w_entry.get())
    result_lable.grid(row=3, column=3)
    
    result_lable.config(text= w_entry.get())
    
    

# Calculate Button
b5 = Button(frame1, text="Calculate BMI", command=bmi)
b5.grid(row=4, column=3, columnspan=3)


frame1.place(relx=.5, rely=.5, anchor="center")
frame1.mainloop()
 

Посмотрите положение кнопки

После нажатия кнопки она немного сдвинулась с предыдущей позиции
Теперь результат печатается в окне, а кнопка перемещается из предыдущей позиции

Комментарии:

1. Установите строку result_label равной 5. Лучше создайте метку вне функции и обновите ее текст внутри функции.

2. Да. вывод метки из функции и обновление ее текста с помощью этой строки сработали. result_lable.config(text= w_entry.get())

Ответ №1:

Вам нужно переместить определение метки из функции. Вместо этого вот так:

 result_lable= Label(frame1)
result_lable.grid(row=3, column=3)

def bmi():
    result_lable.config(text= w_entry.get())
 

Ответ №2:

Я не совсем уверен, чего вы хотите, но если вы хотите зарезервировать место для результата калькулятора BMI, способ сделать это — установить параметр высоты в метке результата. Для этого вам нужно будет инициализировать код при запуске программного обеспечения, чтобы он выглядел так:

 result_lable = Label(frame1, text=w_entry.get(), height=WHATEVER_YOU_WANT)
result_lable.grid(row=3, column=3)

def bmi():
    result_lable.config(text=w_entry.get())
 

Таким образом, между записями и кнопкой будет установлена высота метки, и она не будет отодвинута назад при вычислении.