diff options
author | Guido van Rossum <guido@python.org> | 1994-06-27 08:00:16 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1994-06-27 08:00:16 (GMT) |
commit | f713247ed7c42c8cabbf705a9b6c0b9418f32ab8 (patch) | |
tree | 417680d15b9ae0eb13645ac0331be709ae25fa23 /Demo/tkinter/guido/kill.py | |
parent | 7687522309644cfc1887c01150e2711a7be237f6 (diff) | |
download | cpython-f713247ed7c42c8cabbf705a9b6c0b9418f32ab8.zip cpython-f713247ed7c42c8cabbf705a9b6c0b9418f32ab8.tar.gz cpython-f713247ed7c42c8cabbf705a9b6c0b9418f32ab8.tar.bz2 |
Initial revision
Diffstat (limited to 'Demo/tkinter/guido/kill.py')
-rwxr-xr-x | Demo/tkinter/guido/kill.py | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/Demo/tkinter/guido/kill.py b/Demo/tkinter/guido/kill.py new file mode 100755 index 0000000..f7a70fa --- /dev/null +++ b/Demo/tkinter/guido/kill.py @@ -0,0 +1,119 @@ +#!/usr/local/bin/tkpython +# Tkinter interface to Linux `ps' command. + +from Tkinter import * +from string import splitfields +from string import split + +class BarButton(Menubutton): + def __init__(self, master=None, cnf={}): + Menubutton.__init__(self, master) + self.pack({'side': 'left'}) + self.config(cnf) + self.menu = Menu(self, {'name': 'menu'}) + self['menu'] = self.menu + +class Kill(Frame): + # List of (name, option, pid_column) + format_list = [('Default', '', 0), + ('Long', '-l', 2), + ('User', '-u', 1), + ('Jobs', '-j', 1), + ('Signal', '-s', 1), + ('Memory', '-m', 0), + ('VM', '-v', 0), + ('Hex', '-X', 0)] + def kill(self, selected): + c = self.format_list[self.format.get()][2] + pid = split(selected)[c] + self.tk.call('exec', 'kill', '-9', pid) + self.do_update() + def do_update(self): + name, option, column = self.format_list[self.format.get()] + s = self.tk.call('exec', 'ps', '-w', option) + list = splitfields(s, '\n') + self.header.set(list[0]) + del list[0] + y = self.frame.vscroll.get()[2] + self.frame.list.delete(0, AtEnd()) + for line in list: + self.frame.list.insert(0, line) + self.frame.list.yview(y) + def do_motion(self, e): + e.widget.select_from(e.widget.nearest(e.y)) + def do_leave(self, e): + e.widget.select_clear() + def do_1(self, e): + self.kill(e.widget.get(e.widget.nearest(e.y))) + def __init__(self, master=None, cnf={}): + Frame.__init__(self, master, cnf) + self.pack({'expand': 'yes', 'fill': 'both'}) + self.bar = Frame( + self, + {'name': 'bar', + 'relief': 'raised', + 'bd': 2, + Pack: {'side': 'top', + 'fill': 'x'}}) + self.bar.file = BarButton(self.bar, {'text': 'File'}) + self.bar.file.menu.add_command( + {'label': 'Quit', 'command': self.quit}) + self.bar.view = BarButton(self.bar, {'text': 'View'}) + self.format = IntVar(self) + self.format.set(2) + for num in range(len(self.format_list)): + self.bar.view.menu.add_radiobutton( + {'label': self.format_list[num][0], + 'command': self.do_update, + 'variable': self.format, + 'value': num}) + #self.bar.view.menu.add_separator() + #XXX ... + self.bar.tk_menuBar(self.bar.file, self.bar.view) + self.frame = Frame( + self, + {'relief': 'raised', 'bd': 2, + Pack: {'side': 'top', + 'expand': 'yes', + 'fill': 'both'}}) + self.header = StringVar(self) + self.frame.label = Label( + self.frame, + {'relief': 'flat', + 'anchor': 'nw', + 'borderwidth': 0, + 'textvariable': self.header, + Pack: {'side': 'top', + 'fill': 'x'}}) + self.frame.vscroll = Scrollbar( + self.frame, + {'orient': 'vertical'}) + self.frame.list = Listbox( + self.frame, + {'relief': 'sunken', + 'selectbackground': '#eed5b7', + 'selectborderwidth': 0, + 'yscroll': self.frame.vscroll.set}) + self.frame.vscroll['command'] = self.frame.list.yview + self.frame.vscroll.pack({'side': 'right', 'fill': 'y'}) + self.frame.list.pack( + {'side': 'top', + 'expand': 'yes', + 'fill': 'both'}) + self.update = Button( + self, + {'text': 'Update', + 'command': self.do_update, + Pack: {'expand': 'yes', + 'fill': 'x'}}) + self.frame.list.bind('<Motion>', self.do_motion) + self.frame.list.bind('<Leave>', self.do_leave) + self.frame.list.bind('<1>', self.do_1) + self.do_update() + +if __name__ == '__main__': + kill = Kill(None, {'bd': 5}) + kill.winfo_toplevel().title('Tkinter Process Killer') + kill.winfo_toplevel().minsize(1, 1) + kill.mainloop() + |