Pergunta

Eu tenho um aplicativo de python GUI no funcionamento, o que eu pretendo usar no Windows e Mac. A documentação sobre Tkinter não é o maior, e google-fu me falhou.

Em suma, estou fazendo:

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()

Se eu comente a linha create_bitmap, o aplicativo desenha bem. Se eu comentá-lo de volta, eu recebo o seguinte erro:

_tkinter.TclError: unknown option "-image"

O que é estranho. Tkinter é fino, de acordo com os testes python (ou seja, a importação de _tkinter, tkinter, e fazendo Tk()). Eu já PIL instalado contra a minha instalação do Windows (XP SP3, Python 2.6) imaginando que ele estava fazendo algum do trabalho pesado em um nível baixo. Não parece ser; Eu ainda obter o erro acima mencionado.

O StackTrace completo, excluindo o código que eu já colado, é:

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))))

Qualquer pessoa capaz de lançar alguma luz?

Foi útil?

Solução

Tk tem dois tipos de gráficos, bitmap e imagem. Imagens vêm em dois sabores, bitmap e foto. Bitmaps e imagens do tipo bitmap não são a mesma coisa, o que leva a confusão em docs. PhotoImage cria uma imagem do tipo de fotografia, e precisa de um objeto imagem na tela, então a solução é, como você já concluído, para uso create_image.

Outras dicas

Resposta curta: Não use create_bitmap quando você significa para uso create_image.

O método create_bitmap() não tem um argumento image; ele tem um argumento bitmap .

O erro você recebe vem do fato de que em Tkinter, um interpretador Tcl está funcionando incorporado no processo de Python, e toda a interação GUI vai e volta entre Python e Tcl; assim, o erro você recebe vem do fato de que Tcl responde: "Eu não sei qualquer opção -image na chamada .create_bitmap".

Em qualquer caso, como Jeff disse, você provavelmente quer o método create_image.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top