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

Python 如何在tkinter中有背景图像和按钮?,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,我正在使用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(wi

我正在使用
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()
在此之前,我尝试使用
按钮.pack()
,但它在图像下显示按钮,而不是在图像上(可能图像不是背景)

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


我想让我的程序在上面显示一个图像和按钮(比如桌面)。

我找到了一种简单的方法来做你想做的事情,这比我在评论中建议的要简单得多。基本步骤是:创建一个
tkinter.Canvas
,使用
Canvas.Create\u image()
,然后创建一个
Canvas.Create\u 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()
以下是单击按钮几次后的外观:


除了可以包含tkinter小部件(以及纯图形)的
画布之外,不能将tkinter小部件放在另一个小部件的顶部,但仍然不能放在另一个小部件的顶部。换句话说,您不能将
按钮
放在
标签
上。如果运行此代码,可能会出现重复的错误消息,如
\u tkinter.TclError:无法在内部使用几何体管理器栅格。它已经有由pack管理的从机
。我想这就解释了为什么代码不能很清楚地工作。@martineau:你可以把tkinter小部件放在另一个上面,包括在标签上面放一个按钮。它可能不漂亮,但没有什么可以阻止你这么做。你问的问题不清楚。你是在问如何在标签上加一个按钮吗?或者,您是在问一个更一般的问题,即如何使用图像作为整个GUI窗口的背景?