Python 我的tkinter命令只运行一次
我用tkinter编写了一个小程序,每次按下按钮都会显示新的图像,但不会循环多次Python 我的tkinter命令只运行一次,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,我用tkinter编写了一个小程序,每次按下按钮都会显示新的图像,但不会循环多次 from tkinter import * root=Tk() image1=PhotoImage(file="SCIMG_Gagagigo.png") image2=PhotoImage(file="SCIMG_7_Coloured_Fish.png") image3=PhotoImage(file="SCIMG_Jerry_Beans_Man.png") image4=PhotoImage(file
from tkinter import *
root=Tk()
image1=PhotoImage(file="SCIMG_Gagagigo.png")
image2=PhotoImage(file="SCIMG_7_Coloured_Fish.png")
image3=PhotoImage(file="SCIMG_Jerry_Beans_Man.png")
image4=PhotoImage(file="SCIMG_Axe_Raider.png")
image5=PhotoImage(file="SCIMG_Guardian_of_the_Throne_Room.png")
image6=PhotoImage(file="SCIMG_Alien_Shocktrooper.png")
image7=PhotoImage(file="SCIMG_Evilswarm_Heliotrope.png")
image8=PhotoImage(file="SCIMG_Alexandrite_Dragon.png")
def change():
for a in range(4):
array.append(array[0])
array.pop(0)
b1=Button(image=array[0])
b2=Button(image=array[1])
b3=Button(image=array[2])
b4=Button(image=array[3])
b1.grid(row=0,column=0)
b2.grid(row=0,column=1)
b3.grid(row=1,column=0)
b4.grid(row=1,column=1)
array=[image8,image7,image6,image5,image4,image3,image2,image1]
b1=Button(image=array[0],command=change)
b2=Button(image=array[1],command=change)
b3=Button(image=array[2],command=change)
b4=Button(image=array[3],command=change)
b1.grid(row=0,column=0)
b2.grid(row=0,column=1)
b3.grid(row=1,column=0)
b4.grid(row=1,column=1)
root.mainloop()
糟糕的解决方案
这是因为没有为新的按钮设置命令
def change():
for a in range(4):
array.append(array[0])
array.pop(0)
# Change start.
b1=Button(image=array[0],command=change)
b2=Button(image=array[1],command=change)
b3=Button(image=array[2],command=change)
b4=Button(image=array[3],command=change)
# Change end.
b1.grid(row=0,column=0)
b2.grid(row=0,column=1)
b3.grid(row=1,column=0)
b4.grid(row=1,column=1)
然而,这并不是一个好办法
更好的解决方案
相反,请配置映像:
def change():
for a in range(4):
array.append(array[0])
array.pop(0)
b1.configure(image=array[0])
b2.configure(image=array[1])
b3.configure(image=array[2])
b4.configure(image=array[3])
附加:旋转图像阵列的更好方法
替换这个
for a in range(4):
array.append(array[0])
array.pop(0)
与
我不明白你为什么每次都要创建一个新按钮。您可以编辑他们的图像:
def change():
for a in range(4):
array.append(array[0])
array.pop(0)
b1.configure(image=array[1])
b2.configure(image=array[2])
b3.configure(image=array[3])
b4.configure(image=array[4])
我还建议您使用一些for循环和数组,而不是逐个创建PhotoImage和按钮元素。很好的答案,我所拥有的是一个更灵活的一行程序,用于在数组偏离4项时移动数组:array.append(array.pop(0))
和array=array[-1:+array[:-1]
def change():
for a in range(4):
array.append(array[0])
array.pop(0)
b1.configure(image=array[1])
b2.configure(image=array[2])
b3.configure(image=array[3])
b4.configure(image=array[4])