Не получается перемещать рисунок(((

ttd2001

Новичок
Пользователь
Мар 17, 2022
12
1
3
Помогите решить задание, никак не получается перемещать фигуру как бы не пыталась.

На форме располагаются:
компонент Canvas размером 200х200, в левом верхнем углу которого находится рисунок размером 40х40;
редактор Text размером 5х5, в левом верхнем углу которого находится латинский символ а;
четыре кнопки со стрелками ↑, ↓, →, ←; две линейки Scale на пять положений.
Кнопки со стрелками синхронно перемещают символ в редакторе и рисунок в контейнере Canvas строго
по периметру, а линейки Scale показывают текущее положение фигур по горизонтали и вертикали.
Закрывает приложение двойной клик по форме.

Вот что мне удалось сделать. Код может быть кривой, так как это отрывки из примеров!


from tkinter import *
from turtle import width
from PIL import Image, ImageTk

#Начальные координаты по X и Y
dx = 10
dy = 10

#Компонент Canvas
def elementCanvas():
global elCanvas
elCanvas = Canvas(
root,
width=200,
height=200,
bg='white')
elCanvas.place(x = dx, y = dy)
elCanvas.pack()
#Изображение
def elementImage():
global image
image = ImageTk.PhotoImage(Image.open("cat(4040).jpg"))
elCanvas.create_image(10+dx, 15+dy, image = image)

"""elCanvas.bind('<Up>', lambda event: elCanvas.move(image, 0,-2))
elCanvas.bind('<Down>', lambda event: elCanvas.move(image, 0, 2))
elCanvas.bind('<Left>', lambda event: elCanvas.move(image, -2, 0))
elCanvas.bind('<Right>', lambda event: elCanvas.move(image, 2, 0))"""

#Редактор Text
def elementText():
global elText
elText = Text(width=5, height=5, bg="White", fg='black')
elText.place(x=182+dx,y=dy)
elText.insert(1.0, "a")

#Кнопки со стрелками


def elementButton_1():
global elButton_1
elButton_1=Button(text="←", bg="white", fg="black", justify="center", width=1, height=1)
elButton_1.place(x=18, y=237)

def elementButton_2():
global elButton_2
elButton_2=Button(text="↑", bg="white", fg="black", justify="center", width=1, height=1)
elButton_2.place(x=35, y=224)

def elementButton_3():
global elButton_3
elButton_3=Button(text="→", bg="white", fg="black", justify="center", width=1, height=1)
elButton_3.place(x=52, y=237)

def elementButton_4():
global elButton_4
elButton_4=Button(text="↓", bg="white", fg="black", justify="center", width=1, height=1)
elButton_4.place(x=35, y=250)

#Линейки Scale
#Горизонатльная линейка Scale
def elementScalehorizontal():
global elScalehorizontal
#Горизонатльная линейка Scale
elScalehorizontal = Scale(orient='horizontal',resolution=1, from_=0, to=5)
elScalehorizontal.place(x=90+dx, y=210+dy)
#Вертикальная линейка Scale
def elementScalevertical():
global elScalevertical
elScalevertical = Scale(orient='vertical',resolution=1, from_=0, to=5)
elScalevertical.place(x=230+dx, y=90+dy)

#Окно программы
def mainWindowProgram():
elementCanvas()
elementImage()
elementText()
elementButton_1()
elementButton_2()
elementButton_3()
elementButton_4()
elementScalehorizontal()
elementScalevertical()

#Вызов программы
def application():
global root
root = Tk()
root.title("20-ЗИЭ Контрольная работа №2. Задание №3. Вариант 2-26. Трофимова Т.Д.")
root.geometry("280x280")
root.resizable(0,0)
mainWindowProgram()
root.bind("<Double-Button-1>", lambda x: root.destroy())
root.mainloop()

application()
Python:
# Контрольная работа студентки группы 20-ЗИЭ Трофимовой Т.Д.
# Дисциплина - Высокоуровневые технологии программирования
# Вариант № 2-26.
# Контрольная работа №2. Задача №3.

"""На форме располагаются:
компонент Canvas размером 200х200, в левом верхнем углу которого находится рисунок размером 40х40;
редактор Text размером 5х5, в левом верхнем углу которого находится латинский символ а;
четыре кнопки со стрелками ↑, ↓, →, ←; две линейки Scale на пять положений.
Кнопки со стрелками синхронно перемещают символ в редакторе и рисунок в контейнере Canvas строго
по периметру, а линейки Scale показывают текущее положение фигур по горизонтали и вертикали.
Закрывает приложение двойной клик по форме."""

from tkinter import *
from turtle import width
from PIL import Image, ImageTk

#Начальные координаты по X и Y
dx = 10
dy = 10

#Компонент Canvas
def elementCanvas():
    global elCanvas
    elCanvas = Canvas(
                root,
                width=200,
                height=200,
                bg='white')
    elCanvas.place(x = dx, y = dy)
    elCanvas.pack()
#Изображение
def elementImage():
    global image
    image = ImageTk.PhotoImage(Image.open("cat(4040).jpg"))
    elCanvas.create_image(10+dx, 15+dy, image = image)
    

    """elCanvas.bind('<Up>', lambda event: elCanvas.move(image, 0,-2))
    elCanvas.bind('<Down>', lambda event: elCanvas.move(image, 0, 2))
    elCanvas.bind('<Left>', lambda event: elCanvas.move(image, -2, 0))
    elCanvas.bind('<Right>', lambda event: elCanvas.move(image, 2, 0))"""

#Редактор Text
def elementText():
    global elText
    elText = Text(width=5, height=5, bg="White", fg='black')
    elText.place(x=182+dx,y=dy)
    elText.insert(1.0, "a")

#Кнопки со стрелками


def elementButton_1():
    global elButton_1
    elButton_1=Button(text="←", bg="white", fg="black", justify="center", width=1, height=1)
    elButton_1.place(x=18, y=237)   

def elementButton_2():
    global elButton_2
    elButton_2=Button(text="↑", bg="white", fg="black", justify="center", width=1, height=1)
    elButton_2.place(x=35, y=224)

def elementButton_3():
    global elButton_3
    elButton_3=Button(text="→", bg="white", fg="black", justify="center", width=1, height=1)
    elButton_3.place(x=52, y=237)

def elementButton_4():
    global elButton_4
    elButton_4=Button(text="↓", bg="white", fg="black", justify="center", width=1, height=1)
    elButton_4.place(x=35, y=250)

#Линейки Scale
#Горизонатльная линейка Scale
def elementScalehorizontal():
    global elScalehorizontal
    #Горизонатльная линейка Scale
    elScalehorizontal = Scale(orient='horizontal',resolution=1, from_=0, to=5)
    elScalehorizontal.place(x=90+dx, y=210+dy)
    #Вертикальная линейка Scale
def elementScalevertical():
    global elScalevertical
    elScalevertical = Scale(orient='vertical',resolution=1, from_=0, to=5)
    elScalevertical.place(x=230+dx, y=90+dy)

#Окно программы
def mainWindowProgram():
    elementCanvas()
    elementImage()
    elementText()
    elementButton_1()
    elementButton_2()
    elementButton_3()
    elementButton_4()
    elementScalehorizontal()
    elementScalevertical()

#Вызов программы
def application():
    global root
    root = Tk()
    root.title("20-ЗИЭ Контрольная работа №2. Задание №3. Вариант 2-26. Трофимова Т.Д.")
    root.geometry("280x280")
    root.resizable(0,0)
    mainWindowProgram()
    root.bind("<Double-Button-1>", lambda x: root.destroy())
    root.mainloop()

application()
 
Последнее редактирование:

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
973
220
43
21
Москва
Вставь пожалуйста код как код
1647162378032-png.1702
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Помогите решить задание, никак не получается перемещать фигуру как бы не пыталась.
Чтобы перемещать элемент на канве нужно сначала получить его tag:
Python:
#Изображение
def elementImage():
    global image
    global image_tag
    image = ImageTk.PhotoImage(Image.open("cat(4040).jpg"))
    image_tag = elCanvas.create_image(10+dx, 15+dy, image = image)
потом создать функцию для перемещения с помощью метода canvas.move:
Python:
def move_image(direction):
    d = {
        "up": lambda: elCanvas.move(image_tag, 0, -40),
        "down": lambda: elCanvas.move(image_tag, 0, 40),
        "left": lambda: elCanvas.move(image_tag, -40, 0),
        "right": lambda: elCanvas.move(image_tag, 40, 0)
    }
    d[direction]()
и привязать ее к кнопкам для вызова по клику на них:
Python:
def elementButton_1():
    global elButton_1
    elButton_1=Button(text="←", bg="white", fg="black", justify="center", width=1, height=1, command=lambda: move_image("left"))
    elButton_1.place(x=18, y=237)   

def elementButton_2():
    global elButton_2
    elButton_2=Button(text="↑", bg="white", fg="black", justify="center", width=1, height=1, command=lambda: move_image("up"))
    elButton_2.place(x=35, y=224)

def elementButton_3():
    global elButton_3
    elButton_3=Button(text="→", bg="white", fg="black", justify="center", width=1, height=1, command=lambda: move_image("right"))
    elButton_3.place(x=52, y=237)

def elementButton_4():
    global elButton_4
    elButton_4=Button(text="↓", bg="white", fg="black", justify="center", width=1, height=1, command=lambda: move_image("down"))
    elButton_4.place(x=35, y=250)
 
  • Мне нравится
Реакции: Vershitel_sudeb

Форум IT Специалистов