textView.py 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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, modal=True, _htest=False):
  9. """Show the given text in a scrollable window with a 'close' button
  10. If modal option set to False, user can interact with other windows,
  11. otherwise they will be unable to interact with other windows until
  12. the textview window is closed.
  13. _htest - bool; change box location when running htest.
  14. """
  15. Toplevel.__init__(self, parent)
  16. self.configure(borderwidth=5)
  17. # place dialog below parent if running htest
  18. self.geometry("=%dx%d+%d+%d" % (750, 500,
  19. parent.winfo_rootx() + 10,
  20. parent.winfo_rooty() + (10 if not _htest else 100)))
  21. #elguavas - config placeholders til config stuff completed
  22. self.bg = '#ffffff'
  23. self.fg = '#000000'
  24. self.CreateWidgets()
  25. self.title(title)
  26. self.protocol("WM_DELETE_WINDOW", self.Ok)
  27. self.parent = parent
  28. self.textView.focus_set()
  29. #key bindings for this dialog
  30. self.bind('<Return>',self.Ok) #dismiss dialog
  31. self.bind('<Escape>',self.Ok) #dismiss dialog
  32. self.textView.insert(0.0, text)
  33. self.textView.config(state=DISABLED)
  34. if modal:
  35. self.transient(parent)
  36. self.grab_set()
  37. self.wait_window()
  38. def CreateWidgets(self):
  39. frameText = Frame(self, relief=SUNKEN, height=700)
  40. frameButtons = Frame(self)
  41. self.buttonOk = Button(frameButtons, text='Close',
  42. command=self.Ok, takefocus=FALSE)
  43. self.scrollbarView = Scrollbar(frameText, orient=VERTICAL,
  44. takefocus=FALSE, highlightthickness=0)
  45. self.textView = Text(frameText, wrap=WORD, highlightthickness=0,
  46. fg=self.fg, bg=self.bg)
  47. self.scrollbarView.config(command=self.textView.yview)
  48. self.textView.config(yscrollcommand=self.scrollbarView.set)
  49. self.buttonOk.pack()
  50. self.scrollbarView.pack(side=RIGHT,fill=Y)
  51. self.textView.pack(side=LEFT,expand=TRUE,fill=BOTH)
  52. frameButtons.pack(side=BOTTOM,fill=X)
  53. frameText.pack(side=TOP,expand=TRUE,fill=BOTH)
  54. def Ok(self, event=None):
  55. self.destroy()
  56. def view_text(parent, title, text, modal=True):
  57. return TextViewer(parent, title, text, modal)
  58. def view_file(parent, title, filename, encoding=None, modal=True):
  59. try:
  60. if encoding:
  61. import codecs
  62. textFile = codecs.open(filename, 'r')
  63. else:
  64. textFile = open(filename, 'r')
  65. except IOError:
  66. tkMessageBox.showerror(title='File Load Error',
  67. message='Unable to load file %r .' % filename,
  68. parent=parent)
  69. except UnicodeDecodeError as err:
  70. showerror(title='Unicode Decode Error',
  71. message=str(err),
  72. parent=parent)
  73. else:
  74. return view_text(parent, title, textFile.read(), modal)
  75. if __name__ == '__main__':
  76. import unittest
  77. unittest.main('idlelib.idle_test.test_textview', verbosity=2, exit=False)
  78. from idlelib.idle_test.htest import run
  79. run(TextViewer)