2017-08-23 72 views
1

私はtkinterを使ってPython 3の簡単なプログラムを書いています。背景画像とボタンが表示されます。ここで tkinterに背景イメージとボタンを置くには?

はコードです:これまで

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

あなたがすることはできませんtkinterウィジェットを重ねて置いてください。ただし、キャンバスはそれを含むことができます(純粋なグラフィックスと同じですが)。つまり、 'Label'の上に' Button'を置くことはできません。 – martineau

+0

[pythonでtkinterの背景として画像を配置する方法]の複製があります。(https://stackoverflow.com/questions/10158552/how-to-put-a-image-as-a-background-in-tkinter -in-python) –

+0

このコードを実行すると、 '_tkinter.TclError:内部でジオメトリマネージャグリッドを使用できません。 'というエラーメッセージが表示されることがあります。すでにパックで管理されている奴隷を持っている。私はコードがなぜ十分にはっきりと動かないのかを説明していると思います。 –

答えて

0

私は自分のコメントで提案していたものよりはるかに複雑ではないことを簡単にする方法を見つけました。必要な手順は次のとおりです。tkinter.Canvasを作成し、画像をCanvas.create_image()で表示し、次にCanvas.create_window()を作成し、最後にtkinter.Buttonに配置します。それぞれのCanvas「ウィンドウ」は1つのウィジェットしか保持できないので、イメージに複数のボタンを配置する場合は、最後の2つのステップを繰り返す必要があります。

以下のコードをチェックアウトすることで理解することは簡単かもしれ:

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

+0

ありがとう@martineau!その作業! –

関連する問題