如何在python中创建GUI多线程
我正在用python做一个监视进程,它指示进程使用的如何在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.
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的主循环交互。这看起来也不错。它允许您以更好的方式执行多线程。