TypeError:“ StringVar”对象不可迭代

时间:2019-03-01 17:56:38

标签: python tkinter

from tkinter import*
raiz=Tk()
raiz.title("Last Recently Used LRU")
raiz.resizable(1,1)
raiz.geometry("1080x720")
#-----------------------------------------
marcos=IntVar()
#-------------------------------------
label1=Label(raiz,text="Numero de Marcos:")
label1.place(x=260,y=100)
texto1=Entry(raiz,textvariable=marcos)
texto1.place(x=500,y=100)
s=StringVar()
label2_5=Label(raiz,text="*Introduce una cadena de numeros separados por espacios")
label2_5.place(x=260,y=200)
label2=Label(raiz,text="Cadena de Referencias:")
label2.place(x=260,y=250)
texto2=Entry(raiz,textvariable=s)
texto2.place(x=555,y=250)
def perro():
    PROC=IntVar()
    PROC = int(input())
    f, st, fallos, mf = [], [], 0, 'No'
    s = list(map(int, input().strip().split()))
for i in s:
    if i not in f:
        if len(f)<PROC:
            f.append(i)
            st.append(len(f)-1)
        else:
            ind = st.pop(0)
            f[ind] = i
            st.append(ind)
        mf = 'X'
        fallos += 1
    else:
        st.append(st.pop(st.index(f.index(i))))
    mf = '--'
    print("\n\n")
    print("   %d\t\t" % i, end='')
    for x in f:
        print(x, end=' ')
    for x in range(PROC - len(f)):
        print(' ', end=' ')
    print(" %s" % mf)
botonp=Button(raiz,text="Ejecutar",command=perro)


botonp.place(x=540,y=350)
raiz.mainloop()
  

第33行,在       对于我在s中:   TypeError:“ StringVar”对象不可迭代

好的,这是完整的代码,我尝试使用Tkinter制作GUI,但是有一个问题,我不知道该怎么办。

有什么办法解决吗?

1 个答案:

答案 0 :(得分:1)

名称s被定义为StringVar类型的全局变量,其声明如下:

s=StringVar()

因此,当您尝试使用以下方法对其进行迭代时:

for i in s:

由于您的StringVar对象不可迭代,因此会产生上述异常。

s分配了函数perro内的列表的事实无济于事,因为分配给列表的s变量是perro的本地变量函数,并且s与全局变量完全不同。

您应该让perro返回列表,然后遍历返回值。

更改:

    s = list(map(int, input().strip().split()))
for i in s:

收件人:

    return list(map(int, input().strip().split()))
for i in perro():