由于我可以将图像放在窗口中显示背景图像的窗口中,一个重要的方面是窗口会随着图像调整大小,这使得我更难以在窗口的背景图像上插入图像,并且所有这些图像随窗口调整大小, place似乎对我有用,但是如果我想使用place_forget它就行不通,相反,如果我使用 将grid小部件放置在窗口中,则在该小部件的底部会出现一个白框窗户。
以下是预期实现的示例:https ://imgur.com/NyZIIfT.jpg
到目前为止,我能够更改背景图像的大小,但是对于其他图像,这是不可能的,请问您是否可以指导我,因为我是编程新手。非常感谢。
import os # os.path.join(), os.listdir()
import sys # sys.argv
from tkinter import *
from PIL import Image, ImageTk
class ResizeCls(Frame):
def __init__(self, master, index, *args, **kwargs):
super().__init__(master, *args, kwargs)
self.image = Image.open (index)
self.image_copy = self.image .copy()
self.background = ImageTk.PhotoImage (self.image)
self.img = Label (self, image= self.background)
self.img .pack (fill= 'both', expand= True)
self.img .bind ('<Configure>', self.resize)
def resize(self, event):
self.image2 = self.image_copy .resize ((self.master .winfo_width(), self.master .winfo_height()))
self.background2 = ImageTk.PhotoImage (self.image2)
self.img .config (image= self.background2)
class TopCls(Frame):
def __init__(self, master, folder, path_lst=None, *args, **kwargs):
super().__init__(master, *args, **kwargs)
self.folder = folder
self.path_lst = [os.path.join(self.folder, name) for name in os.listdir(self.folder) if name.lower().endswith(('.png', '.jpg', '.gif'))]
# Image 1:
self.frame_image_delay_complete = ResizeCls(self, self.path_lst[0], bd=0)
self.frame_image_delay_complete .grid(column=0, row=0)
# Image 2:
self.frame_image_mobil_tutorial = ResizeCls(self, self.path_lst[1], bd=0)
self.frame_image_mobil_tutorial .grid(column=0, row=0) # [ NOT POSITIONED ]
# Text: "Guia"
self.lbl_text_guia = Label(self, text='Insert / hide image', font=('Calibri',7,'bold'), bg='black' , fg='white', bd=0)
self.lbl_text_guia .place(x=2, y=48)
self.lbl_text_guia .bind('<Button-1>', self.open_image_miniature)
# Widgets Not Positioned:
self.frame_image_mobil_tutorial .grid_remove()
# Event: To Posición the label[text= "Guia"]
self.bind('<Configure>', self.new_position_text_guia)
self.grid_columnconfigure(0, weight=1)
self.grid_rowconfigure(0, weight=1)
def new_position_text_guia(self, event):
toplevel_width = self.master.winfo_width() / 35
toplevel_height = self.master.winfo_height() / 13
x = int(toplevel_width)
y = int(toplevel_height)
self.lbl_text_guia .place(x=x, y=y)
def open_image_miniature(self, event):
if self.frame_image_mobil_tutorial .grid_info() == {}:
self.frame_image_mobil_tutorial .grid()
else:
self.frame_image_mobil_tutorial .grid_remove()
#--- main ---
if len(sys.argv) > 1:
folder = sys.argv[1]
print('if:', folder, len(folder))
else:
folder = os.getcwd() # c:\Users\Usuario\Desktop\proyecto
root = Tk()
root .geometry('300x300+300+300')
frm = TopCls(root, folder)
frm.pack()
root.mainloop()