Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中创建GUI多线程_Python_Multithreading_User Interface - Fatal编程技术网

如何在python中创建GUI多线程

如何在python中创建GUI多线程,python,multithreading,user-interface,Python,Multithreading,User Interface,我正在用python做一个监视进程,它指示进程使用的pid、名称和内存 如何使用多线程制作gui并与计算流程信息的内部方法同步 class Monitor(tk.Frame): def __init__(self, root): tk.Frame.__init__(self, root) self.canvas = tk.Canvas(root, borderwidth = 0, background = "#ffffff") self.

我正在用python做一个监视进程,它指示进程使用的
pid
、名称和内存

如何使用多线程制作gui并与计算流程信息的内部方法同步

class Monitor(tk.Frame):
    def __init__(self, root):

        tk.Frame.__init__(self, root)
        self.canvas = tk.Canvas(root, borderwidth = 0, background = "#ffffff")
        self.frame = tk.Frame(self.canvas, background = "#ffffff")
        self.vsb = tk.Scrollbar(root, orient = "vertical", command = self.canvas.yview)
        self.canvas.configure(yscrollcommand = self.vsb.set)
        self.vsb.pack(side="right", fill="y")
        self.canvas.pack(side="left", fill="both", expand=True)
        self.canvas.create_window((4,4), window = self.frame, anchor="nw",tags="self.frame")
        self.frame.bind("<Configure>", self.onFrameConfigure)

        self.tabla()

    def tabla(self):
        '''Put in some fake data'''
        proceso = Proceso()
        num_procesos = proceso.num_procesos()

        tk.Label(self.frame,text = "PID",width = 8, borderwidth = 1, relief = "solid").grid(row = 0, column = 0)
        tk.Label(self.frame,text = "Nombre",width = 7, borderwidth = 1, relief = "solid").grid(row = 0, column = 1)
        tk.Label(self.frame,text = "Estado del proceso",width = 15, borderwidth = 1, relief = "solid").grid(row = 0, column = 2)
        tk.Label(self.frame,text = "Cache",width = 7, borderwidth = 1, relief = "solid").grid(row = 0, column = 3)
        tk.Label(self.frame,text = "Memoria",width = 15, borderwidth = 1, relief = "solid").grid(row = 0, column = 4)
        tk.Label(self.frame,text = "Disco",width = 7, borderwidth = 1, relief = "solid").grid(row = 0, column = 5)
        tk.Label(self.frame,text = "Acciones",width = 12, borderwidth = 1, relief = "solid").grid(row = 0, column = 6)

        killentrada = tk.Entry(self.frame,width = 7, borderwidth = 2, relief = "solid").grid(row  =1, column = 8)
        killboton = tk.Button(self.frame,text = "Matar proceso", width = 10, borderwidth = 2, relief = "solid",command = proceso.kill()).grid(row = 1, column = 7)

        for renglon in range(num_procesos+1):
            tk.Label(self.frame, text = proceso.pid(renglon-1),borderwidth="0",relief="solid").grid(row = renglon+1, column=0)
            tk.Label(self.frame, text = proceso.nombre(renglon-1)).grid(row = renglon+1, column=1)
            tk.Label(self.frame, text = proceso.estado(renglon-1)).grid(row = renglon+1, column=2)
            #tk.Label(self.frame, text = proceso.memoria(renglon-1)).grid(row = renglon+1, column=4)


    def onFrameConfigure(self, event):
        '''Reset the scroll region to encompass the inner frame'''
        self.canvas.configure(scrollregion=self.canvas.bbox("all"))
类监视器(tk.Frame):
定义初始化(自,根):
tk.Frame.\uuuu init\uuuu(self,root)
self.canvas=tk.canvas(根,borderwidth=0,background=“#ffffffff”)
self.frame=tk.frame(self.canvas,background=“#ffffffff”)
self.vsb=tk.Scrollbar(root,orient=“vertical”,command=self.canvas.yview)
self.canvas.configure(yscrollcommand=self.vsb.set)
自包装(side=“right”,fill=“y”)
self.canvas.pack(side=“left”,fill=“both”,expand=True)
self.canvas.create_window((4,4),window=self.frame,anchor=“nw”,tags=“self.frame”)
self.frame.bind(“,self.onFrameConfigure)
self.tabla()
def tabla(自我):
''输入一些假数据''
proceso=proceso()
num_procesos=proceso.num_procesos()
标签(self.frame,text=“PID”,width=8,borderwidth=1,relief=“solid”).grid(行=0,列=0)
标签(self.frame,text=“Nombre”,width=7,borderwidth=1,relief=“solid”).grid(行=0,列=1)
标签(self.frame,text=“Estado del proceso”,width=15,borderwidth=1,relief=“solid”).grid(行=0,列=2)
标签(self.frame,text=“Cache”,width=7,borderwidth=1,relief=“solid”).grid(行=0,列=3)
标签(self.frame,text=“Memoria”,width=15,borderwidth=1,relief=“solid”).grid(行=0,列=4)
标签(self.frame,text=“Disco”,width=7,borderwidth=1,relief=“solid”).grid(行=0,列=5)
标签(self.frame,text=“Acciones”,width=12,borderwidth=1,relief=“solid”).grid(行=0,列=6)
killentrada=tk.Entry(self.frame,width=7,borderwidth=2,relief=“solid”).grid(行=1,列=8)
killboton=tk.Button(self.frame,text=“Matar proceso”,width=10,borderwidth=2,relief=“solid”,command=proceso.kill()).grid(行=1,列=7)
对于范围内的renglon(num_procesos+1):
tk.Label(self.frame,text=proceso.pid(renglon-1),borderwidth=“0”,relief=“solid”).grid(row=renglon+1,column=0)
tk.Label(self.frame,text=proceso.nombre(renglon-1)).grid(row=renglon+1,column=1)
tk.Label(self.frame,text=proceso.estado(renglon-1)).grid(row=renglon+1,column=2)
#tk.Label(self.frame,text=proceso.memoria(renglon-1)).grid(row=renglon+1,column=4)
def onFrameConfigure(自我,事件):
''重置滚动区域以包含内部框架''
self.canvas.configure(scrollregion=self.canvas.bbox(“全部”))
本教程可能会有所帮助:。在执行线程时,您可能需要学习如何与Tkinter的主循环交互。这看起来也不错。它允许您以更好的方式执行多线程。