[Tutor] A better way to do it.

Jacob S. keridee at jayco.net
Mon Dec 20 20:18:53 CET 2004


Okay, here's the code.

I am completely open to suggestions as this is my first dabbling in Tk.
Please look over it when you have time.

I have a couple of questions.
1) How do I change the title of the window?
2) Why does a window pop up saying something like error, the memory could
not be "read". I'm running
Windows XP, the script window disappears, and everything, just this message
pops up.


Jacob Schmidt

----------------------------------------------------------------------------
-
from Tkinter import *
import tkMessageBox
import os
from filecmp import cmpfiles

class Copying:
    def __init__(self,action,var,err):
        self.action = action
        self.pri = var
        self.err = err

        self.j = os.path.join
        self.r = os.path.isdir
        self.e = os.path.isfile

        ####################################################################
        #  These are the default values for the directories. To make it
simpler you could... ##
        ## pseudo
        ##  self.usbdrive = remote folder
        ## self.desktop = localer folder
        ####################################################################
        dirlist = os.listdir("c:\\")
        if 'Jacob Laptop' in dirlist:
            self.usbdrive = 'E:\\Working Python Programs'
            self.desktop = 'C:\\documents and
settings\\jacob\\desktop\\Working Python Programs'
        elif 'Home Computer' in dirlist:
            self.usbdrive = 'F:\\Working Python Programs'
            self.desktop = 'C:\\documents and
settings\\owner\\desktop\\Working Python Programs'
        elif 'Sissy Computer' in dirlist:
            self.usbdrive = '' ## Need to fill in
            self.desktop = ''  ## Need to fill in
        elif 'Michael Laptop' in dirlist:
            self.usbdrive = 'E:\\Working Python Programs'
            self.desktop = 'C:\\documents and
settings\\michael\\desktop\\Working Python Programs'
        elif 'Office Computer' in dirlist:
            self.usbdrive = 'D:\\Working Python Programs'
            self.desktop = 'C:\\windows\\desktop\\Working Python Programs'
        elif 'School Auction Laptop' in dirlist:
            self.usbdrive = '' ## Need to fill in
            self.desktop = 'C:\\windows\\desktop\\Working Python Programs'
        else:
            print 'Hey you need to put a folder in this computer!. '
            print '''Folders include:
            Jacob Laptop
            Home Computer
            Sissy Computer
            Michael Laptop
            Office Computer
            School Auction Laptop
            '''
            folder = raw_input('Which computer is this? ')
            folder = "C:\\"+folder
            os.mkdir(folder)
            self.usbdrive = raw_input('What is the usb drive on this
computer? ')
            self.desktop = raw_input('What is the desktop on this computer?
')

        # ################################################# #
        if not os.path.exists(self.desktop):
            os.mkdir(self.desktop)
        m = {'receiving':self.receiving,'sending':self.sending}
        m[self.action]()


    def copyfile(self,src,des):
        x = open(src,'rb').read()
        y = open(des,'wb')
        y.write(x)
        y.close()


    def receiving(self):
        chiplist = os.listdir(self.usbdrive)
        pclist = os.listdir(self.desktop)
        filechange = cmpfiles(self.usbdrive,self.desktop,chiplist)[1]
        tot = 0
        for x in chiplist:
            if x not in pclist:
                filechange.append(x)
        for x in filechange:
            fullname = self.j(self.usbdrive,x)
            if self.e(fullname):
                self.copyfile(fullname,self.j(self.desktop, x))
                self.pri.set("Copying %s." % x)
                self.err.insert(END,"%s copied from chip to computer.\n" %
x)
                tot = tot + 1
            elif self.r(fullname):
                self.err.insert(END,"%s is a directory. It has not been
copied.\n" % fullname)
        self.err.insert(END,"%s file(s) copied.\n"%tot)
        self.pri.set("")
        pclist.sort()
        chiplist.sort()
        newlist = [x for x in pclist if x not in chiplist]
        for x in newlist:
            if tkMessageBox.askokcancel('Delete?',"Do you wish to delete %s?
" % x):
                filename = self.j(self.desktop, x)
                if self.e(filename):
                    os.remove(filename)
                    self.err.insert(END,"%s has been removed from your
chip.\n"%x)
                elif self.r(filename):
                    os.rmdir(filename)
                    self.err.insert(END,"%s has been removed from your
chip.\n"%x)
            else:
                self.err.insert(END,"Did not remove %s\n"%x)

    def sending(self):
        pclist = os.listdir(self.desktop)
        chiplist = os.listdir(self.usbdrive)
        filechange = cmpfiles(self.desktop,self.usbdrive,pclist)[1]
        tot = 0
        for x in pclist:
            if x not in chiplist:
                filechange.append(x)
        for x in filechange:
            fullname = self.j(self.desktop,x)
            if self.e(fullname):
                self.copyfile(fullname,self.j(self.usbdrive,x))
                self.pri.set("Copying %s. " % x)
                self.err.insert(END,"%s copied from computer to chip.\n" %
x)
                tot = tot + 1
            elif self.r(fullname):
                self.err.insert(END,"%s is a directory. It has not been
copied.\n" % x)
        self.err.insert(END,"%s file(s) copied.\n"%tot)
        self.pri.set("")
        chiplist.sort()
        pclist.sort()
        newlist = [x for x in chiplist if x not in pclist]
        for x in newlist:
            if tkMessageBox.askokcancel('Delete?',"Do you wish to delete %s?
" % x):
                filename = self.j(self.usbdrive, x)
                if self.e(filename):
                    os.remove(filename)
                    self.err.insert(END,"%s has been removed from your
chip.\n"%x)
                elif self.r(filename):
                    os.rmdir(filename)
                    self.err.insert(END,"%s has been removed from your
chip.\n"%x)
            else:
                self.err.insert(END,"Did not remove %s\n"%x)



class Application(Frame):
    def s(self):
        Copying(action='sending',var=self.pri,err=self.error)

    def r(self):
        Copying(action='receiving',var=self.pri,err=self.error)

    def createWidgets(self):
        self.QUIT = Button(self)
        self.QUIT["text"] = "QUIT"
        self.QUIT["fg"]   = "red"
        self.QUIT["command"] =  self.quit
        self.QUIT.grid(row=1,column=1)

        self.hi_there = Button(self)
        self.hi_there["text"] = "Sending",
        self.hi_there["command"] = self.s
        self.hi_there.grid(row=1,column=2)

        self.REC = Button(self)
        self.REC['text'] = "Receiving"
        self.REC['command'] = self.r
        self.REC.grid(row=1,column=3)

        self.pri = StringVar()
        self.TEXT = Label(self,textvariable=self.pri)
        self.TEXT.grid(row=2,column=1,columnspan=3)

        self.error = Text(self,fg='blue',height=10)
        self.error.grid(row = 3,column = 1,columnspan = 3)

    def __init__(self, master=None):
        Frame.__init__(self,master)
        self.title = "Copying"
        self.pack()
        self.createWidgets()

app = Application()
app.mainloop()




More information about the Tutor mailing list