Python 2.7 Tkinter和显示迭代列表

Python 2.7 Tkinter和显示迭代列表,python-2.7,tkinter,iterator,Python 2.7,Tkinter,Iterator,我有以下代码: from Tkinter import * import itertools l1 = [1, 'One', [[1, '1', '2'], [2, '3', '4'], [3, '5', '6']]] l2 = [2, 'Two', [[1, 'one', 'two'], [2, 'three', 'four'], [3, 'five', 'six']]] def session(evt,contents): def setup_cards():

我有以下代码:

from Tkinter import *
import itertools

l1 = [1, 'One', [[1, '1', '2'], [2, '3', '4'], [3, '5', '6']]]
l2 = [2, 'Two', [[1, 'one', 'two'], [2, 'three', 'four'], [3, 'five', 'six']]] 

def session(evt,contents):

    def setup_cards():
        cards = [stack[2] for stack in contents]
        setup = [iter(stack) for stack in cards] 
        return cards, setup

    def end():
        window.destroy()

    def start():
        print setup
        print cards

        pair = next(setup[0])

        def flip():
            side2cont.set(pair[2])
            flipbutton.configure(command=start)

        for stack in setup:
            try:
                for card in cards:
                    try:
                        side1cont.set(pair[1])
                        flipbutton.configure(command=flip)
                    except StopIteration:
                        continue
            except StopIteration:
                pair = next(setup[1])

    window = Toplevel()
    window.grab_set()
    window.title("Session")

    card_frame = Frame(window)
    card_frame.grid(row=0, column=0, sticky=W, padx=2, pady=2)

    button_frame = Frame(window)
    button_frame.grid(row=1, column=0, pady=(5,0), padx=2)

    side1_frame = LabelFrame(card_frame, text="Side 1")
    side1_frame.grid(row=0, column=0)

    side1cont = StringVar()
    side2cont = StringVar()

    side1 = Label(side1_frame, textvariable=side1cont)
    side1.grid(row=0, column=0, sticky=W)

    side2_frame = LabelFrame(card_frame, text="Side 2")
    side2_frame.grid(row=1, column=0)

    side2 = Label(side2_frame, textvariable=side2cont)
    side2.grid(row=0, column=0, sticky=W)

    flipbutton = Button(button_frame, text="Flip", command=start)
    flipbutton.grid(row=0, column=2)

    finishbutton = Button(button_frame, text="End", command=end)
    finishbutton.grid(row=0,column=0, sticky=E)

    cards = setup_cards()[0]
    setup = setup_cards()[1]

w = Tk()
wbutton = Button(text='toplevel')
wbutton.bind('<Button-1>', lambda evt, args=(l1, l2): session(evt, args))
wbutton.pack()

w.mainloop()
从Tkinter导入*
进口itertools
l1=[1'一',[1',1',2'],[2',3',4'],[3',5',6']]
l2=[2',2',[[1',1',2'],[2',3',4'],[3',5',6']]
def会话(evt,内容):
def设置卡():
卡片=[堆叠[2]用于堆叠内容]
设置=[卡中堆栈的iter(堆栈)]
返回卡,设置
def end():
window.destroy()
def start():
打印设置
打印卡片
pair=next(设置[0])
def flip():
side2cont.set(对[2])
flipbutton.configure(命令=启动)
对于设置中的堆栈:
尝试:
对于卡片中的卡片:
尝试:
side1cont.set(对[1])
flipbutton.configure(命令=翻转)
除停止迭代外:
持续
除停止迭代外:
配对=下一个(设置[1])
window=Toplevel()
window.grab_set()
窗口标题(“会议”)
卡片\框架=框架(窗口)
卡片框架网格(行=0,列=0,粘性=W,padx=2,pady=2)
按钮\框架=框架(窗口)
按钮框架网格(行=1,列=0,pady=(5,0),padx=2)
侧1_框=标签框(卡片_框,text=“侧1”)
侧1_框架网格(行=0,列=0)
side1cont=StringVar()
side2cont=StringVar()
side1=标签(side1_框架,textvariable=side1cont)
侧1.网格(行=0,列=0,粘性=W)
侧2_框=标签框(卡片_框,text=“侧2”)
侧2_框架网格(行=1,列=0)
side2=标签(side2_框架,textvariable=side2cont)
侧2.网格(行=0,列=0,粘性=W)
flipbutton=按钮(按钮\框架,text=“Flip”,命令=开始)
flipbutton.grid(行=0,列=2)
finishbutton=按钮(按钮框架,text=“End”,command=End)
网格(行=0,列=0,粘滞=E)
卡片=设置\u卡片()[0]
设置=设置卡()[1]
w=Tk()
wbutton=按钮(text='toplevel')
绑定(“”,lambda-evt,args=(l1,l2):会话(evt,args))
wbutton.pack()
w、 mainloop()
这是我项目的一部分,我只是根据基本情况重新制作,所以很容易理解。在我的项目中,函数
session
接受文件,这些文件现在被模拟为列表
l1
l2

当我点击
StopIteration
exception时,我正在挣扎。我希望我的脚本执行以下操作: 1.当迭代结束时,切换到另一个迭代器(在本例中为
l2
iterator,在
setup
列表中的下一项)。 2.如果
设置中没有其他迭代器,请重置迭代器(“从头开始”)


上面的代码是我能想到的最好的,这就是为什么我要求助于你们。谢谢(我也是新手,所以我仍然在努力学习Python/编程的基本知识)。

StopIteration
for
捕获,没有进一步传播。您可能希望将
用于…else

但是你的迭代方法很奇怪,为什么不直接对循环使用常规的