Python - Tkinter cambio de imagen por otra

 
Vista:
sin imagen de perfil
Val: 27
Ha disminuido su posición en 3 puestos en Python (en relación al último mes)
Gráfica de Python

Tkinter cambio de imagen por otra

Publicado por Jamyz (11 intervenciones) el 30/04/2019 16:41:00
Hola,
Tengo una ventana por tkinter con un boton para abrir una imagen en vez de la imagen por defecto.
Pero en vez de aparecer en el label2, me aparece por debajo del boton.
Alguna idea ? Gracias.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
from tkinter import *
from tkinter import ttk
import sqlite3
import tkinter as tk
from tkinter import messagebox
import os
import configparser
import tkinter
from PIL import Image, ImageTk
from tkinter import filedialog
from PIL import ImageTk, Image
import tkinter
 
Product = Tk()
Product.title ('App - Add Product')
Product.iconbitmap(r'./local/pics/xCollectibles.ico')
 
# #SHOW IMAGE IN FRAME
def openfn():
    filename = filedialog.askopenfilename(title='App - Select a pic')
    return filename
def open_img():
    global img
    x = openfn()
    img = Image.open(x)
    img = img.resize((100, 100), Image.ANTIALIAS)
    img = ImageTk.PhotoImage(img)
    label2 = Label(frame, image=img).pack()
 
 
# #SHOW IMAGE IN FRAME
def save_image():
    print(image_names)
#FRAME PRODUCT
frame = LabelFrame (Product, text = 'Product Name')
frame.pack(anchor=NW)
 
label = Label (frame, text = 'Product:').pack(anchor=N)
name = ttk.Entry(frame).pack(anchor=N)
label1 = Label (frame, text = 'Pic:').pack(anchor=N)
 
# ###OPEN DEFAULT IMAGE
stim_filename = "./local/pics/none.png"
PIL_image = Image.open(stim_filename)
width = 100
height = 100
use_resize = False
if use_resize:
    PIL_image_small = PIL_image.resize((width,height), Image.ANTIALIAS)
else:
    PIL_image_small = PIL_image
    PIL_image_small.thumbnail((width,height), Image.ANTIALIAS)
img = ImageTk.PhotoImage(PIL_image_small)
 
label2 = Label(frame, image = img)
label2.image = img # keep a reference!
label2.pack()
###OPEN DEFAULT IMAGE
 
btn = Button (frame, text = 'Add Pic', command=open_img).pack(anchor=S)
# #FRAME PRODUCT
# #FRAME INFO
# frame1 = LabelFrame (Product, text = 'Info Maker')
# frame1.grid (row = 0, column =  1, sticky=NW)
# Label (frame1, text = 'Product:').grid (row = 1, column = 0)
# name = ttk.Entry(frame1)
# name.grid (row = 2, column = 0)
# #FRAME INFO
btn_save = Button (Product, text = 'save', command=save_image).pack(side=BOTTOM, anchor=W)
Product.mainloop()
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Tkinter cambio de imagen por otra

Publicado por tincopasan (1082 intervenciones) el 30/04/2019 20:31:57
deberías cambiar:
1
2
3
4
5
6
7
8
def open_img():
    global img
    x = openfn()
    img = Image.open(x)
    img = img.resize((100, 100), Image.ANTIALIAS)
    img = ImageTk.PhotoImage(img)
 
    label2.config(image=img) #ésta línea reemplaza la tuya

el problema es que pack() lo que hace es ubicar una nueva instancia y lo hace al final de lo que ya hay, lo que hago es asignar una nueva imagen a la instancia ya creada.
Otra cosa, si bien pack, ahorra tiempo, a medida que mejores un poco tus interfaces es mejor usar place(desde mi opinión)
Y cuando mejores más,dejarás tkinter por otras interfaces, pyqt por ejemplo.
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 27
Ha disminuido su posición en 3 puestos en Python (en relación al último mes)
Gráfica de Python

Tkinter cambio de imagen por otra

Publicado por Jamyz (11 intervenciones) el 30/04/2019 20:45:37
Gracias @tincopopasan por contestar.
Me resuelves dolores de cabeza ya que empece hace unos días python y empiezo poco a poco.
Estuve mirando place y grid también. Deje este ultimo porque no me permitía hacer como me gustaba. De momento pack me va bien y place es muy buena opción. Puede que mas adelante según como me queda la interfaz cambie. Tkinter empiezo con el. Ya ire mirando mas tarde como es pyqt.
Muchas gracias. MAs que probable volver aquí a hacer preguntas.
Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar