Как нарисовать многоугольник на холсте tkinter в python, используя класс

from tkinter import*

root = Tk()
shape = Canvas(root)

class GUI():
    def __init__(self):
        pass

    def create_polygon(self, points, colour, posit):
        try:
            shape.delete(self.poly)
        except:
            pass
        self.poly = shape.create_polygon(points, colour, posit)
        self.poly.shape.grid(column=posit[0],row=posit[1])

polygon = GUI()
polygon.create_polygon([150,75,225,0,300,75,225,150],'yellow',[1,2])

Привет, я новичок в использовании tkinter и классов, но я хочу сделать очень простой класс для создания правильного многоугольника. Код в этой программе должен удалить любой ранее созданный многоугольник, а затем перейти к созданию нового многоугольника при вызове программы, но я продолжаю получать ошибку, которую не понимаю. Кроме того, как бы вы пошли вместо рисования шестиугольника?

Traceback (most recent call last):
  File "//xsvr-02/Students/10SAMP_Al/HW/polygon creator.py", line 19, in <module>
polygon.create_polygon([150,75,225,0,300,75,225,150],'yellow',[1,2])
 File "//xsvr-02/Students/10SAMP_Al/HW/polygon creator.py", line 15, in create_polygon
self.poly = shape.create_polygon(points, colour, posit)
 File "C:\Python34\lib\tkinter\__init__.py", line 2305, in create_polygon
return self._create('polygon', args, kw)
File "C:\Python34\lib\tkinter\__init__.py", line 2287, in _create
*(args + self._options(cnf, kw))))
_tkinter.TclError: wrong # coordinates: expected an even number, got 11

1 ответ

Решение

Это просто неверные параметры вызова.

Если вы хотите изменить свой код, это решение может помочь вам.

Класс GUI просто наследует от Canvas и ничего не реализует.

from Tkinter import*

root = Tk()

class GUI(Canvas):
    '''inherits Canvas class (all Canvas methodes, attributes will be accessible)
       You can add your customized methods here.
    '''
    def __init__(self,master,*args,**kwargs):
        Canvas.__init__(self, master=master, *args, **kwargs)

polygon = GUI(root)
polygon.create_polygon([150,75,225,0,300,75,225,150],     outline='gray', 
            fill='gray', width=2)

polygon.pack()
root.mainloop()

Для получения дополнительной помощи добавьте комментарии.

Другие вопросы по тегам