Advertisement
Stosswalkinator

Newer, better text editor with WxPython

Jul 31st, 2013
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.14 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Wed Jul 31 11:18:25 2013
  4.  
  5. @author: lstoss
  6. """
  7.  
  8. import wx # imports the wx module
  9.  
  10. class Notespad(wx.Frame): # creates a class, inherits from the frame class
  11.  
  12.     UNTITLED = 'Untitled'
  13.     WILDCARD = 'Text Documents (*.txt)|*.txt|Python Documents (*.py)|*.py'
  14.    
  15.     def __init__(self, *args, **kwargs):
  16.         # Attributes
  17.         self.file_directory = None
  18.         self.file_name = self.UNTITLED
  19.         self.title_string = '{}{} - NotesPad'
  20.        
  21.         # Frame Setup
  22.         super(Notespad, self).__init__(*args, **kwargs)
  23.         self.CreateStatusBar()
  24.        
  25.         # Frame Menu
  26.         menubar = wx.MenuBar()
  27.         self.SetMenuBar(menubar)
  28.        
  29.         file_menu = wx.Menu()
  30.         menu_open = file_menu.Append(wx.ID_OPEN, "&Open", "Open an existing file")
  31.         menu_new = file_menu.Append(wx.ID_NEW, '&New', 'Creates a new document')
  32.         menu_save = file_menu.Append(wx.ID_SAVE, '&Save', 'Saves the active document')
  33.         menu_saveas = file_menu.Append(wx.ID_SAVEAS, 'Save &As', 'Saves the active document with a new name')
  34.        
  35.         file_menu.AppendSeparator()
  36.         menu_exit = file_menu.Append(-1, "Exit", "Exit the Application")
  37.         menubar.Append(file_menu, "&File")
  38.        
  39.         # Panel and Controls
  40.         panel = wx.Panel(self)
  41.         txt_ctrl = wx.TextCtrl(panel, style=wx.TE_MULTILINE)
  42.        
  43.         # Sizer Creation
  44.         sizer = wx.BoxSizer(wx.VERTICAL)
  45.         sizer.Add(panel, 1, wx.EXPAND)
  46.        
  47.         p_sizer = wx.BoxSizer(wx.VERTICAL)
  48.         p_sizer.Add(txt_ctrl, 1, wx.EXPAND)
  49.        
  50.         # Setting Sizers
  51.         panel.SetSizer(p_sizer)      
  52.         self.SetSizer(sizer)
  53.         self.Layout()
  54.        
  55.         # Event Binds
  56.         self.Bind(wx.EVT_MENU, self.on_menu_open, menu_open)
  57.         self.Bind(wx.EVT_MENU, self.on_menu_exit, menu_exit)
  58.         self.Bind(wx.EVT_MENU, self.on_menu_new, menu_new)
  59.         self.Bind(wx.EVT_MENU, self.on_menu_save, menu_save)
  60.         self.Bind(wx.EVT_MENU, self.on_menu_saveas, menu_saveas)
  61.        
  62.         # Initial State
  63.         self.SetTitle()
  64.        
  65.     # Event Handlers
  66.     def on_menu_open(self, event):
  67.         self.file_open()
  68.         event.Skip()
  69.        
  70.     def on_menu_exit(self, event):
  71.         self.Close()
  72.         event.Skip()
  73.    
  74.     def on_menu_new(self, event):
  75.         self.file_new()
  76.         event.Skip()
  77.        
  78.     def on_menu_save(self, event):
  79.         self.file_save()
  80.         event.Skip()
  81.        
  82.     def on_menu_saveas(self, event):
  83.         self.file_saveas()
  84.         event.Skip()
  85.        
  86.     # Actions
  87.     def file_open(self):
  88.         with wx.FileDialog(self, message='Open', wildcard=self.WILDCARD, style=wx.OPEN) as dlg:
  89.             if dlg.ShowModal() == wx.ID_OK:
  90.                 self.file_directory = dlg.GetDirectory()
  91.                 self.file_name = dlg.GetFilename()
  92.                 self.file_load()
  93.                
  94.     def file_load(self):
  95.         full_path = '/'.join((self.file_directory, self.file_name))
  96.         self.txt_ctrl.LoadFile(full_path)
  97.         self.set_title()
  98.        
  99.     def file_new(self):
  100.         self.file_directory = None
  101.         self.file_name = self.UNTITLED
  102.         self.txt_ctrl.Clear()
  103.         self.set_title()
  104.        
  105.     def file_saveas(self):
  106.         with wx.FileDialog(self, message='Save as', wildcard=self.WILDCARD, style=wx.SAVE) as dlg:
  107.             if dlg.ShowModal() == wx.ID_OK:
  108.                 self.file_directory = dlg.GetDirectory()
  109.                 self.file_name = dlg.GetFilename()
  110.                 self.file_save()
  111.                
  112.     def file_save(self):
  113.         if self.file_name == self.UNTITLED:
  114.             self.file_saveas()
  115.         else:
  116.             full_path = '/'.join((self.file_directory, self.fifile_name))
  117.             self.txt_ctrl.SaveFile(full_path)
  118.             self.set_title()
  119.            
  120.     def set_title(self):
  121.         is_modified = '*' if self.txt_ctrl.IsModified() else ''
  122.         self.SetTitle(self.title_string.format(is_modified, self.file_name))
  123.        
  124.  
  125. if __name__ == '__main__':
  126.     wx_app = wx.App(False)
  127.     wx_app.MainLoop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement