- Как заставить каждую кнопку отображать другое изображение при нажатии с помощью tkinter (python)
- Python tkinter image icons
- Adding image using Label
- Using a Button to add image.
- PIL ( Python Imaging Library )
- Background Image of the window
- Width and height of the image
- Изменение картинки при нажатии на кнопку
- Решение
- Изменение изображения по нажатию кнопки
- Определение функции
Как заставить каждую кнопку отображать другое изображение при нажатии с помощью tkinter (python)
Я создаю графический интерфейс с кнопками “.grid”. И я хочу, чтобы каждая из этих кнопок отображала другое изображение при нажатии. Поэтому, когда я нажимаю кнопку 1, в нижней части кнопок будет отображаться “image1”. Когда я нажимаю кнопку 2, он вызывает “image2” и т.д.
Через некоторые исследования я смог заставить кнопки запускать функцию, которая принимает параметр через метод ниже. Однако я не могу заставить кнопку отображать изображение. скорее, он просто создает пустое пустое пространство под кнопками, когда я нажимаю кнопки.
Отказ от ответственности: – Я не хочу, чтобы там было множество изображений, будет только 1 изображение, и оно изменится в зависимости от того, какую кнопку я нажимаю.
from tkinter import * def funct(numimg): image = PhotoImage(file="image"+str(numimg)+".png") label = Label(image=image) label.grid(row = row_no+1, column = 0, columnspan = num_of_cols) def make_funct(number): return (lambda: funct(number)) root= Tk() row_no = -1 buttons = [] num_of_cols = 3 root.resizable(0, 0) numfiles = 6 for x in range(0, numfiles): if(x % num_of_cols is 0): row_no+=1 buttons.append(Button(root, text = "Button "+str(x), bg = '#4098D3', width = 30,height = 13,command = make_funct(x))) buttons[x].grid(row = row_no, column = x % num_of_cols) root.mainloop()
Итак, мой вопрос: как вы делаете каждую отдельную кнопку, отображаете другое изображение при нажатии? эта программа прямо здесь оставляет пустое пространство вместо изображения, и изображение не отображается.
Есть два основных проблемы с кодом, который вы опубликовали.
Первая в основном такая же, как в этом вопросе: почему изображение Tkinter не отображается, если оно создано в функции? , Вы должны сохранить ссылку на объект PhotoImage , иначе будет собран мусор, и он не будет отображаться.
Во-вторых, вы создаете новый Label при каждом нажатии кнопки. Вы должны сделать только один Label и изменить изображение с помощью label.config() .
Я бы (без обертывания вашего графического интерфейса в классе, который может быть более приятным решением) загружает все изображения при инициализации, сохраняет их в списке как атрибут метки и только меняет изображение при нажатии кнопки.
Я также удалил вашу функцию make_funct и заменил ее на lambda , что является наиболее часто используемым способом передачи переменных функции при обратном make_funct .
from tkinter import * def funct(numimg): label.config(image=label.images[numimg]) root= Tk() row_no = -1 buttons = [] num_of_cols = 3 root.resizable(0, 0) numfiles = 3 for x in range(0, numfiles): if(x % num_of_cols is 0): row_no+=1 buttons.append(Button(root, text = "Button "+str(x), bg = '#4098D3', width = 30,height = 13, command = lambda n=x: funct(n))) buttons[x].grid(row = row_no, column = x % num_of_cols) label = Label(root) label.grid(row = row_no+1, column = 0, columnspan = num_of_cols) label.images=[] for x in range(0, numfiles): label.images.append(PhotoImage(file="image"+str(x)+".png")) root.mainloop()
Python tkinter image icons
There is a default icon comes with the window.
import tkinter as tk my_w=tk.Tk() my_w.geometry('300x100') my_w.title('www.plus2net.com') my_w.mainloop()
Tkinter displaying icon or JPG PNG image in windows by using Label or button using PILLOW library
Escape the path by using two backslashes if you have any char with can be used with backslash. Here \f can be understood as form feed, so we used two backslashes.
import tkinter as tk my_w=tk.Tk() my_w.geometry('300x100') my_w.title('www.plus2net.com') my_w.iconbitmap('D:\\images\\favicon.ico') my_w.mainloop()
Adding image using Label
import tkinter as tk my_w = tk.Tk() my_w.geometry("400x200") l1 = tk.Label(my_w, width=15 ) l1.grid(row=1,column=1) my_img = tk.PhotoImage(file = "D:\\top2.png") l2 = tk.Label(my_w, image=my_img ) l2.grid(row=1,column=2) my_w.mainloop()
Using a Button to add image.
We can place image over one Button
import tkinter as tk my_w=tk.Tk() my_w.geometry('300x100') my_w.title('www.plus2net.com') my_w.iconbitmap('D:\\images\\favicon.ico') my_img = tk.PhotoImage(file = "D:/images/top2.png") b1=tk.Button(my_w,image=my_img) b1.grid(row=1,column=1) my_w.mainloop()
PIL ( Python Imaging Library )
from PIL import ImageTk, Image
If PIL ( Python Image Library ) is not installed then use PIP to install it. You can check the status by using this command and check all installed libraries.
import tkinter as tk my_w=tk.Tk() from PIL import Image,ImageTk my_w.geometry('300x100') my_w.title('www.plus2net.com') my_img = ImageTk.PhotoImage(Image.open("D:/images/top2.jpg")) b1=tk.Button(my_w,image=my_img) b1.grid(row=1,column=1) my_w.mainloop()
Background Image of the window
Change the path of the image used at my_img2.
To use JPG image we have to include PIL library.
import tkinter as tk from tkinter import ttk from PIL import Image,ImageTk my_w = tk.Tk() my_w.geometry("840x570") #my_img = tk.PhotoImage(file = "D:\\top2.png") my_img2 = ImageTk.PhotoImage(Image.open("D:\\my_data\\background1.jpg")) bg = tk.Label(my_w, image=my_img2) bg.place(x=0, y=0, relwidth=1, relheight=1) my_w.mainloop()
my_img = tk.PhotoImage(file = "D:\\top2.png")
Width and height of the image
import tkinter as tk my_w = tk.Tk() my_w.geometry("840x570") my_img = tk.PhotoImage(file = "H:\\top2.png") print(my_img.width(),my_img.height()) # Width and height of the image b1=tk.Button(my_w,image=my_img) b1.grid(row=1,column=1) my_w.mainloop()
import tkinter as tk my_w=tk.Tk() from PIL import Image,ImageTk my_w.geometry('400x300') my_w.title('www.plus2net.com') my_img = ImageTk.PhotoImage(Image.open("H:/top2.jpg")) print(my_img.width(),my_img.height()) # Print width and height of the image b1=tk.Button(my_w,image=my_img) b1.grid(row=1,column=1,padx=20,pady=20) my_w.mainloop()
import tkinter as tk my_w=tk.Tk() from PIL import Image,ImageTk my_w.geometry('400x300') my_w.title('www.plus2net.com') my_img = Image.open("H:/top2.jpg") # change the path of your image print(my_img.size) # Print the tuple with width and height of the image print('Width: ',my_img.size[0],' , Height: ',my_img.size[1]) my_img = ImageTk.PhotoImage(Image.open("H:/top2.jpg")) b1=tk.Button(my_w,image=my_img) b1.grid(row=1,column=1,padx=20,pady=20) my_w.mainloop()
Изменение картинки при нажатии на кнопку
Пытаюсь сделать справочник городов своего региона, при нажатии на кнопку с названием города, картинка должна меняться на соответствующую. Что я делал:
1) Пытался изменять путь к картинке внутри функции, указывая в атрибуте функции город def naz(city)
2) Пытался привязать картинку к Label и изменять через configure атрибут image
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
from tkinter import * from PIL import ImageTk, Image root = Tk() root.geometry('450x330') canvas = Canvas(root,width=800,height=600) canvas.pack() img = Image.open("magas.png") img.thumbnail((200, 200), Image.ANTIALIAS) image = ImageTk.PhotoImage(img) imagesprite = canvas.create_image(100,115,image=image) def naz(): t1['text'] = "Город Назрань был основан. " def mag(): t1['text'] = "Город Магас был основан. " def kar(): t1['text'] = "Город Карабулак был основан. " def mal(): t1['text'] = "Город Малгобек был основан. " t1 = Label(root) t1.place(x=200, y=50) t2 = Label(root, text="Описание 2") t2.place(x=200, y=100) t3 = Label(root, text="Описание 3") t3.place(x=200, y=150) btn1 = Button(root, text="Назрань", width=25, command=naz) btn1.place(x=25, y=240) btn2 = Button(root, text="Магас", width=25, command=mag) btn2.place(x=240, y=240) btn3 = Button(root, text="Карабулак", width=25, command=kar) btn3.place(x=25, y=280) btn4 = Button(root, text="Малгобек", width=25, command=mal) btn4.place(x=240, y=280)
Изменение фона формы при нажатии на кнопку
Добрый день, я начал изучать Python, и у меня появился вопрос, как изменить фон формы по нажатию.
Реализовать изменение картинки при нажатии на кнопку
нужно чтоб после нажатия на кнопку картинка в image поменялась
Появление картинки при нажатии на кнопку
Подскажите как написать программу в которой при нажатии на кнопку (button1_Click) в окне.
Смена картинки при нажатии на кнопку
Помогите в кодах записать. Что бы при нажатий на кнопку менялась картинка картинки т.е C# 1-.
Сообщение было отмечено DikDiv06 как решение
Решение
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
from tkinter import * from PIL import ImageTk, Image root = Tk() root.geometry('450x330') canvas = Canvas(root,width=800,height=600) canvas.pack() def load_image(name): img = Image.open(name) img.thumbnail((200, 200), Image.ANTIALIAS) return ImageTk.PhotoImage(img) def set_image(image): canvas.delete("all") canvas.create_image(100,115,image=image) image = load_image("magas.png") image2 = load_image("magas2.png") set_image(image) def naz(): t1['text'] = "Город Назрань был основан. " set_image(image2) def mag(): t1['text'] = "Город Магас был основан. " set_image(image) def kar(): t1['text'] = "Город Карабулак был основан. " set_image(image2) def mal(): t1['text'] = "Город Малгобек был основан. " set_image(image) t1 = Label(root) t1.place(x=200, y=50) t2 = Label(root, text="Описание 2") t2.place(x=200, y=100) t3 = Label(root, text="Описание 3") t3.place(x=200, y=150) btn1 = Button(root, text="Назрань", width=25, command=naz) btn1.place(x=25, y=240) btn2 = Button(root, text="Магас", width=25, command=mag) btn2.place(x=240, y=240) btn3 = Button(root, text="Карабулак", width=25, command=kar) btn3.place(x=25, y=280) btn4 = Button(root, text="Малгобек", width=25, command=mal) btn4.place(x=240, y=280) root.mainloop()
Изменение изображения по нажатию кнопки
это мой первый код программирования на Python. Я пытаюсь изменить изображение одним нажатием кнопки. У меня есть две кнопки, Start Conversation и Stop Conversation . Когда форма загружается, изображения нет. при нажатии кнопки «Пуск» отобразится изображение ABC. Когда нажимается кнопка «Стоп», должно отображаться изображение xyz. Проблема, с которой я столкнулся, — это когда я нажимаю «Пуск», появляется соответствующее изображение, но когда я нажимаю «Стоп», появляется новое изображение, но предыдущее изображение не исчезает. Оба изображения отображаются один за другим Мой код ниже
root = Tk() prompt = StringVar() root.title("AVATAR") label = Label(root, fg="dark green") label.pack() frame = Frame(root,background='red') frame.pack()
Определение функции
def Image1(): image = Image.open("C:\Python27\Agent.gif") photo = ImageTk.PhotoImage(image) canvas = Canvas(height=200,width=200) canvas.image = photo #
1 ответ
Самая важная проблема заключается в том, что вы не очищаете свой холст до создания нового изображения. Начните свои (кнопки) с помощью:
Однако то же самое касается вашего холста; вы продолжаете создавать его. Лучше расколоть создание холста и установить изображение:
from Tkinter import * root = Tk() prompt = StringVar() root.title("AVATAR") label = Label(root, fg="dark green") label.pack() frame = Frame(root,background='red') frame.pack() # Function definition # first create the canvas canvas = Canvas(height=200,width=200) canvas.pack() def Image1(): canvas.delete("all") image1 = PhotoImage(file = "C:\Python27\Agent.gif") canvas.create_image(0,0,anchor='nw',image=image1) canvas.image = image1 def Image2(): canvas.delete("all") image1 = PhotoImage(file = "C:\Python27\Hydrangeas.gif") canvas.create_image(0,0,anchor='nw',image=image1) canvas.image = image1 #Invoking through button TextWindow = Label(frame,anchor = NW, justify = LEFT, bg= 'white', fg = 'blue', textvariable = prompt, width = 75, height=20) TextWindow.pack(side = TOP) conversationbutton = Button(frame, text='Start Conversation',width=25,fg="green",command = Image1) conversationbutton.pack(side = RIGHT) stopbutton = Button(frame, text='Stop',width=25,fg="red",command = Image2) stopbutton.pack(side = RIGHT) root.mainloop()
Это также предотвращает несколько странное расширение окна при нажатии кнопки. Чтобы сделать код подходящим для python3 , замените его from Tkinter import* на from tkinter import*