【问题标题】:How to draw a polygon on a tkinter canvas using a class?如何使用类在 tkinter 画布上绘制多边形?
【发布时间】:2015-11-17 12:45:59
【问题描述】:
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

【问题讨论】:

    标签: python python-3.x tkinter tkinter-canvas


    【解决方案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()
    

    如需更多帮助,请添加 cmets。

    【讨论】:

    • 在绘制形状时要求解释坐标是如何工作的会很粗鲁吗?
    • 当您调用create_polygon([150,75,225,0,300,75,225,150] 时,它开始从(150,75)(225,0) 画线,以此类推,最后从最后一点画线到起点。
    • 请注意__init__ 方法是完全多余的,并且没有帮助,因为它会阻止您将参数传递给Canvas.__init__()。通过删除它,您将确保从Canvas 继承的__init__ 将被调用(在GUI 上提供给调用的任何参数)
    • 如果您描述了您所做的更改,您的答案会更有用。否则,我们将逐字将您的代码与原始代码进行比较,看看有什么不同。
    • 感谢一切,有点困惑python如何处理坐标
    猜你喜欢
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 2015-01-08
    • 2020-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多