Newbie Help Please.(OO and Tkinter)

SA sarmstrong13 at mac.com
Sun Jun 16 16:24:44 CEST 2002


Hi Everyone-

    I've had some problems finishing this code. I think it stems from my
lack of OOP understanding. Below is the code:

from Tkinter import *
import os
import commands
import tkSimpleDialog

class PyShell(tkSimpleDialog.Dialog):
    def clearin(self):
        self.t1.delete(0.0,END)
    def clearout(self):
        self.t2.delete(0.0,END)
    def expyth(self):
        self.t2.delete(0.0, END)
        self.output = commands.getoutput(self.t1.get(0.0, END))
        self.t2.insert(END, self.output)
    def __init__(self, top):
        self.t1 = Text(top, height="12", width="84", font="Courier 12")
        self.t1.pack(side=TOP, pady=2)
        f = Frame(top)
        f.pack()
        self.b1 = Button(f, text="Execute", command=self.expyth)
        self.b1.pack(side=LEFT)
        self.b2 = Button(f, text="Clear Input", command=self.clearin)
        self.b2.pack(side=LEFT)
        self.b3 = Button(f, text="Clear Output", command=self.clearout)
        self.b3.pack(side=LEFT)
        self.b4 = Button(f, text="Save Input", command=Saving.savin)
        self.b4.pack(side=LEFT)
        self.t2 = Text(top, height="12", width="84", bg="lightblue",
font="Courier 12")
        self.t2.pack(side=TOP, pady=2)
        
class Saving(PyShell):
    
    def savin(self, question):
        Label(question, text="Directory:").grid(row=0)
        Label(question, text="Filename:").grid(row=1)
        self.e1 = Entry(question)
        self.e2 = Entry(question)
        self.e1.grid(row=0, column=1)
        self.e2.grid(row=1, column=1)
        def apply(self):
            self.dir = self.e1.get()
            self.fn = self.e2.get()
            self.sav = self.dir + self.fn
            self.savfile = open(self.sav, "w")
            for line in self.t1.readlines():
                self.savefile.write(line)
            self.savefile.close()
            
root = Tk()
app = PyShell(root)
root.mainloop()



Everything runs until I try to save the text in t1 with the "Save Input"
button. I end up with the following error:

Exception in Tkinter callback
Traceback (most recent call last):
  File "/sw/src/root-python-2.2.1-6/sw/lib/python2.2/lib-tk/Tkinter.py",
line 1292, in __call__
    return apply(self.func, args)
TypeError: unbound method savin() must be called with Saving instance as
first argument (got nothing instead)

What am I doing wrong? Saving should inherit from PyShell correct? And in
order to work correctly saving needs tkSimpleDialog.Dialog, so PyShell
inherits this correct?

Or am I totally wrong here?

Thanks.
SA




More information about the Python-list mailing list