我正在为一个用Python编写的程序制作一个小GUI,该程序需要支付一定的费用,给定的金额并以纸币和硬币的图像形式返回更改。由于tkinter的工作方式,我想优化与音符图像重叠的空间,但是我找不到找到使第二幅图像不被剪切的方法。这是我正在尝试的代码:
import tkinter as tk
from PIL import Image, ImageTk
window = tk.Tk()
window.title('main')
window.geometry('300x200')
test_image_1 = Image.open("fifty_pound.jpg")
test_image_1 = test_image_1.resize((250, 150), Image.ANTIALIAS)
test_image_2 = Image.open("twenty_pound.jpg")
test_image_2 = test_image_2.resize((250, 150), Image.ANTIALIAS)
Image.Image.paste(test_image_1, test_image_2, (50, 0))
test_image_1_render = ImageTk.PhotoImage(test_image_1)
test_image_label = tk.Label(image=test_image_1_render)
test_image_label.image = test_image_1_render
test_image_label.pack()
window.mainloop()
我得到的结果是这样的:
如您所见,这20磅钞票被切掉了。我的问题是:
1)是否可以将20磅笔记图片与50磅笔记图片粘贴在一起而不会被剪切?
2)如何以相同方式重叠两张以上的图片?
非常感谢大家的帮助。
我基本上遵循评论中给您的建议-但由于我已经在准备一些代码,因此这将是我的解决方案:
import tkinter as tk
from PIL import Image, ImageTk
# List of images (notes) to show
notes = ['fifty_pound.jpg', 'twenty_pound.jpg', 'twenty_pound.jpg']
# Same size for each note
x_note, y_note = (250, 150)
# Load images
notes = [Image.open(n).resize((x_note, y_note), Image.ANTIALIAS) for n in notes]
# Number of notes to show
n_notes = len(notes)
# Overlap (or offset) between notes
x_off, y_off = (50, 30)
# Calculate window size
window_size = (x_note + (n_notes - 1) * x_off, y_note + (n_notes - 1) * y_off)
# Create window
window = tk.Tk()
window.title('main')
# Create blank (white) image to paste notes on
new_image = Image.new('RGB', (window_size), (255, 255, 255))
# Paste notes
for i, n in enumerate(notes):
Image.Image.paste(new_image, n, (i*x_off, i*y_off))
# Rendering
new_image_render = ImageTk.PhotoImage(new_image)
test_image_label = tk.Label(image=new_image_render)
test_image_label.image = new_image_render
test_image_label.pack()
window.mainloop()
输出:
希望有帮助!
----------------------------------------
System information
----------------------------------------
Platform: Windows-10-10.0.16299-SP0
Python: 3.8.1
Pillow: 7.0.0
----------------------------------------
甜!!!为此非常感谢!所以我想我的错误是使用50磅钞票的图像作为背景。现在,看着您的解决方案,这似乎很明显:)再次感谢您的宝贵时间!!!