代码之家  ›  专栏  ›  技术社区  ›  Keryn Knight

为什么python的tkinter会使用canvas.create_image中断呢?

  •  1
  • Keryn Knight  · 技术社区  · 15 年前

    我有一个python gui应用程序在工作中,我打算在windows和mac上都使用它。关于Tkinter的文档不是最棒的,Google Fu让我失望了。

    简而言之,我在做:

    c = Canvas(
        master=frame,
        width=settings.WINDOW_SIZE[0],
        height=settings.WINDOW_SIZE[1],
        background=settings.CANVAS_COLOUR
    )
    file = PhotoImage(file=os.path.join('path', 'to', 'gif'))
    c.create_bitmap(position, image=file)
    c.pack()
    root.mainloop()
    

    如果我注释掉create_bitmap行,则应用程序绘制得很好。如果我将其重新注释,将得到以下错误:

    _tkinter.TclError: unknown option "-image"

    这很奇怪。根据python测试,Tkinter很好(即导入Tkinter、Tkinter和doing tk())。此后,我在windows安装程序(xp sp3,python 2.6)上安装了pil,以为它在低级别上做了一些繁重的工作。似乎不是这样,我还是犯了前面提到的错误。

    除了我已经粘贴的代码之外,完整的stacktrace是:

    File "C:\Python26\lib\lib-tk\Tkinter.py", line 2153, in create_bitmap
    return self._create('bitmap', args, kw)
    File "C:\Python26\lib\lib-tk\Tkinter.py", line 2147, in _create
    *(args + self._options(cnf, kw))))
    

    有人能发光吗?

    3 回复  |  直到 15 年前
        1
  •  4
  •   PeterS    15 年前

    tk有两种图形,位图和图像。图片有两种风格,位图和照片。位图和位图类型的图像是不同的,这会导致文档中的混淆。 photo image创建photo类型的图像,并且需要画布中的图像对象,因此,正如您已经得出的结论,解决方案是使用create_image。

        2
  •  2
  •   Keryn Knight    15 年前

    简短回答: 如果要使用“创建图像”,请不要使用“创建位图”。

        3
  •  0
  •   tzot    15 年前

    这个 create_bitmap() 方法没有 image 争论;它有 bitmap 而是争论。

    您得到的错误来自于这样一个事实:在tkinter中,一个tcl解释器嵌入在python进程中运行,并且所有gui交互在python和tcl之间来回进行;因此,您得到的错误来自于这样一个事实:tcl回复“我不知道.create_bitmap ca中的任何-image选项ll”。

    不管怎样,就像杰夫说的,你可能想要 create_image 方法。