操作Tkinter小部件的实例名称时出错

时间:2013-11-01 08:30:19

标签: python tkinter

我不知道为什么在尝试操作tkinter小部件变量时会出现错误:
AttributeError:'str'对象没有属性'pack' 我试图做一个条目名称的sieres所以如果我的基本名称是A,接下来的名字将是:  A_1,A_2,A_3 ......这是我的代码需要帮助

def generate_fieldes(x):
    generated_frame='frame1_'+x
    print generated_frame
    A_generated   ='A_'+x
    B_generated   ='B_'+x
    C_generated   ='C_'+x
    D_generated   ='D_'+x
    E_generated  ='E_'+x
    F_generated   ='F_'+x
    if frame1.winfo_exists()==1:

        generated_frame=Frame(tab1,height=200,width=600,bg='yellow')
        A_generated = AutocompleteEntry(list, generated_frame,bd =2,width=26,justify=RIGHT)


        A_generated.pack(side = RIGHT)
        A_generated.focus_set()        

        B_generated = Entry(generated_frame, bd =2,width=12,justify=RIGHT)
        B_generated.pack(side = RIGHT)
        C_generated = Entry(generated_frame, bd =2,width=12,justify=RIGHT)
        C_generated.pack(side = RIGHT)
        D_generated = Entry(generated_frame, bd =2,width=17,justify=RIGHT)
        D_generated.pack(side = RIGHT)
        E_generated = Entry(generated_frame, bd =2,width=17,justify=RIGHT)
        E_generated.pack(side = RIGHT)
        F_generated = Entry(generated_frame, bd =2,width=20,justify=RIGHT)
        F_generated.pack(side = RIGHT)   
        generated_frame.pack(fill=X,side=TOP)

generate_fields('1')   

2 个答案:

答案 0 :(得分:0)

你可能需要这个:

A_generated = Entry(generated_frame, bd =2,width=12,justify=RIGHT)
A_generated.pack(side = RIGHT)
A_generated.focus_set() 

在您当前的代码中,您没有将A_generated声明为Entry的实例,而是将其声明为字符串。

答案 1 :(得分:0)

  

...即时通讯试图填写条目名称......

你不能也不应该这样做。生成的变量名称几乎总是比它们的价值更麻烦。您可能认为您正在创建名为A_1,B_1等的变量,但您只是重新分配A_generated。首先,A_generated是字符串“A_1”,然后将其更改为小部件名称。你最终得到一个指向小部件的名为A_1的变量。

如果要根据变量x的值创建对小部件的引用,则应使用字典。例如:

A[x] = Entry(...)
B[x] = Entry(...)

有了这个,A[1]将引用一个小部件,B[1]也是如此,依此类推。 (尽管您必须首先创建一个名为A,B等的全局变量)。