2016-03-05 66 views
1

比方说,我有一个按钮:如何使用小部件选项值作为条件来制作if语句?

tl.config(bd=0 ,image=photo1 ,width="100",height="100",command=lambda: functionPlus(tl)) 

功能是:

def functionPlus(button): 

    global turn 

    if (turn==1 or turn==3 or turn==5 or turn==7 or turn==9): 
     button.config(image=photo2,width="100",height="100") 
     turn +=1 

    elif (turn==2 or turn==4 or turn==6 or turn==8) : 
     button.config(image=photo3,width="100",height="100") 
     turn+=1 

我想补充一个“如果”的功能,这将有作为条件的图像按钮。例如:

if button.config(image=photo2 == True) : 
    anotherFunction() 

在此先感谢。

回答

5

首先,从来没有使用表达模式something=something else == True!其次,请看this related (but not duplicate) question

如您所见,cget方法将返回选项的当前值。如this manual page mentions,cget类似于widget["option"]


所以,直接回答你的问题,if条件,你需要将线沿线的:

if button['image']==photo2: 
    anotherFunction() 
+0

好吧!感谢您的解决方案和您的建议,代码现在正在工作。 –

0

我是新来的,无法评论。我希望我不是通过诉诸回答来炫耀SO政策。

@Tersosauros

“首先,从来没有使用表达模式的东西=别的== 真!”

你在哪里看到这种模式,为什么要避免它?什么可以取代它? (我知道你是一个tersosaurus,但“从不使用X”似乎太过简洁和无信息)。

@Arwan Credoz我知道你已经得到了你的答案,但是......如果你只是想检查“turn”的值是否是偶数/奇数并且在给定范围内,则使用边界检查,然后使用边界检查模数(也许这就是@Tersosauros暗示的?)。 此外,如果“turn”的值在范围(0,10)内,则它的值总是会增加,所以不需要两次写入“turn + = 1”。如果我已经正确理解你的意图,你可以重写“functionPlus”到这样的东西,并在适当的地方添加Tersosaurus的添加:

def functionPlus(button): 
    global turn 
    if 0 < turn < 10: 
     if turn % 2 == 0: 
      button.config(image=photo3,width="100",height="100") 
     else: 
      button.config(image=photo2,width="100",height="100") 
     turn += 1 
+0

哈,有趣!我甚至没有阅读过这个功能......但你绝对是对的!那些如果条件*在*'functionPlus'中就可以使用模数。 我的重点是下一个if语句(在单独的代码块中),哪个*不工作* - 所以我解决了它。 – Tersosauros

+0

至于你关于[a = b == True](https://en.wikipedia.org/wiki/Assignment_%28computer_science%29#Assignment_versus_equality)模式的问题,最好在**分开的* *问题*(你自己的,所以你可以获得一些声望来通过该评论块),但本质上这涉及[平等和赋值运算符的混淆](http://www.google.com/search ?Q =赋值+平等+混乱)。 – Tersosauros

+0

@Tersosauros是的,你回答了真正的问题 - 我只是重构了一下(因此,我的答案应该是一个评论,我猜)。无论如何,我忽略了最后一行(image = photo2 == True),所以我不明白你为什么首先提到了赋值/等号运算符的滥用。我的错。 – jDo