Keeping a Tkinter GUI alive during a long running process
kw at codebykevin.com
Fri Dec 21 04:04:18 CET 2012
I maintain a Tkinter application that's a front-end to to a package
manger, and I have never been able to find a way to keep the app from
locking up at some point during the piping in of the package manager's
build output into a text widget. At some point the buffer is overwhelmed
and the app simply can't respond anymore, or writes data to the text
widget after locking up for a period.
I've long used the typical Tkinter design pattern of opening a pipe to
the external command, and letting it do its thing. However, after a
time, this locks up the app. If I try to throttle the buffer with some
combination of "update" or "after" or "update_idletasks," that keeps the
data flowing, but it comes in too slowly and keeps flowing in long after
the external process has terminated.
Below is a sample function that illustrates how I approach this issue.
Can someone suggest a better approach?
#install a fink package
self.package = self.infotable.getcurselection()
if not self.package:
showwarning(title='Error', message='Error', detail='Please
select a package name.', parent=self)
self.packagename = self.package
self.status.set('Installing %s' % self.packagename)
self.file = Popen('echo %s | sudo -S %s -y install %s' %
(self.passtext, self.finkpath.get(), self.packagename), shell=True,
for line in self.file:
Code by Kevin
More information about the Python-list