Помощь по Python, модуль tkinter

Ledtherule

Новичок
Пользователь
Июн 2, 2020
1
0
1
Приветствую всех посетителей форума! Хочу попросить у вас помощь. Помогите, кому не трудно, с динамикой. Буквально 5-6 задач, чтобы я понял принцип работы, и смог дальше решать сам.
Задачи представлены ниже:
10. Изобразить на экране две прямые, вращающиеся в плоскости экрана каждая вокруг своей точки.
16. Изобразить на экране прямоугольник, вращающийся в плоскости экрана вокруг своего центра.
21. Изобразить на экране отрезок, вращающийся в плоскости экрана вокруг точки, делящей отрезок в отношении 1:3. При этом центр вращения с постоянной скоростью перемещается от одного края экрана до другого параллельно горизонтальной оси экрана.
25. Изобразить на экране прямоугольник, вращающийся в плоскости экрана вокруг одной из своих вершин. При этом центр вращения с постоянной скоростью перемещается от одного края экрана до другого параллельно горизонтальной оси экрана.
28. Изобразить на экране прямоугольник, вращающийся в плоскости экрана вокруг своего центра. При этом центр вращения с постоянной скоростью перемещается от одного края экрана до другого параллельно горизонтальной оси экрана. Кроме того, меняется цвет фигуры при переходе из одного положения в другое и сохраняются все высвеченные положения прямоугольника.
31.
1591089899903.png
 

borntohack

змееуст
Команда форума
Модератор
Апр 22, 2020
78
62
18
39
Москва, РФ
Не очень понятна плотность зарисовки. Для задачи №10 - это просто черный экран, поскольку прямые, как известно, не имеют ни начала ни конца, а №16 - это черный круг радиусом в половину диагонали прямоугольника
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Вот пример решения задачи номер 10:
Python:
import tkinter as tk
import math
import time
import threading


class Application(tk.Frame):

    def __init__(self, *args, **kwargs):
        tk.Frame.__init__(self, *args, **kwargs)

        self.flag = False

        self.btn = tk.Button(root, text='Toggle rotate', command=self.toggle)
        self.btn.pack()

        self.canvas = tk.Canvas(root, width=500, height=250, bg="white")
        self.canvas.pack()

        self.angle = 0

    def toggle(self):
        self.flag = not self.flag
        if self.flag:
            threading.Thread(target=self.rotate).start()

    def rotate(self):
        while self.flag:
            self.canvas.delete('all')
            self.create_new_line(100, 100, 100)
            self.create_new_line(400, 100, 100)
            self.angle += 1
            time.sleep(0.01)

    def create_new_line(self, x1, y1, length):
        angle = math.radians(self.angle)
        end_x = x1 + length * math.cos(angle)
        end_y = y1 + length * math.sin(angle)
        self.canvas.create_line(x1, y1, end_x, end_y)


if __name__ == '__main__':
    root = tk.Tk()
    root.title('Rotated line')
    root.geometry('500x300+300+100')
    root.resizable(False, False)
    Application(root)
    root.mainloop()
 

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