Top.Mail.Ru
Ответы

Помогите дописать код на Python

При выборе мышью некоторой опции с направлением и нажатии кнопки «Сдвиг» форма смещается в соответствующем направлении на заданное число пикселей, а метка остается на месте. Если метка касается нижней границы, то программа возвращается в исходное состояние .

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
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()

По дате
По рейтингу
Аватар пользователя
Мастер
8мес

сам пиши

Аватар пользователя
Гений
8мес

Вот дополненный код, который реализует функционал сдвига формы и проверки касания нижней границы:

```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. Если касается - возвращает окно в исходное положение (по центру экрана) и метку тоже

Обратите внимание, что в исходном коде кнопка "Применить" не имеет команды - возможно, вам нужно добавить для нее функционал. Также вы можете доработать проверку границ для других направлений, если это требуется.

Аватар пользователя
Ученик
8мес

к сожалению работает не правильно

Аватар пользователя
Ученик
8мес

Неиросетью писал?

Аватар пользователя
Ученик
8мес

ФИГА СЕБЕ ТЫ ХАКЕР



Видео по теме