单选按钮不会选择jpg

时间:2018-07-29 21:28:46

标签: python-2.7 tkinter radio-button jpeg

将问题代码缩短到最少。我想使用单选按钮在要应用在画布上的图像之间切换。如果我在“ stamp”事件中输入图像名称(例如tkimg2),则该代码将仅应用图像。如果我在picture = []中输入图像名称,则单选按钮不会选择图像,链接也不会起作用。您知道为什么一个位置的图像名称足够,而另一位置的图像名称不够,为什么单选按钮不起作用?谢谢您的帮助

from Tkinter import *    
import PIL                
from PIL import ImageTk, Image   
import random
import os.path              

root = Tk() 
shapes = []


#load 2 images for stamping
__dir__ = os.path.dirname(os.path.abspath(__file__))  
filename = os.path.join(__dir__, 'balloon.jpg')
img = PIL.Image.open(filename)
tkimg=PIL.ImageTk.PhotoImage(img)

filename2 = os.path.join(__dir__, 'bird1.jpg')
img2 = PIL.Image.open(filename2)
tkimg2=PIL.ImageTk.PhotoImage(img2)

picture =[]
image=picture


# A Radiobutton to toggle between images
radio = [0]*2
v = IntVar()

def call():
    if int(float(str(v.get())))==1:
        picture=tkimg
    else:
        picture=tkimg2


Label(root, text ="Select an image to place.").grid(row=1, column=0, 
columnspan=5, sticky=S)
R1=Radiobutton(root, text="Bird 1", variable=v, value=1, command=call)
R1.grid(row=2, column=0, sticky=N+E)
R1.select()
R2=Radiobutton(root, text="Bird 2", variable=v, value=2, command=call)
R2.grid(row=2, column=1, sticky=N+E)

# A canvas for mouse events and image drawing
canvas = Canvas(root, height=1000, width=1000, bg='#2EEAFF')
canvas.grid(column=5, row=0, rowspan=4, sticky=W)

# Bind a function to the left mouse button down event.
def stamp(event):
    canvas.create_image(event.x,event.y,image)
canvas.bind('<ButtonPress-1>', stamp)

# Enter event loop
root.mainloop() 

1 个答案:

答案 0 :(得分:0)

为了简单起见,我删除了与该问题无关的大多数代码,并将图像更改为普通的PhotoImages。另外,我更改了图像在画布上的第一个位置。

如果要为函数内的变量分配值,则必须将其设置为全局值,否则它将不起作用。该变量将在本地函数范围内定义,并在函数结束时被垃圾回收。

我认为您无法通过更新用于创建画布的变量来更改画布上的图像。这就是StringVar的功能。

由于图像是画布上的唯一小部件,因此我删除所有项目,然后在切换图像时创建一个新图像。

另外:我使用Python 3.6,所以我用大写T拼写tkinter。

from tkinter import *    

root = Tk() 

#load 2 images for stamping
tkimg = PhotoImage(file='test.gif')     # Test image
tkimg2 = PhotoImage(file='tesu.gif')    # Test image

# A Radiobutton to toggle between images
v = IntVar()
def call():
    canvas.delete(ALL)
    if v.get() == 1:
        canvas.create_image((2, 2), image=tkimg, anchor=NW)
    else:
        canvas.create_image((2, 2), image=tkimg2, anchor=NW)

Label(root, text ="Select an image to place.").grid(row=1, column=0, columnspan=5, sticky=S)
R1=Radiobutton(root, text="Bird 1", variable=v, value=1, command=call)
R1.grid(row=2, column=0, sticky=N+E)
R1.select()
R2=Radiobutton(root, text="Bird 2", variable=v, value=2, command=call)
R2.grid(row=2, column=1, sticky=N+E)

# A canvas for mouse events and image drawing
canvas = Canvas(root, height=200, width=200, bg='#2EEAFF')
canvas.grid(column=5, row=0, rowspan=4, sticky=W)
canvas.create_image((2, 2), image=tkimg, anchor=NW)

# Enter event loop
root.mainloop()