/Lib/idlelib/textView.py

http://unladen-swallow.googlecode.com/ · Python · 93 lines · 75 code · 10 blank · 8 comment · 6 complexity · 63abd16e136dac6adb71c4f11db3e526 MD5 · raw file

  1. """Simple text browser for IDLE
  2. """
  3. from Tkinter import *
  4. import tkMessageBox
  5. class TextViewer(Toplevel):
  6. """A simple text viewer dialog for IDLE
  7. """
  8. def __init__(self, parent, title, text):
  9. """Show the given text in a scrollable window with a 'close' button
  10. """
  11. Toplevel.__init__(self, parent)
  12. self.configure(borderwidth=5)
  13. self.geometry("=%dx%d+%d+%d" % (625, 500,
  14. parent.winfo_rootx() + 10,
  15. parent.winfo_rooty() + 10))
  16. #elguavas - config placeholders til config stuff completed
  17. self.bg = '#ffffff'
  18. self.fg = '#000000'
  19. self.CreateWidgets()
  20. self.title(title)
  21. self.transient(parent)
  22. self.grab_set()
  23. self.protocol("WM_DELETE_WINDOW", self.Ok)
  24. self.parent = parent
  25. self.textView.focus_set()
  26. #key bindings for this dialog
  27. self.bind('<Return>',self.Ok) #dismiss dialog
  28. self.bind('<Escape>',self.Ok) #dismiss dialog
  29. self.textView.insert(0.0, text)
  30. self.textView.config(state=DISABLED)
  31. self.wait_window()
  32. def CreateWidgets(self):
  33. frameText = Frame(self, relief=SUNKEN, height=700)
  34. frameButtons = Frame(self)
  35. self.buttonOk = Button(frameButtons, text='Close',
  36. command=self.Ok, takefocus=FALSE)
  37. self.scrollbarView = Scrollbar(frameText, orient=VERTICAL,
  38. takefocus=FALSE, highlightthickness=0)
  39. self.textView = Text(frameText, wrap=WORD, highlightthickness=0,
  40. fg=self.fg, bg=self.bg)
  41. self.scrollbarView.config(command=self.textView.yview)
  42. self.textView.config(yscrollcommand=self.scrollbarView.set)
  43. self.buttonOk.pack()
  44. self.scrollbarView.pack(side=RIGHT,fill=Y)
  45. self.textView.pack(side=LEFT,expand=TRUE,fill=BOTH)
  46. frameButtons.pack(side=BOTTOM,fill=X)
  47. frameText.pack(side=TOP,expand=TRUE,fill=BOTH)
  48. def Ok(self, event=None):
  49. self.destroy()
  50. def view_text(parent, title, text):
  51. TextViewer(parent, title, text)
  52. def view_file(parent, title, filename, encoding=None):
  53. try:
  54. if encoding:
  55. import codecs
  56. textFile = codecs.open(filename, 'r')
  57. else:
  58. textFile = open(filename, 'r')
  59. except IOError:
  60. import tkMessageBox
  61. tkMessageBox.showerror(title='File Load Error',
  62. message='Unable to load file %r .' % filename,
  63. parent=parent)
  64. else:
  65. return view_text(parent, title, textFile.read())
  66. if __name__ == '__main__':
  67. #test the dialog
  68. root=Tk()
  69. root.title('textView test')
  70. filename = './textView.py'
  71. text = file(filename, 'r').read()
  72. btn1 = Button(root, text='view_text',
  73. command=lambda:view_text(root, 'view_text', text))
  74. btn1.pack(side=LEFT)
  75. btn2 = Button(root, text='view_file',
  76. command=lambda:view_file(root, 'view_file', filename))
  77. btn2.pack(side=LEFT)
  78. close = Button(root, text='Close', command=root.destroy)
  79. close.pack(side=RIGHT)
  80. root.mainloop()