【问题标题】:TypeError: __init__() got an unexpected keyword argument 'width'TypeError: __init__() 得到了一个意外的关键字参数“宽度”
【发布时间】:2025-12-19 18:05:12
【问题描述】:
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()

当我运行程序时,会显示以下错误消息。这是什么原因?

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

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

【问题讨论】:

  • 您定义了自己的 Canvas 类,但它不处理 width 关键字参数。
  • bg="white 需要关闭报价。如果原始代码中存在该引用,它是如何在复制和粘贴中消失的?
  • @MYGz 我做了更正,但现在错误是 TypeError: __init__() got an unexpected keyword argument 'bg'

标签: python tkinter


【解决方案1】:

正如 cmets 中所述,您正在使用您正在创建的 Canvas 类覆盖 tkinterCanvas

您可以使用不同的导入方法,例如 import tkinter as tk 并使用 tk.Canvas 来避免歧义或重命名您的类。如果我是你,我会两者兼得。

【讨论】:

    最近更新 更多