我的tkinter命令只运行一次

时间:2017-07-07 12:47:24

标签: 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="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() 

2 个答案:

答案 0 :(得分:1)

不良解决方案

这是因为没有command设置为您的新Button

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)

array = array[4:] + array[:4]

答案 1 :(得分: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])

我还建议您使用一些用于循环和数组,而不是逐个创建PhotoImage和Button元素。