tkinter 上有这样一个未完成的任务管理器:
root = Tk()
root.title("Splash")
root.geometry("500x500")
root.configure(background='Grey')
root.resizable(0,0)
frame = Frame(root)
for proc in psutil.process_iter():
frameobject = Frame(frame)
label = Label(frameobject, text=f"слитый працес: {proc.name()}", font=("Helvetica", 10), width=70, height=2, bg='black', fg='white')
label.pack()
m = Menu(root, tearoff = 0)
m.add_command(label =proc.name(), command = lambda: print(proc))
def do_popup(event):
try:
m.tk_popup(event.x_root, event.y_root)
finally:
m.grab_release()
label.bind("<Button-3>", do_popup)
frameobject.pack()
frame.pack()
root.mainloop()
它应该显示所有活动进程,当您右键单击它们时,它应该显示一个上下文菜单,其中包含进程的名称,但是上下文菜单中 this 的位置不是这个进程,但据我所知,列表中的最后一个进程:
该过程必须以如此棘手的方式传递,因为在您的版本中,该函数看到一个全局变量
proc
,其中包含循环结束时的最后一个过程。当一个值作为参数传递时,它成为函数的局部变量,与外部变量的状态无关。原则上情况和这个问题差不多,只是在绑定的时候,还是需要在lambda中accept并将参数传给handler
event
。