如何在tkinter中有背景图像和按钮?

2024-04-19 09:21:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用tkinter编写一个简单的Python 3程序。它应该显示一个背景图片和一个按钮。

代码如下:

import tkinter
from PIL import Image
from PIL import ImageTk

window = tkinter.Tk()
file = Image.open('/Users/dariushmazlumi/Desktop/p.jpg')
img = ImageTk.PhotoImage(file)
background = tkinter.Label(window, image=img)
background.image = img
background.pack()
window.minsize(height=window.winfo_height(), width=window.winfo_width())
number = 0
def buttonclicked():
    global number
    number = number+1
    button.configure(text=number)
button = tkinter.Button(window, text=0, command=buttonclicked)
button.grid(column=1, row=1)
window.mainloop()

在此之前,我尝试使用button.pack(),但它在图像下显示按钮,而不是在图像上(可能图像不是背景)。

接下来,我尝试使用button.grid()。它在终端上运行,没有错误,但是没有可见的输出!它只是跑。我不知道为什么。

我希望我的程序显示一个图像和按钮(例如桌面)。


Tags: from图像imageimport程序numberimgpil
1条回答
网友
1楼 · 发布于 2024-04-19 09:21:11

我找到了一个简单的方法来做你想做的事情,这比我在评论中的建议要简单得多。基本步骤是:创建一个tkinter.Canvas,用Canvas.create_image()显示图像,然后创建一个Canvas.create_window(),最后将tkinter.Button放入中。请注意,每个Canvas“窗口”只能容纳一个小部件,因此如果要在图像上放置多个按钮,则必须重复最后两个步骤。

查看下面的代码可能更容易理解:

import tkinter as tk
from PIL import ImageTk, Image

class CanvasButton:
    def __init__(self, canvas):
        self.canvas = canvas
        self.number = tk.IntVar()
        self.button = tk.Button(canvas, textvariable=self.number,
                                command=self.buttonclicked)
        self.id = canvas.create_window(50, 100, width=25, height=25,
                                       window=self.button)
    def buttonclicked(self):
        self.number.set(self.number.get()+1)  # auto updates Button

root = tk.Tk()
root.resizable(width=False, height=False)
root.wm_attributes("-topmost", 1)

imgpath = 'archipelago_big.gif'
img = Image.open(imgpath)
photo = ImageTk.PhotoImage(img)

canvas = tk.Canvas(root, bd=0, highlightthickness=0)
canvas.pack()
canvas.create_image(0, 0, image=photo)

CanvasButton(canvas)  # create a clickable button on the canvas

root.mainloop()

点击几次按钮后的效果如下:

screenshot of image displayed by script

相关问题 更多 >