SpecPython is a GUI-Builder for Python + Tkinter. It is based on SpecTcl/SpecJava (the gui builder for Tcl). This is version 0.1 of SpecPython. I wrote it in 2 days, so it is incomplete. But a lot of things are supported. I would appreciate any suggestions, bug reports, patches or whatever. What do you need? --------------- - SpecJava 0.3 and tcl7.5, tk4.1 or higher with blt - SpecTcl 1.0 and tcl7.6, tk4.2 or higher Install: -------- 1) Install SpecJava or SpecTcl 2) Copy python_init.tk into your specjava/spectcl directory (e.g. /usr/local/lib/SpecTcl). 3) Change the environment variables in specPython. 4) Copy specPython into your bin directory (e.g. /usr/local/bin). 5) Copy SpecTclrc into your home directory. SpecTclrc contain a bit of code that creates tcl images for all gif files in your current directory. It creates an images with the name x if the name of the image file is x.gif. You can use these images in SpecPython. Features: --------- SpecPython creates: - a class. You should inherit you application class from this class. - instances for all specified variables with StringVar (). - images for all specified images. - empty callback for each command. - all widgets. - the scrollbar/listbox connections Examples: --------- SpecPython generates code like this: ==================================== # generated by SpecPython # interface generated by SpecTcl version 0.3 from untitled.py.ui # Experimental python tk version using the grid geometry manager import Tkinter; Tk = Tkinter class untitled (Tk.Frame): def __init__ (self, master = None, iconPath = '.', **packOptions): Tk.Frame.__init__ (self, master) self.CreateVariables () self.CreateImages (iconPath) self.CreateWidgets () self.pack (packOptions) def CreateVariables (self): self.input_1 = Tk.StringVar () self.input_2 = Tk.StringVar () def CreateImages (self, iconPath): self.__image_runner__ = Tk.PhotoImage ('runner', file = iconPath + '/' + 'runner.gif') def callback_1 (self): pass def callback_2 (self): pass def CreateWidgets (self): self.label_1 = Tk.Label (self, { 'text' : 'label' }) self.entry_1 = Tk.Entry (self, { 'textvariable' : self.input_1 }) self.listbox_1 = Tk.Listbox (self, { 'height' : '0', 'width' : '0' }) self.scrollbar_1 = Tk.Scrollbar (self, { 'orient' : 'v' }) self.label_2 = Tk.Label (self, { 'image' : 'runner', 'text' : 'label' }) self.entry_2 = Tk.Entry (self, { 'textvariable' : self.input_2 }) self.button_1 = Tk.Button (self, { 'command' : self.callback_1, 'padx' : '11', 'pady' : '4', 'text' : 'button' }) self.button_2 = Tk.Button (self, { 'command' : self.callback_2, 'padx' : '11', 'pady' : '4', 'text' : 'button' }) self.listbox_1['yscrollcommand'] = self.scrollbar_1.set self.scrollbar_1['command'] = self.listbox_1.yview self.label_1.grid({ 'in' : self, 'column' : '1', 'row' : '1', 'sticky' : '' }) self.entry_1.grid({ 'in' : self, 'column' : '2', 'row' : '1', 'sticky' : '' }) self.listbox_1.grid({ 'in' : self, 'column' : '3', 'row' : '1', 'rowspan' : '3', 'sticky' : 'nsew' }) self.scrollbar_1.grid({ 'in' : self, 'column' : '4', 'row' : '1', 'rowspan' : '3', 'sticky' : 'ns' }) self.label_2.grid({ 'in' : self, 'column' : '1', 'row' : '2', 'sticky' : '' }) self.entry_2.grid({ 'in' : self, 'column' : '2', 'row' : '2', 'sticky' : '' }) self.button_1.grid({ 'in' : self, 'column' : '1', 'row' : '3', 'sticky' : '' }) self.button_2.grid({ 'in' : self, 'column' : '2', 'row' : '3', 'sticky' : '' }) self.rowconfigure (1, {'weight' : 1, 'minsize' : 30}) self.rowconfigure (2, {'weight' : 0, 'minsize' : 30}) self.rowconfigure (3, {'weight' : 0, 'minsize' : 30}) self.columnconfigure (1, {'weight' : 0, 'minsize' : 30}) self.columnconfigure (2, {'weight' : 0, 'minsize' : 30}) self.columnconfigure (3, {'weight' : 0, 'minsize' : 30}) self.columnconfigure (4, {'weight' : 0, 'minsize' : 30}) if __name__ == '__main__': app = untitled (fill = 'both', expand = 1) app.mainloop () ================================================= I would appreciate any suggestions, bug reports, patches or whatever. ////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ |Andreas Koschinsky|email: marvin@logware.de| |logware GmbH|Schwedenstr. 9|13359 Berlin|phone: +49 30 49901-243|fax: -139| -------------------------------------------------------------------------------- She's not truly a Bundy. You see, your mother is just a Bundy by marriage. She's part of the curse. But we are blood Bundies. We are truly doomed! \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\////////////////////////////////////////