golden hour
/lib64/python2.7/Demo/tkinter/guido
⬆️ Go Up
Upload
File/Folder
Size
Actions
AttrDialog.py
14 KB
Del
OK
AttrDialog.pyc
18.34 KB
Del
OK
AttrDialog.pyo
18.34 KB
Del
OK
ManPage.py
6.7 KB
Del
OK
ManPage.pyc
6.27 KB
Del
OK
ManPage.pyo
6.27 KB
Del
OK
MimeViewer.py
4.39 KB
Del
OK
MimeViewer.pyc
4.83 KB
Del
OK
MimeViewer.pyo
4.83 KB
Del
OK
ShellWindow.py
4.07 KB
Del
OK
ShellWindow.pyc
5.47 KB
Del
OK
ShellWindow.pyo
5.47 KB
Del
OK
brownian.py
1.07 KB
Del
OK
brownian.pyc
1.59 KB
Del
OK
brownian.pyo
1.59 KB
Del
OK
brownian2.py
1.35 KB
Del
OK
brownian2.pyc
1.74 KB
Del
OK
brownian2.pyo
1.74 KB
Del
OK
canvasevents.py
6.45 KB
Del
OK
canvasevents.pyc
10.46 KB
Del
OK
canvasevents.pyo
10.46 KB
Del
OK
dialog.py
3.13 KB
Del
OK
dialog.pyc
3.11 KB
Del
OK
dialog.pyo
3.11 KB
Del
OK
electrons.py
2.27 KB
Del
OK
electrons.pyc
2.33 KB
Del
OK
electrons.pyo
2.33 KB
Del
OK
hanoi.py
4.54 KB
Del
OK
hanoi.pyc
3.82 KB
Del
OK
hanoi.pyo
3.82 KB
Del
OK
hello.py
331 B
Del
OK
hello.pyc
701 B
Del
OK
hello.pyo
701 B
Del
OK
imagedraw.py
509 B
Del
OK
imagedraw.pyc
1.13 KB
Del
OK
imagedraw.pyo
1.13 KB
Del
OK
imageview.py
205 B
Del
OK
imageview.pyc
570 B
Del
OK
imageview.pyo
570 B
Del
OK
kill.py
3.79 KB
Del
OK
kill.pyc
4.81 KB
Del
OK
kill.pyo
4.81 KB
Del
OK
listtree.py
991 B
Del
OK
listtree.pyc
1.5 KB
Del
OK
listtree.pyo
1.5 KB
Del
OK
mbox.py
7.3 KB
Del
OK
mbox.pyc
8.17 KB
Del
OK
mbox.pyo
8.17 KB
Del
OK
newmenubardemo.py
1.2 KB
Del
OK
newmenubardemo.pyc
1.59 KB
Del
OK
newmenubardemo.pyo
1.59 KB
Del
OK
optionmenu.py
441 B
Del
OK
optionmenu.pyc
594 B
Del
OK
optionmenu.pyo
594 B
Del
OK
paint.py
1.85 KB
Del
OK
paint.pyc
2.19 KB
Del
OK
paint.pyo
2.19 KB
Del
OK
rmt.py
4.39 KB
Del
OK
rmt.pyc
4.93 KB
Del
OK
rmt.pyo
4.93 KB
Del
OK
solitaire.py
17.37 KB
Del
OK
solitaire.pyc
20.41 KB
Del
OK
solitaire.pyo
20.41 KB
Del
OK
sortvisu.py
18.89 KB
Del
OK
sortvisu.pyc
23.18 KB
Del
OK
sortvisu.pyo
23.18 KB
Del
OK
ss1.py
25.57 KB
Del
OK
ss1.pyc
31.67 KB
Del
OK
ss1.pyo
31.07 KB
Del
OK
svkill.py
4.75 KB
Del
OK
svkill.pyc
5.8 KB
Del
OK
svkill.pyo
5.8 KB
Del
OK
switch.py
1.52 KB
Del
OK
switch.pyc
2.85 KB
Del
OK
switch.pyo
2.85 KB
Del
OK
tkman.py
8.79 KB
Del
OK
tkman.pyc
8.88 KB
Del
OK
tkman.pyo
8.88 KB
Del
OK
wish.py
623 B
Del
OK
wish.pyc
736 B
Del
OK
wish.pyo
736 B
Del
OK
Edit: ShellWindow.py
import os import sys import string from Tkinter import * from ScrolledText import ScrolledText from Dialog import Dialog import signal BUFSIZE = 512 class ShellWindow(ScrolledText): def __init__(self, master=None, shell=None, **cnf): if not shell: try: shell = os.environ['SHELL'] except KeyError: shell = '/bin/sh' shell = shell + ' -i' args = string.split(shell) shell = args[0] apply(ScrolledText.__init__, (self, master), cnf) self.pos = '1.0' self.bind('<Return>', self.inputhandler) self.bind('<Control-c>', self.sigint) self.bind('<Control-t>', self.sigterm) self.bind('<Control-k>', self.sigkill) self.bind('<Control-d>', self.sendeof) self.pid, self.fromchild, self.tochild = spawn(shell, args) self.tk.createfilehandler(self.fromchild, READABLE, self.outputhandler) def outputhandler(self, file, mask): data = os.read(file, BUFSIZE) if not data: self.tk.deletefilehandler(file) pid, sts = os.waitpid(self.pid, 0) print 'pid', pid, 'status', sts self.pid = None detail = sts>>8 cause = sts & 0xff if cause == 0: msg = "exit status %d" % detail else: msg = "killed by signal %d" % (cause & 0x7f) if cause & 0x80: msg = msg + " -- core dumped" Dialog(self.master, text=msg, title="Exit status", bitmap='warning', default=0, strings=('OK',)) return self.insert(END, data) self.pos = self.index("end - 1 char") self.yview_pickplace(END) def inputhandler(self, *args): if not self.pid: self.no_process() return "break" self.insert(END, "\n") line = self.get(self.pos, "end - 1 char") self.pos = self.index(END) os.write(self.tochild, line) return "break" def sendeof(self, *args): if not self.pid: self.no_process() return "break" os.close(self.tochild) return "break" def sendsig(self, sig): if not self.pid: self.no_process() return "break" os.kill(self.pid, sig) return "break" def sigint(self, *args): return self.sendsig(signal.SIGINT) def sigquit(self, *args): return self.sendsig(signal.SIGQUIT) def sigterm(self, *args): return self.sendsig(signal.SIGTERM) def sigkill(self, *args): return self.sendsig(signal.SIGKILL) def no_process(self): Dialog(self.master, text="No active process", title="No process", bitmap='error', default=0, strings=('OK',)) MAXFD = 100 # Max number of file descriptors (os.getdtablesize()???) def spawn(prog, args): p2cread, p2cwrite = os.pipe() c2pread, c2pwrite = os.pipe() pid = os.fork() if pid == 0: # Child for i in 0, 1, 2: try: os.close(i) except os.error: pass if os.dup(p2cread) <> 0: sys.stderr.write('popen2: bad read dup\n') if os.dup(c2pwrite) <> 1: sys.stderr.write('popen2: bad write dup\n') if os.dup(c2pwrite) <> 2: sys.stderr.write('popen2: bad write dup\n') os.closerange(3, MAXFD) try: os.execvp(prog, args) finally: sys.stderr.write('execvp failed\n') os._exit(1) os.close(p2cread) os.close(c2pwrite) return pid, c2pread, p2cwrite def test(): shell = string.join(sys.argv[1:]) root = Tk() root.minsize(1, 1) if shell: w = ShellWindow(root, shell=shell) else: w = ShellWindow(root) w.pack(expand=1, fill=BOTH) w.focus_set() w.tk.mainloop() if __name__ == '__main__': test()
Save