我正在使用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()
。它在终端上运行没有错误,但没有可见的输出!它只是运行。我不知道为什么。
我希望我的程序在其上显示图像和按钮(例如桌面)。
答案 0 :(得分:0)
我找到了一种简单的方法来做你想做的事情,这比我在评论中建议的要简单得多。基本步骤是:创建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()
以下是点击按钮几次后的样子: