2017-01-25 4 views
-3
from tkinter import * 


class Canvas: 
    def __init__(self): 
     window = Tk() 
     window.title("Canvas Demo") 

     # Place a canvas in the window 
     self.canvas = Canvas(window, width=200, height=100, bg="white) 
     self.canvas.pack() 

     # place button in frame 
     frame = Frame(window) 
     frame.pack() 
     btRectangle = Button(frame, text="Rectangle", command=self.displayRect) 
     btOval = Button(frame, text="Oval", command=self.displayOval) 
     btArc = Button(frame, text="Arc", command=self.displayArc) 
     btPolygon = Button(frame, text="Polygon", command=self.displayPolygon) 
     btLine = Button(frame, text="Line", command=self.displayLine) 
     btString = Button(frame, text="String", command=self.displayString) 
     btClear = Button(frame, text="Clear", command=self.displayClear) 

     btRectangle.grid(row=1, column=1) 
     btOval.grid(row=1, column=2) 
     btArc.grid(row=1, column=3) 
     btPolygon.grid(row=1, column=4) 
     btLine.grid(row=1, column=5) 
     btString.grid(row=1, column=6) 
     btClear.grid(row=1, column=7) 

     window.mainloop() 

    def displayRect(self): 
     self.canvas.create_rectangle(10, 10, 190, 90, tags="rect") 

    def displayOval(self): 
     self.canvas.create_oval(10, 10, 190, 90, fill="red", tags="oval") 

    def displayArc(self): 
     self.canvas.create_arc(10, 10, 190, 90, start=0, extent=90, width=8, fill="red", tags="arc") 

    def displayPolygon(self): 
     self.canvas.create_polygon(10, 10, 190, 90, 30, 50, tags="rect") 

    def displayLine(self): 
     self.canvas.create_line(10, 10, 190, 90, fill="red", tags="line") 
     self.canvas.create_line(10, 10, 190, 10, width=9, arrow="last", fill="blue", tags="line") 

    def displayString(self): 
     self.canvas.create_text(60, 40, text="HI, I am String", font="Times 10 bold under line", tags="string") 

    def displayClear(self): 
     self.canvas.delete("rect", "oval", "arc", "polygon", "line", "string") 
Canvas() 

При запуске программы отображается следующее сообщение об ошибке. В чем причина этого?ТипError: __init __() получил неожиданное ключевое слово аргумент 'width'

self.canvas = Canvas(window, width=200, height=100) 

TypeError: __init__() got an unexpected keyword argument 'width' 
+2

Вы определили свой собственный класс 'Canvas' и не обрабатываете аргумент ключевого слова' width'. – TigerhawkT3

+1

'bg =" white' нуждается в закрытой цитате. Как эта цитата исчезла в копии и вставке, если она есть в вашем исходном коде? – MYGz

+0

@MYGz Я сделал исправление, но теперь ошибка TypeError: __init __() получил неожиданное ключевое слово Аргумент 'bg' – npkp

ответ

1

Как уже упоминалось в комментариях, вы затенения tkinter «s Canvas с Canvas класса вы создаете.

Вы можете использовать другой подход для импорта, например import tkinter as tk, и использовать tk.Canvas, чтобы избежать двусмысленности или переименовать свой класс. Если бы я был вами, я бы сделал и то, и другое.

+0

Спасибо, это сработало – npkp