Ваш код довольно плохо организован, и вы не дали нам никакого представления о своем нынешнем мышлении.Вместе с тем, ваша функция перемещения кнопки вниз практически не имеет смысла, и ее необходимо полностью переписать. Мне было бы интересно, почему вы думали, что петли необходимы для достижения вашей цели.Я не говорю, что эти вещи должны быть злыми или обескураживающими, а просто подчеркивают серьезность текущего качества вашего кода.Построение программы намного большей, чем эта, будет чрезвычайно трудным без надлежащей организации и планирования.
Вот мой код, а затем ниже я объясню свой мыслительный процесс:
from tkinter import *
#Definitions
window_w = 300
window_h = 200
button_x = 0
button_y = 0
#Functions
def move_button_down():
global button_x, button_y, b
if (button_y < window_h - 50):
button_y = button_y + 10
b.place_forget()
b.place(x = button_x, y = button_y)
#Main Code
root = Tk()
size = str(window_w) + "x" + str(window_h)
root.geometry(size)
root.resizable(1, 0)
b = Button(root, text="Delete me", command=move_button_down)
b.place(x = button_x, y = button_y)
root.mainloop()
Прежде всего,Я начал с разделения вашего кода на разделы, чтобы он был читабельным, а затем я определил важные переменные, которые помогут сохранить наш код организованным и модульным.Определяя ширину и высоту окон в переменных, мы можем использовать это в коде, и я также добавил возможность для вашего окна начинать размер с отключенным горизонтальным изменением размера (но не вертикальным, если вы хотите знать, как включить / отключить оба),Позиции кнопок x и y определены для больших программ, и для более крупных программ вам потребуется вести список объектов / массивов со значениями x, y и, возможно, z для всех ваших компонентов графического интерфейса.
Для вашей функции я правильно назвал ее (иногда я тоже дважды пишу с заглавной буквы, но качество кода важно, кашель "CLick") и включил глобальные переменные (что вы должны были сделать ранее с "b").В дополнение к добавлению правильной функциональности (button_y = button_y + 10
) я также позаботился о том, чтобы кнопка не могла выходить за край экрана, поэтому всегда полезно определять размер окна с помощью переменных.
ДляОсновной код ничего не изменил, кроме имени функции и размера окна дополнений.