Помогите дописать код на Python
При выборе мышью некоторой опции с направлением и нажатии кнопки «Сдвиг» форма смещается в соответствующем направлении на заданное число пикселей, а метка остается на месте. Если метка касается нижней границы, то программа возвращается в исходное состояние .
from tkinter import *
root = Tk()
root.geometry('800x600')
'''метка'''
group_label = Label(root,
text="ФМ-14-24",
font=("Arial", 16, "bold"),
fg="blue",
bg="lightgray",
padx=20,
pady=10)
group_label.place(relx=0.5, rely=0.5, anchor=CENTER)
'''листбокс'''
lbox = Listbox(width=15, height=4)
lbox.place(x=70, y=50)
for i in ('влево', 'вверх', 'вправо', 'вниз'):
lbox.insert(END, i)
'''радиогруппа'''
step_var = IntVar(value=1)
radio_frame = LabelFrame(root, text="Шаг перемещения", padx=10, pady=10)
radio_frame.place(x=70, y=150)
Radiobutton(radio_frame, text="1 пиксель", variable=step_var, value=1).pack(anchor=W)
Radiobutton(radio_frame, text="2 пикселя", variable=step_var, value=2).pack(anchor=W)
Radiobutton(radio_frame, text="3 пикселя", variable=step_var, value=3).pack(anchor=W)
'''радионабор'''
font_frame = LabelFrame(root, text="Размер шрифта", padx=10, pady=10)
font_frame.place(x=70, y=250)
font_size_var = IntVar(value=12)
for size in range(8, 17):
Radiobutton(font_frame,
text=f"{size} px",
variable=font_size_var,
value=size,
command=lambda: group_label.config(font=("Arial", font_size_var.get(), "bold"))
).pack(anchor=W)
'''кнопка Применить'''
Button(root, text="Применить").place(x=450, y=400)
Button(root, text="Сдвиг", width=10).place(x=250, y=400)
Button(root, text="Закрыть", width=10, command=root.destroy).place(x=350, y=400)
root.mainloop()
сам пиши
Вот дополненный код, который реализует функционал сдвига формы и проверки касания нижней границы:
```python
from tkinter import *
root = Tk()
root.geometry('800x600')
# Сохраняем исходные координаты для возможности сброса
original_x = 800 // 2
original_y = 600 // 2
'''метка'''
group_label = Label(root,
text="ФМ-14-24",
font=("Arial", 16, "bold"),
fg="blue",
bg="lightgray",
padx=20,
pady=10)
group_label.place(relx=0.5, rely=0.5, anchor=CENTER)
'''листбокс'''
lbox = Listbox(width=15, height=4)
lbox.place(x=70, y=50)
for i in ('влево', 'вверх', 'вправо', 'вниз'):
lbox.insert(END, i)
'''радиогруппа'''
step_var = IntVar(value=1)
radio_frame = LabelFrame(root, text="Шаг перемещения", padx=10, pady=10)
radio_frame.place(x=70, y=150)
Radiobutton(radio_frame, text="1 пиксель", variable=step_var, value=1).pack(anchor=W)
Radiobutton(radio_frame, text="2 пикселя", variable=step_var, value=2).pack(anchor=W)
Radiobutton(radio_frame, text="3 пикселя", variable=step_var, value=3).pack(anchor=W)
'''радионабор'''
font_frame = LabelFrame(root, text="Размер шрифта", padx=10, pady=10)
font_frame.place(x=70, y=250)
font_size_var = IntVar(value=12)
for size in range(8, 17):
Radiobutton(font_frame,
text=f"{size} px",
variable=font_size_var,
value=size,
command=lambda: group_label.config(font=("Arial", font_size_var.get(), "bold"))
).pack(anchor=W)
def move_window():
selection = lbox.curselection()
if not selection:
return
direction = lbox.get(selection[0])
step = step_var.get()
# Получаем текущие координаты окна
x = root.winfo_x()
y = root.winfo_y()
# Вычисляем новые координаты в зависимости от направления
if direction == 'влево':
x -= step
elif direction == 'вправо':
x += step
elif direction == 'вверх':
y -= step
elif direction == 'вниз':
y += step
# Применяем новые координаты
root.geometry(f'800x600+{x}+{y}')
# Проверяем, касается ли метка нижней границы
label_y = group_label.winfo_y() + group_label.winfo_height()
window_height = root.winfo_height()
if label_y >= window_height:
# Возвращаем в исходное состояние
root.geometry(f'800x600+{original_x}+{original_y}')
group_label.place(relx=0.5, rely=0.5, anchor=CENTER)
'''кнопка Применить'''
Button(root, text="Применить").place(x=450, y=400)
Button(root, text="Сдвиг", width=10, command=move_window).place(x=250, y=400)
Button(root, text="Закрыть", width=10, command=root.destroy).place(x=350, y=400)
root.mainloop()
```
Основные изменения:
1. Добавлена функция `move_window()`, которая вызывается при нажатии кнопки "Сдвиг"
2. Функция получает выбранное направление из Listbox и значение шага
3. Вычисляет новые координаты окна и перемещает его
4. Проверяет, касается ли метка нижней границы окна
5. Если касается - возвращает окно в исходное положение (по центру экрана) и метку тоже
Обратите внимание, что в исходном коде кнопка "Применить" не имеет команды - возможно, вам нужно добавить для нее функционал. Также вы можете доработать проверку границ для других направлений, если это требуется.
к сожалению работает не правильно
Неиросетью писал?
ФИГА СЕБЕ ТЫ ХАКЕР