拆分后选择特定的数组内容[Python2.7]

时间:2014-04-02 16:22:46

标签: python python-2.7 tkinter

我目前在选择数组内容时遇到问题。可以更改数组内容,因此我创建了import方法并使用threading来更新数据。

我将使用Tkinter作为我的GUI,我希望我的按钮在点击后返回数组的内容。

我的数组就像:myarray = ["Uno:Dos:Tres:Quatro","One:Two:Three:Four","A:B:C:D"]

代码:

from Tkinter import *

myarray = []
class Dummy:
    def Sth(self):
        global myarray
        myarray = ["Uno:Dos:Tres:Quatro","One:Two:Three:Four","A:B:C:D"]
        master = Tk()
        master.grid()
        for x in myarray:
            x = x.split(":")
            self.frame = Frame(master)
            self.frame.pack()
            self.thebutton = Button(self.frame,text=x[0],command=lambda: self.doFoo(x[0],x[1],x[2],x[3]))
            self.thebutton.pack()

        master.mainloop()
    def doFoo(self,first,second,third,fourth):
        popup = Tk()
        popup.grid()
        Label(popup,text=first).pack()
        Label(popup,text=second).pack()
        Label(popup,text=third).pack()
        Label(popup,text=fourth).pack()
        popup.mainloop()
A = Dummy()
A.Sth()

问题:点击按钮后,弹出窗口的内容为A,B,C,D

我的期望是:

  • 点击Uno - > Uno,Dos,Tres,Quatro
  • 点击一个 - > One,Two,Three,Four

请帮忙吗?谢谢!

我尝试过:

        for index,x in enumerate(myarray):
            x = x.split(":")
            self.frame = Frame(master)
            self.frame.pack()
            self.thebutton = Button(self.frame,text=x[0],command=lambda index=index: self.doFoo(x[index][0],x[index][1],x[index][2],x[index][3]))

但我得IndexError: string index out of range

1 个答案:

答案 0 :(得分:1)

考虑一下你的for循环:它创建的三个按钮都具有相同的变量x,而doFoo()的回调始终将会获得通过了列表中的最后一项。

如果在lambda表达式中指定x = x,则每个命令将保留循环迭代中的信息。你需要重新格式化你的循环:

for x in myarray:
    x = x.split(':')
    Button(self.frame, text=x[0], command = lambda x=x: self.doFoo(x[0],x[1],x[2],x[3])).pack()

并把它:

self.frame = Frame(master)
self.frame.pack()

在你的for循环之外。

有关详细信息,请参阅:http://effbot.org/zone/tkinter-callbacks.htm