错误:TCL中的属性错误

时间:2014-11-23 14:14:58

标签: python-3.x tkinter

我正在尝试使用tkinter在Python GUI中创建一个应用程序。这是我用于GUI部分的代码。每当我尝试访问我的Entry Widget时,我都会收到错误。

Ex:Sin_put.get()应该在Entry小部件中给我文本,但它给了我一个错误

AttributeError:' NoneType'对象没有属性' get'

我对Python比较陌生。因此,如果您有任何改进功能的建议,那么您最受欢迎。

from tkinter import *
from tkinter import ttk
sys.path.insert(0, 'home/ashwin/')
import portscanner

class App:
    def __init__(self, master):

        master.option_add('*tearOff', False)
        master.resizable(False,False)

        self.nb = ttk.Notebook(master)
        self.nb.pack()
        self.nb.config(width=720,height=480)

        self.zipframe = ttk.Frame(self.nb)
        self.scanframe = ttk.Frame(self.nb)
        self.botframe = ttk.Frame(self.nb)

        self.mb = Menu(master)
        master.config(menu = self.mb)
        file = Menu(self.mb)
        info = Menu(self.mb)

        self.mb.add_cascade(menu = file, label = 'Tools')
        self.mb.add_cascade(menu = info, label = 'Help')

        file.add_command(label='Zip Cracker', command = self.zipframe_create)
        file.add_command(label='Port Scanner', command = self.scanframe_create)
        file.add_command(label='Bot net', command =self.botframe_create)
        info.add_command(label='Usage', command=(lambda:print('Usage')))
        info.add_command(label='About', command=(lambda:print('About')))

    def zipframe_create(self):

        self.nb.add(self.zipframe,text='Zip')
        self.zipframe.config(height=480,width=720)
        zlabel1 = ttk.Label(self.zipframe, text='Select the zip file').grid(row=0,column=0, padx=5, pady=10)
        zlabel2 = ttk.Label(self.zipframe, text='Select the dictionary file').grid(row=2,column=0, padx=5)
        ztext1 = ttk.Entry(self.zipframe, width = 50).grid(row=0,column=1,padx=5,pady=10)
        ztext2 = ttk.Entry(self.zipframe, width = 50).grid(row=2,column=1,padx=5)
        zoutput = Text(self.zipframe, width=80, height=20).grid(row=3,column=0,columnspan = 3,padx=5,pady=10)
        zb1 = ttk.Button(self.zipframe, text='Crack', width=10).grid(row=0,column=2,padx=5,pady=10)


    def scanframe_create(self):

        self.nb.add(self.scanframe,text='Scan')
        self.scanframe.config(height=480,width=720)
        slabel1 = ttk.Label(self.scanframe, text='IP address').grid(row=0,column=0, padx=5, pady=10)
        sin_put = ttk.Entry(self.scanframe, width = 50).grid(row=0,column=1,padx=5,pady=10)
        soutput = Text(self.scanframe, width=80, height=20).grid(row=3,column=0,columnspan = 3,padx=5,pady=10)
        sb1 = ttk.Button(self.scanframe, text='Scan', width=6,command= print('Content: {}'.format(sin_put.get()))).grid(row=0,column=2,padx=5,pady=10)

    def botframe_create(self):

        self.nb.add(self.botframe,text='Bot')
        self.botframe.config(height=480,width=720)
        blabel1 = ttk.Label(self.botframe, text='IP address').grid(row=0,column=0, padx=5, pady=10)
        blabel2 = ttk.Label(self.botframe, text='Username').grid(row=1,column=0, padx=2)
        blabel3 = ttk.Label(self.botframe, text='password').grid(row=2,column=0, padx=2)
        btext1 = ttk.Entry(self.botframe, width = 30).grid(row=0,column=1,padx=5,pady=10)
        btext2 = ttk.Entry(self.botframe, width = 30).grid(row=1,column=1)
        btext2 = ttk.Entry(self.botframe, width = 30).grid(row=2,column=1)
        boutput = Text(self.botframe, width=80, height=20).grid(row=3,column=0,columnspan = 3,padx=5,pady=10)
        bb1 = ttk.Button(self.botframe, text='Connect', width=8).grid(row=2,column=2,padx=5,pady=10)


def main():            

    root = Tk()
    feedback = App(root)
    root.mainloop()

if __name__ == "__main__": main()

1 个答案:

答案 0 :(得分:0)

grid()返回None,因此sin_put将始终等于None。如果您想稍后引用它,则必须首先存储它,而不是将Tkinter ID传递给grid()。请注意,对于按钮,将所有内容放在一行就可以了,因为您以后不会使用该按钮的ID。

    sin_put=ttk.Entry(self.scanframe, width = 50)  ## stores the return ID from Entry
    sin_put.grid(row=0,column=1,padx=5,pady=10)  ## don't catch return from grid as it is None