2014-10-02 75 views
0

我有以下代碼:的Tkinter和顯示迭代列表

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() 

這是一件我的項目,我就重拍只是最基礎的,所以很容易理解。在我的項目中,函數session接受文件,這些文件現在被模擬爲列表l1l2

我掙扎的一點是當我遇到StopIteration異常。我希望我的腳本執行以下操作: 1.迭代到達結束時,切換到另一個迭代器(setup列表中的下一項,在本例中爲l2迭代器)。 2.如果setup中沒有其他迭代器,請重置迭代器(「從頭開始」)。

上面的代碼是我能夠想出的最好的代碼,這就是爲什麼我要轉向你們。謝謝(我也是新手,所以我一直在努力處理Python /編程的基礎知識)。

回答

0

StopIterationfor捕獲並且沒有進一步傳播。您可能需要使用for…else

但是你的迭代方法很奇怪,爲什麼不使用普通的for循環呢?