Re: Tkinter polling example: file copy with progress bar

2010-12-15 Thread Steve Holden
On 12/14/2010 11:52 PM, JohnWShipman wrote:
 you
 know how us ancient Unix weenies are.

Indeed we do ... ;-)

regards
 Steve
-- 
Steve Holden   +1 571 484 6266   +1 800 494 3119
PyCon 2011 Atlanta March 9-17   http://us.pycon.org/
See Python Video!   http://python.mirocommunity.org/
Holden Web LLC http://www.holdenweb.com/

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Tkinter polling example: file copy with progress bar

2010-12-14 Thread baloan
Unfortunately you use command('cp...') to copy the file instead of
Pythons portable library methods. This choice
effectively makes your program work on Unix only (not Windows).

See http://modcopy.sourceforge.net for a more portable version.

Regards,
bal...@gmail.com
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Tkinter polling example: file copy with progress bar

2010-12-14 Thread D'Arcy J.M. Cain
On Tue, 14 Dec 2010 07:35:45 -0800 (PST)
baloan balo...@googlemail.com wrote:
 Unfortunately you use command('cp...') to copy the file instead of
 Pythons portable library methods. This choice
 effectively makes your program work on Unix only (not Windows).
 
 See http://modcopy.sourceforge.net for a more portable version.

I guess I missed the beginning of this thread but can someone tell me
why one needs to download a whole other program in order to do this?

  open(out_fn, 'w').write(open(in_fn).read())

-- 
D'Arcy J.M. Cain da...@druid.net |  Democracy is three wolves
http://www.druid.net/darcy/|  and a sheep voting on
+1 416 425 1212 (DoD#0082)(eNTP)   |  what's for dinner.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Tkinter polling example: file copy with progress bar

2010-12-14 Thread Harishankar
On Tue, 14 Dec 2010 10:57:40 -0500, D'Arcy J.M. Cain wrote:
 I guess I missed the beginning of this thread but can someone tell me
 why one needs to download a whole other program in order to do this?
 
   open(out_fn, 'w').write(open(in_fn).read())

Or what about shutil? Isn't that the higher level file operation module?

-- 
Harishankar (http://harishankar.org http://lawstudentscommunity.com)

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Tkinter polling example: file copy with progress bar

2010-12-14 Thread D'Arcy J.M. Cain
On Tue, 14 Dec 2010 16:25:54 + (UTC)
Harishankar v.harishan...@gmail.com wrote:
 On Tue, 14 Dec 2010 10:57:40 -0500, D'Arcy J.M. Cain wrote:
open(out_fn, 'w').write(open(in_fn).read())
 Or what about shutil? Isn't that the higher level file operation module?

At least that's in the standard library but even then it can be
overkill for a simple copy.  It does do some error checking that the
above doesn't do if you need that.

-- 
D'Arcy J.M. Cain da...@druid.net |  Democracy is three wolves
http://www.druid.net/darcy/|  and a sheep voting on
+1 416 425 1212 (DoD#0082)(eNTP)   |  what's for dinner.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Tkinter polling example: file copy with progress bar

2010-12-14 Thread JohnWShipman
On Dec 14, 8:57 am, D'Arcy J.M. Cain da...@druid.net wrote:
 On Tue, 14 Dec 2010 07:35:45 -0800 (PST)

 baloan balo...@googlemail.com wrote:
  Unfortunately you use command('cp...') to copy the file instead of
  Pythons portable library methods. This choice
  effectively makes your program work on Unix only (not Windows).

  Seehttp://modcopy.sourceforge.netfor a more portable version.

 I guess I missed the beginning of this thread but can someone tell me
 why one needs to download a whole other program in order to do this?

   open(out_fn, 'w').write(open(in_fn).read())

I posted this example because I got several queries on how to do
polling in Tkinter, specifically how to use the .after() universal
widget method.  The points about using the portable library methods
are all well taken.  I used file copy as the example long-running
process because a reader wanted to know how to do that specifically.
Please forgive me for not thinking about portability and stuff; you
know how us ancient Unix weenies are.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Tkinter polling example: file copy with progress bar

2010-12-14 Thread JohnWShipman
On Dec 14, 8:57 am, D'Arcy J.M. Cain da...@druid.net wrote:
 On Tue, 14 Dec 2010 07:35:45 -0800 (PST)

 baloan balo...@googlemail.com wrote:
  Unfortunately you use command('cp...') to copy the file instead of
  Pythons portable library methods. This choice
  effectively makes your program work on Unix only (not Windows).

  Seehttp://modcopy.sourceforge.netfor a more portable version.

 I guess I missed the beginning of this thread but can someone tell me
 why one needs to download a whole other program in order to do this?

   open(out_fn, 'w').write(open(in_fn).read())

I posted this example because I got several queries on how to do
polling in Tkinter, specifically how to use the .after() universal
widget method.  The points about using the portable library methods
are all well taken.  I used file copy as the example long-running
process because a reader wanted to know how to do that specifically.
Please forgive me for not thinking about portability and stuff; you
know how us ancient Unix weenies are.
-- 
http://mail.python.org/mailman/listinfo/python-list


Tkinter polling example: file copy with progress bar

2010-12-12 Thread JohnWShipman
Attached below is a Tkinter script that demonstrates polling, that is,
performing a long-running process in parallel with the GUI.  The
script asks for an input file name and an output file name and copies
the input file to the output file.  The copy operation is done in a
child process managed with pexpect, and the GUI reports the progress
of the file copy using a Scale widget as a progress bar.

Cordially,
John W. Shipman, NM Tech Computer Center, Socorro, NM; j...@nmt.edu

#!/usr/bin/env python
#
# copyprogress:  File copy with a progress bar for Tkinter 8.4.
#   - Demonstrates Tkinter .after() and the pexpect module.
# Written by John W. Shipman (j...@nmt.edu), New Mexico Tech
# Computer Center, Socorro, NM 87801 USA.  This script is in
# the public domain.
#

# - - - - -   I m p o r t s

import sys, os, stat
import Tkinter as tk
import tkFileDialog, tkMessageBox
import pexpect

# - - - - -   M a n i f e s t   c o n s t a n t s

BUTTON_FONT = (Helvetica, 17)
LABEL_FONT = (Helvetica, 14)
ENTRY_FONT = (DejaVu Sans Mono, 12)
POLL_TIME = 50   # Polling frequency in milliseconds


# - - - - -   m a i n

def main():


app = App()
app.master.title(Copy with progress bar)
app.mainloop()

# - - - - -   c l a s s   A p p

class App(tk.Frame):
'''Copies a file with a progress bar.

  Widgets:
.fromFileVar:StringVar for source file name
.fromFileEntry:  Entry for source file name
.fromFileBrowse: Browse button for source file name
.fromFileLabel:  Label for above
.toFileVar:  StringVar for destination file name
.toFileEntry:Entry for destination file name
.toFileBrowse:   Browse button for destination file name
.toFileLabel:Label for above
.copyButton: Button to start copying
.progressVar:DoubleVar for progress scale
.progressScale:  Scale to show progress

  Grid plan:
 01 2
++-++
  0 | .fromFileEntry | .fromFileBrowse | .fromFileLabel |
++-++
  1 | .toFileEntry   | .toFileBrowse   | .toFileLabel   |
++-++
  2 | .progress  | .copyButton | .quitButton|
++-++

  Internal state:
.fromFileSize:   Source file size in bytes
.child:  pexpect child process to do the copy
'''

# - - -   A p p . _ _ i n i t _ _

def __init__(self, master=None):
tk.Frame.__init__(self, master)
self.grid()
self.__createWidgets()

# - - -   A p p . _ _ c r e a t e w i d g e t s

def __createWidgets(self):
'''Create all widgets and associated variables.
'''
self.fromFileVar = tk.StringVar()
self.fromFileEntry = tk.Entry ( self,
textvariable=self.fromFileVar,
font=ENTRY_FONT, width=50 )
rowx, colx = 0, 0
self.fromFileEntry.grid(row=rowx, column=colx, sticky=tk.E)

self.fromFileBrowse = tk.Button ( self,
command=self.__browseFrom,
font=BUTTON_FONT, text=Browse )
colx += 1
self.fromFileBrowse.grid(row=rowx, column=colx)

self.fromFileLabel = tk.Label ( self,
font=LABEL_FONT, text=Source file )
colx += 1
self.fromFileLabel.grid(row=rowx, column=colx, sticky=tk.W)

self.toFileVar = tk.StringVar()
self.toFileEntry = tk.Entry ( self,
textvariable=self.toFileVar,
font=ENTRY_FONT, width=50 )
rowx, colx = rowx+1, 0
self.toFileEntry.grid(row=rowx, column=colx, sticky=tk.E)

self.toFileBrowse = tk.Button ( self,
command=self.__browseTo,
font=BUTTON_FONT, text=Browse )
colx += 1
self.toFileBrowse.grid(row=rowx, column=colx)

self.toFileLabel = tk.Label ( self,
font=LABEL_FONT, text=Destination file)
colx += 1
self.toFileLabel.grid(row=rowx, column=colx, sticky=tk.W)

self.progressVar = tk.DoubleVar()
self.progressScale = tk.Scale ( self,
 length=400, orient=tk.HORIZONTAL,
 from_=0.0, to=100.0, resolution=0.1, tickinterval=20.0,
 variable=self.progressVar,
 label=Percent completion, font=LABEL_FONT )
rowx, colx = rowx+1, 0
self.progressScale.grid(row=rowx, column=colx, sticky=tk.E)

self.copyButton = tk.Button ( self,
command=self.__copyHandler,
font=BUTTON_FONT, text=Copy )
colx += 1
self.copyButton.grid(row=rowx, column=colx )

self.quitButton = tk.Button ( self, command=self.quit,