1 #!/usr/local/bin/python
2 # Tkinter interface to Linux `kill' command.
5 from string
import splitfields
6 from string
import split
10 class BarButton(Menubutton
):
11 _CNF
= {Pack
: {'side': 'left'}}
12 def __init__(self
, master
=None, cnf
={}):
13 Menubutton
.__init
__(self
, master
, (self
._CNF
, cnf
))
14 self
.menu
= Menu(self
, {'name': 'menu'})
15 self
['menu'] = self
.menu
18 # List of (name, option, pid_column)
19 format_list
= [('Default', '', 0),
27 def kill(self
, selected
):
28 c
= self
.format_list
[self
.format
.get()][2]
29 pid
= split(selected
)[c
]
30 posix
.system('kill' + ' -9 ' + pid
)
33 name
, option
, column
= self
.format_list
[self
.format
.get()]
34 s
= commands
.getoutput('ps -w ' + option
)
35 list = splitfields(s
, '\n')
36 self
.header
.set(list[0])
38 y
= self
.frame
.vscroll
.get()[2]
39 self
.frame
.list.delete(0, AtEnd())
41 self
.frame
.list.insert(0, line
)
42 self
.frame
.list.yview(y
)
43 def do_motion(self
, e
):
44 e
.widget
.select_from(e
.widget
.nearest(e
.y
))
45 def do_leave(self
, e
):
46 e
.widget
.select_clear()
48 self
.kill(e
.widget
.get(e
.widget
.nearest(e
.y
)))
49 def __init__(self
, master
=None, cnf
={}):
50 Frame
.__init
__(self
, master
, cnf
)
51 self
.pack({'expand': 'yes', 'fill': 'both'})
59 self
.bar
.file = BarButton(self
.bar
, {'text': 'File'})
60 self
.bar
.file.menu
.add_command(
61 {'label': 'Quit', 'command': self
.quit
})
62 self
.bar
.view
= BarButton(self
.bar
, {'text': 'View'})
63 self
.format
= IntVar(self
)
65 for num
in range(len(self
.format_list
)):
66 self
.bar
.view
.menu
.add_radiobutton(
67 {'label': self
.format_list
[num
][0],
68 'command': self
.do_update
,
69 'variable': self
.format
,
71 #self.bar.view.menu.add_separator()
73 self
.bar
.tk_menuBar(self
.bar
.file, self
.bar
.view
)
76 {'relief': 'raised', 'bd': 2,
80 self
.header
= StringVar(self
)
81 self
.frame
.label
= Label(
86 'textvariable': self
.header
,
89 self
.frame
.vscroll
= Scrollbar(
91 {'orient': 'vertical'})
92 self
.frame
.list = Listbox(
95 'selectbackground': '#eed5b7',
96 'selectborderwidth': 0,
97 'yscroll': self
.frame
.vscroll
.set})
98 self
.frame
.vscroll
['command'] = self
.frame
.list.yview
99 self
.frame
.vscroll
.pack({'side': 'right', 'fill': 'y'})
100 self
.frame
.list.pack(
104 self
.update
= Button(
107 'command': self
.do_update
,
108 Pack
: {'expand': 'yes',
110 self
.frame
.list.bind('<Motion>', self
.do_motion
)
111 self
.frame
.list.bind('<Leave>', self
.do_leave
)
112 self
.frame
.list.bind('<1>', self
.do_1
)
115 if __name__
== '__main__':
116 kill
= Kill(None, {'bd': 5})
117 kill
.winfo_toplevel().title('Tkinter Process Killer')
118 kill
.winfo_toplevel().minsize(1, 1)