首页 > 解决方案 > 单选按钮不会选择 jpg

问题描述

将问题的代码缩短到最低限度。我想使用单选按钮在图像之间切换以应用于画布。如果我将图像名称(例如 tkimg2)输入到“stamp”事件中,代码只会应用图像。单选按钮没有选择图像,如果我在图片 = [] 中输入图像名称,链接也不起作用。您知道为什么图像名称在一个位置就足够了,而在另一个位置就足够了,以及为什么单选按钮不起作用?感谢您的任何帮助

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() 

标签: python-2.7tkinterradio-buttonjpeg

解决方案


为了简单起见,我删除了大部分与问题无关的代码并将图像更改为普通的 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()

推荐阅读