2015-11-17 3 views
0
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 и классов, но хочу создать очень простой класс для создания правильного многоугольника. Код в этой программе должен удалить ранее сделанный полигон, а затем приступить к созданию нового многоугольника при вызове программы, но я продолжаю получать ошибку, которую я не понимаю. Также как бы вы взялись за использование шестиугольника?Как нарисовать многоугольник на холсте tkinter в python, используя класс

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 

ответ

2

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

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

Класс 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() 

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

+0

Спасибо за помощь! –

+0

Было бы грубым попросить объяснить, как работают координаты при рисовании фигур? –

+0

Когда вы вызываете 'create_polygon ([150,75,225,0,300,75,225,150]', он начинает рисовать строки из '(150,75)' to '(225,0)' и т. Д., В конце концов он рисует линию из последней точки – Zety

Смежные вопросы