Помогите разобраться с tkinter и random.randrange

Vadim_23_03

Новичок
Пользователь
Апр 30, 2023
32
1
8
Windows 10
IDLE 3,10
Задание в книги было такое ,создать холст и нарисовать на нём в случайном порядке треугольники по всему холсту . Я написал код , но мне выдает ошибку NameError: name 'x1' is not defined. Помогите разобраться что я делаю не так. Объясните мне мою ошибку.

Python:
import random
from tkinter import *
from random import*
tk=Tk()
tk.title ('Треугольники')
canvas=Canvas(tk ,width=500 ,height=500)
canvas.pack()
def treagles(width,height):
    x1=random.randrange(width)
    y1=random.randrange(height)
    x2=x1+random.randrange(width)
    y2=y1+random.randrange(height)
    x3=x2+random.randrange(width)
    y3=y2+random.randrange(height)
canvas.create_polygon(x1,y1,x2,y2,x3,y3,fill="",outline="black")
 

4olshoy_blen

Популярный
Пользователь
Ноя 13, 2022
465
128
43
У вас функция treagles() создает переменные, но мало того что они локальные, так сама функция нигде не вызывается, а если бы и вызывалась, то ничего не возвращала бы (вернее она возвратила бы None, но это совсем не то, что нужно). И писать вот так from tkinter import * не лучший вариант. Вы импортируете таким образом все атрибуты модуля, которые могут затем конфликтовать с такими же, что создали вы.

Python:
from random import randrange
import tkinter as tk


def create_triangles():
    canvas.create_polygon(*treagles(500, 500), fill="", outline="black")
    root.after(100, create_triangles)  # Повторяем через 100 миллисекунд


def treagles(width, height):
    x1 = randrange(width)
    y1 = randrange(height)
    x2 = x1 + randrange(width)
    y2 = y1 + randrange(height)
    x3 = x2 + randrange(width)
    y3 = y2 + randrange(height)
    return x1, y1, x2, y2, x3, y3


root = tk.Tk()
root.title('Треугольники')

canvas = tk.Canvas(root, width=500, height=500)
canvas.pack()

create_triangles()
tk.mainloop()
 
  • Мне нравится
Реакции: regnor

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