我正在尝试创建一个游戏级编辑器。该程序读取一个二进制文件,将字节与一个图像关联,然后通过循环显示画布(画布B)中的所有图像。这些图像是按单选按钮显示的。这部分工作正常
下面(画布A)我有一组图像,也是单选按钮。在这里,我通过单击选择要使用的图像。该图像将用于重新设计画布B,然后我转到画布B,决定要更改哪个磁贴并单击它。它工作了:单选按钮现在有了选定的图像。 事实上,它每次都有效,但只有第一次有效。如果我改变主意,想改变一个已经改变的单选按钮,什么都不会发生
我试图通过打印带有.get()
的radiobutton变量来理解问题所在,我发现它存储了上次单击的rabiobutton的值。即使使用del
我也试图重置此值,但它不起作用
下面是代码(画布B)
img_list=[]
n_row = 0
n_col = 0
index = 0
x = IntVar()
for f in os.listdir(path):
img_list.append(ImageTk.PhotoImage(Image.open(os.path.join(path,f))))
n_col +=1
index +=1
if n_col > 21:
n_row +=1
n_col = 1
tile = Radiobutton(A, image=img_list[index-1], indicatoron=0, bd=2, variable = x, value = index, selectcolor="red", command=several)
tile.grid(row=n_row, column = n_col)
这是画布
def erase():
global val_t_e_x
del val_t_e_x
val_t_e_x=t_e_x.get()
print(val_t_e_x)
img_qui=[]
for f in os.listdir(path):
img_qui.append(ImageTk.PhotoImage(Image.open(os.path.join(path,f))))
def several_editor():
global codice_bb
global val_x
global val_t_e_x
val_t_e_x=t_e_x.get()
print(val_t_e_x)
row_qui=row_list[val_t_e_x-1]
col_qui=col_list[val_t_e_x-1]
tile_editor=Radiobutton(B, image=img_qui[val_x-1], variable = val_t_e_x, value = rev, indicatoron=0, bd=0, selectcolor="blue",
highlightbackground="black", highlightcolor="black", command=erase)
tile_editor.grid(row=row_qui, column=col_qui)
col_b=0
row_b=9
l_editor=[]
row_list=[]
col_list=[]
rev=0
t_e_x = IntVar()
for x, y in zip(line[::2], line[1::2]):
a= ("./gfx/"+(x+y)+".png")
row_b-=1
rev+=1
if row_b<1:
col_b+=1
row_b=8
im = Image.open(a)
ph = ImageTk.PhotoImage(im)
l_editor.append(ph)
tile_editor = Radiobutton(B, image=l_editor[rev-1], variable = t_e_x, value = rev, indicatoron=0, bd=0, selectcolor="blue",
highlightbackground="black", highlightcolor="black", command=several_editor)
tile_editor.grid(row=row_b, column=col_b)
row_list.append(row_b)
col_list.append(col_b)
我想问题出在函数def_editor()中
tile_editor=Radiobutton(B, image=img_qui[val_x-1], variable = val_t_e_x, value = rev,
indicatoron=0, bd=0, selectcolor="blue", highlightbackground="black",
highlightcolor="black", command=erase)
我没有正确地处理val_t_e_x变量
希望你能帮助我
函数不返回的原因是您不知道几个_editor()的输入是什么。您需要使用lambda将其匿名化。 我将提供一个简单的例子来说明为什么这是必要的:
我目前无法真正测试代码,但这应该可以工作
上面提供了一个在代码中正确使用lambda函数的函数示例,并演示了为什么需要它。尝试删除lambda,并确保函数只运行一次,不再正常运行。这种症状对你来说应该很熟悉,因为它和你描述的完全一样。将lambda添加回来,每次按下按钮时,函数都会再次运行
相关问题 更多 >
编程相关推荐