diff options
-rwxr-xr-x | Demo/tkinter/guido/kill.py | 119 | ||||
-rw-r--r-- | Lib/lib-tk/Dialog.py | 38 | ||||
-rwxr-xr-x | Lib/tkinter/Dialog.py | 38 | ||||
-rw-r--r-- | Modules/tkappinit.c | 36 |
4 files changed, 231 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() + diff --git a/Lib/lib-tk/Dialog.py b/Lib/lib-tk/Dialog.py new file mode 100644 index 0000000..28222ec --- /dev/null +++ b/Lib/lib-tk/Dialog.py @@ -0,0 +1,38 @@ +# Dialog.py -- Tkinter interface to the tk_dialog script. +from Tkinter import * + +class Dialog(Widget): + def __init__(self, master=None, cnf={}): + Widget._setup(self, master, cnf) + self.num = apply(self.tk.call, + ('tk_dialog', self._w, + cnf['title'], cnf['text'], + cnf['bitmap'], cnf['default']) + + cnf['strings']) + try: Widget.destroy(self) + except TclError: pass + def destroy(self): pass + +def _test(): + d = Dialog(None, {'title': 'File Modified', + 'text': + 'File "Python.h" has been modified' + ' since the last time it was saved.' + ' Do you want to save it before' + ' exiting the application.', + 'bitmap': 'warning', + 'default': 0, + 'strings': ('Save File', + 'Discard Changes', + 'Return to Editor')}) + print d.num + + +if __name__ == '__main__': + t = Button(None, {'text': 'Test', + 'command': _test, + Pack: {}}) + q = Button(None, {'text': 'Quit', + 'command': t.quit, + Pack: {}}) + t.mainloop() diff --git a/Lib/tkinter/Dialog.py b/Lib/tkinter/Dialog.py new file mode 100755 index 0000000..28222ec --- /dev/null +++ b/Lib/tkinter/Dialog.py @@ -0,0 +1,38 @@ +# Dialog.py -- Tkinter interface to the tk_dialog script. +from Tkinter import * + +class Dialog(Widget): + def __init__(self, master=None, cnf={}): + Widget._setup(self, master, cnf) + self.num = apply(self.tk.call, + ('tk_dialog', self._w, + cnf['title'], cnf['text'], + cnf['bitmap'], cnf['default']) + + cnf['strings']) + try: Widget.destroy(self) + except TclError: pass + def destroy(self): pass + +def _test(): + d = Dialog(None, {'title': 'File Modified', + 'text': + 'File "Python.h" has been modified' + ' since the last time it was saved.' + ' Do you want to save it before' + ' exiting the application.', + 'bitmap': 'warning', + 'default': 0, + 'strings': ('Save File', + 'Discard Changes', + 'Return to Editor')}) + print d.num + + +if __name__ == '__main__': + t = Button(None, {'text': 'Test', + 'command': _test, + Pack: {}}) + q = Button(None, {'text': 'Quit', + 'command': t.quit, + Pack: {}}) + t.mainloop() diff --git a/Modules/tkappinit.c b/Modules/tkappinit.c new file mode 100644 index 0000000..daff9e5 --- /dev/null +++ b/Modules/tkappinit.c @@ -0,0 +1,36 @@ +/* appinit.c -- Tcl and Tk application initialization. */ + +#include <tcl.h> +#include <tk.h> + +int +Tcl_AppInit (interp) + Tcl_Interp *interp; +{ + Tk_Window main; + + main = Tk_MainWindow(interp); + + if (Tcl_Init (interp) == TCL_ERROR) + return TCL_ERROR; + if (Tk_Init (interp) == TCL_ERROR) + return TCL_ERROR; + +#ifdef WITH_MOREBUTTONS + { + extern Tcl_CmdProc studButtonCmd; + extern Tcl_CmdProc triButtonCmd; + + Tcl_CreateCommand(interp, "studbutton", studButtonCmd, + (ClientData) main, NULL); + Tcl_CreateCommand(interp, "tributton", triButtonCmd, + (ClientData) main, NULL); + } +#endif +#ifdef WITH_XXX + +#endif + + return TCL_OK; +} + |