La imagen no se muestra en Tkinter Lienz -- python-2.7 campo con tkinter camp Relacionados El problema

Image does not display in tkinter Canvas


0
vote

problema

Español

Estoy tratando de crear una nueva clase de lienzo que podrá mostrar y cambiar el tamaño de las imágenes. Sin embargo, la imagen no se muestra. Busqué preguntas similares y todas las respuestas dijeron que mantienen una referencia de la fotoimagen en la clase. ( esta respuesta, por ejemplo, ). Intenté hacer eso de varias maneras y ninguno trabajó. En este ejemplo, intenté guardar una referencia en un diccionario. También probé self.tkimage = ImageTk.PhotoImage(image=img) que no funcionó. Y también intentó usar globals. Supongo que tiene algo que ver con el recolector de basura, pero no sé cómo resolverlo. Por favor asistir.

  import Tkinter as tk from PIL import ImageTk, Image import numpy as np # a subclass of Canvas class MyCanvas(tk.Canvas):     def __init__(self,parent,**kwargs):         tk.Canvas.__init__(self,parent,**kwargs)         self.tkimg = {}         self.images = []         self.image_on_canvas = []      def my_create_image(self, *args, **kw):         img = kw['image']         self.images.append(img)         self.tkimg[img] = ImageTk.PhotoImage(image=img)         kw['image'] = self.tkimg[img]         item = self.create_image(*args, **kw)         self.image_on_canvas.append(item)    def main():     root = tk.Tk()     myframe = tk.Frame(root)     myframe.pack(fill=tk.BOTH, expand=tk.YES)     mycanvas1 = MyCanvas(myframe, width=850, height=400, bg="red", highlightthickness=0)      mycanvas2 = MyCanvas(myframe, width=850, height=400, bg="green", highlightthickness=0)     mycanvas1.pack(side=tk.LEFT, fill=tk.BOTH, expand=tk.YES)     mycanvas2.pack(side=tk.RIGHT, fill=tk.BOTH, expand=tk.YES)      # add some widgets to the canvas      mycanvas2.create_line(0, 100, 200, 0, fill="red", dash=(4, 4))     mycanvas2.create_rectangle(50, 25, 150, 75, fill="blue")     arr1 = np.random.random([256,256])*255     img1 = Image.fromarray(arr1)     mycanvas1.my_create_image(0, 0, image=img1, anchor=tk.NW)     root.mainloop()   if __name__ == "__main__":     main()   
Original en ingles

I am trying to create a new class of Canvas that will be able to display and resize images. However The image does not display. I searched for similar questions and all the answers said to keep a reference of the PhotoImage in the class.( This answer for example). I tried doing that in a number of ways and none worked. In this example I tried saving a reference in a dictionary. I also tried self.tkimage = ImageTk.PhotoImage(image=img) which didn't work. And also tried using globals. I assume it has something to do with the garbage collector, but don't know how to solve. Please assist.

import Tkinter as tk from PIL import ImageTk, Image import numpy as np # a subclass of Canvas class MyCanvas(tk.Canvas):     def __init__(self,parent,**kwargs):         tk.Canvas.__init__(self,parent,**kwargs)         self.tkimg = {}         self.images = []         self.image_on_canvas = []      def my_create_image(self, *args, **kw):         img = kw['image']         self.images.append(img)         self.tkimg[img] = ImageTk.PhotoImage(image=img)         kw['image'] = self.tkimg[img]         item = self.create_image(*args, **kw)         self.image_on_canvas.append(item)    def main():     root = tk.Tk()     myframe = tk.Frame(root)     myframe.pack(fill=tk.BOTH, expand=tk.YES)     mycanvas1 = MyCanvas(myframe, width=850, height=400, bg="red", highlightthickness=0)      mycanvas2 = MyCanvas(myframe, width=850, height=400, bg="green", highlightthickness=0)     mycanvas1.pack(side=tk.LEFT, fill=tk.BOTH, expand=tk.YES)     mycanvas2.pack(side=tk.RIGHT, fill=tk.BOTH, expand=tk.YES)      # add some widgets to the canvas      mycanvas2.create_line(0, 100, 200, 0, fill="red", dash=(4, 4))     mycanvas2.create_rectangle(50, 25, 150, 75, fill="blue")     arr1 = np.random.random([256,256])*255     img1 = Image.fromarray(arr1)     mycanvas1.my_create_image(0, 0, image=img1, anchor=tk.NW)     root.mainloop()   if __name__ == "__main__":     main() 
     
       
       

Lista de respuestas


Relacionados problema

8  Desplazando múltiples cuadros de lista de tkinter juntos  ( Scrolling multiple tkinter listboxes together ) 
Tengo múltiples cuadros de lista de Tkinter que me he desplazado usando una sola barra de desplazamiento, pero también me gustaría que se desplácese por la ac...

275  Cree una aplicación gui multiplataforma directamente ejecutable con Python  ( Create a directly executable cross platform gui app using python ) 
Python trabaja en múltiples plataformas y se puede usar para aplicaciones de escritorio y web, por lo tanto, concluyo que hay alguna forma de compilarla en un...

10  ¿Hay alguna manera de grabar (deshabilitar) un marco de tkinter?  ( Is there a way to gray out disable a tkinter frame ) 
Quiero crear una GUI en Tkinter con dos marcos, y haga que el marco inferior se haga gris hasta que ocurra algún evento. a continuación es un código de eje...

0  Python 3 y Tkinter- Cómo controlar un bucle de prueba  ( Python 3 and tkinter how to control a quiz loop ) 
Estoy seguro de que la respuesta a esto es obvia, pero no puedo verlo! Tengo un cuestionario muy básico (usando Tkinter y Python 3) que utiliza 2 matrices, se...

9  Módulo de Python Tkinter que no muestra la salida  ( Python tkinter module not showing output ) 
Estoy tratando de aprender Python e intentar algo GUI en Python y encontré este módulo Tkinter. Mi código se ejecuta, pero la ventana no aparece cuando corro....

21  ¿Cómo ejecuto unittest en una aplicación Tkinter?  ( How do i run unittest on a tkinter app ) 
Acabo de comenzar a aprender sobre TDD y estoy desarrollando un programa usando un tkinter gui. El único problema es que una vez que se llama el método /th...

0  Python Tkinter desplazando dos widgets de texto al mismo tiempo con las teclas de flecha  ( Python tkinter scrolling two text widgets at the same time with arrow keys ) 
Estoy construyendo una GUI que tiene 2 widgets de texto. (Quiero decir que tiene un montón de cosas, pero el bien de esta pregunta le permite dejarlo en 2 wid...

2  Python / Tkinter: ¡Estira una imagen horizontalmente?  ( Python tkinter stretch an image horizontally ) 
¿Es posible estirar una imagen horizontalmente? Caso de uso: Tengo una imagen de un píxel ancho (60 píxeles de alto) que me gustaría estirar horizontalmente...

0  Conciliar las coordenadas de píxeles en la imagen PIL lienzo tkinter y (Phyton)  ( Reconciling pixel coordinates on tkinter canvas and pil image python ) 
Tengo un formulario (en formato .png) con cuadros de texto en blanco (por lo general rellenados a mano). Me gustaría rellenar las cajas con texto. Para hace...

-1  No se puede mostrar el menú personalizado en la ventana  ( Cant show the custom menu on window ) 
Tengo una clase de menú personalizada heredada de Tkinter.Menu . Lo uso en la ventana raíz como esto: root = Tk() menu = customMenu(root) root.config(men...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos