Tkinter崩溃了

时间:2016-07-08 07:24:43

标签: python multithreading user-interface tkinter

运行我的程序后崩溃,因为重载,我听说你解决这个使用线程问题我真的不明白它是如何工作的以及如何使用它。该程序基本上在GUI上运行服务器列表,然后suproces应检查服务器是否在线,如果没有发送电子邮件。保存在json文件中的所有信息。所以基本上当这个程序启动子进程时它只是“没有响应”。您可以找到完整的代码https://github.com/aurimasjank/Pinger-Alpha/blob/master/Pinger_Alpha.py

class GUI(Tk):
    def __init__(self):
    self.tk = Tk()
    self.Firstgo=True
    self.timespend = 0
    self.tk.wm_title("Web Service")
    self.tk.configure(background='black')
    #self.tk.wm_state('zoomed')
    self.tk.attributes("-fullscreen",True)
    #Frames
    self.tk.columnconfigure(0, weight=1)
    self.tk.rowconfigure(0, weight=1)
    self.left= Frame(self.tk, bg="black")
    self.left.grid(column=0, row = 0, pady=5 ,padx=10, sticky=N)

    self.center = Separator(self.tk, orient="vertical")
    self.center.grid(column=1, row=0, sticky="ns")

    sty = Style(self.center)
    sty.configure("TSeparator", background="#00CC00")

    self.right= Frame(self.tk, bg="black")
    self.right.grid(column=2, row = 0, pady=5,padx=10, sticky=N)

    self.probar= Frame(self.tk, bg= "black")
    self.probar.grid(column=1, row = 1, sticky= S)

    self.botFrame = Frame(self.tk, bg="black")
    self.botFrame.grid(column=2, row = 1, pady=5, sticky= S)

    self.colnr = 0
    self.rownrleft = 0
    self.rownrright = 0

    self.statuslabel = Label(self.botFrame, text="Script status :  ", bg="black",fg="#00CC00", font=("Helvetica", 24))
    self.statuslabel.grid(column=0, row = 0)

    self.progress = ttk.Progressbar(self.probar,orient ="horizontal",length = 410, mode ="determinate")
    self.progress.grid(column=0, row = 0,pady= (20,0))

    self.string = StringVar()
    self.timecount = StringVar()


    self.titlelbl3= Label(self.probar, textvariable= self.string ,bg="black", fg="#00CC00",font=("Helvetica", 24))
    self.titlelbl3.grid(column=0, row = 1)

    self.statuscount1 = Label(self.botFrame, text="Pinger last run in :",fg="#00CC00", bg="black", font=("Helvetica", 24))
    self.statuscount1.grid(column=0, row = 0)

    self.statuscount = Label(self.botFrame, textvariable=self.timecount,fg="#00CC00", bg="black", font=("Helvetica", 24))
    self.statuscount.grid(column=0, row = 1)




    self.tk.after(1000, self.task)
    self.label = {}
    self.statuscount = 0
    self.freezecheck = 0


def task(self):

    i = 0
    self.list=[]
    self.probarcount=0
    self.string.set (str(self.probarcount) + " / " +str(len(self.list)*10))
    self.progress["value"] = self.probarcount

    self.progress["maximum"] = len(self.list)*10
    self.right

    self.list = openfile()
    name=""
    if self.label != {}:#deleting previous information that we could refresh
        for ele in self.label:

            self.label[ele].destroy()
    self.label= {}
    whatframe = self.right
    whatrow= self.rownrright
    self.list = sorted(self.list, key=itemgetter('status'))
    for elem in self.list:#creating visual status if server is online text is in color green and opsite red

        if "_VPN" in elem["name"]:
            whatframe = self.left
            whatrow= self.rownrleft
            name=elem["name"][:-4]
            self.rownrleft+=1


        else :
            whatframe = self.right
            whatrow= self.rownrright
            self.rownrright+=1
            name=elem["name"]
        if elem["status"]=="true":
            lb = Label(whatframe,text=name , fg="#00CC00",bg="black", font=("Helvetica", 28))
        if elem["status"]=="false":
            lb = Label(whatframe,text=name, fg="black",bg="#00CC00", font=("Helvetica", 28))
        lb.grid(column= 0, row = whatrow ,pady=10 , sticky= W+E)    

        self.label[elem["name"]] = lb


    self.wd=self.tk.winfo_reqwidth()
    self.wdd=self.tk.winfo_width()

    self.fwidth = self.wdd/5
    self.left.columnconfigure(0,minsize=self.fwidth*2)

    self.right.columnconfigure(0,minsize=self.fwidth*2)

    self.center.columnconfigure(0,minsize=self.fwidth)

    self.tk.after(1000, self.Pinger)
    def Pinger(self):
       #Function to check servers and if its down send email         

       self.tk.after(1000, self.task)

#forever loop
Gui= GUI()
Gui.mainloop()

0 个答案:

没有答案