Python Forum
[WxPython] [Tutorial] Notespad - Create a text editor - W.I.P.
Thread Rating:
  • 1 Vote(s) - 5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[WxPython] [Tutorial] Notespad - Create a text editor - W.I.P.
#6
I've taken this back a step, updated to python 3 and refactored the code a bit.

The only change i needed to update to python 3 was
style=wx.OPEN
to
style=wx.FD_OPEN
I've also changed
self.SetTitle('{} - Notespad'.format(filename))
to use new string formating
self.SetTitle(f'{filename} - Notespad')
The new code
import wx


class Notespad(wx.Frame):
 
    def __init__(self, *args, **kwargs):
        super(Notespad, self).__init__(*args, **kwargs)
        self.frame_settings()
        self.create_menu()
        self.create_gui_items()
        self.create_sizers()
         
    def frame_settings(self):
        self.SetTitle('Untitled - Notespad')
        self.CreateStatusBar()
         
    def create_menu(self):
        menubar = wx.MenuBar()
        self.SetMenuBar(menubar)
        file_menu = wx.Menu()
        menu_open = file_menu.Append(wx.ID_OPEN, '&Open',
                                     'Open an existing file')
        file_menu.AppendSeparator()
        menu_exit = file_menu.Append(-1, 'E&xit', 'Exit the Application')
        menubar.Append(file_menu, '&File')
         
        self.Bind(wx.EVT_MENU, self.on_menu_exit, menu_exit)
        self.Bind(wx.EVT_MENU, self.on_menu_open, menu_open)
         
    def create_gui_items(self):
        self.frame_panel = wx.Panel(self)
        self.txt_ctrl = wx.TextCtrl(self.frame_panel,
                                    style=wx.TE_MULTILINE | wx.BORDER_NONE)
         
    def create_sizers(self):
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.frame_panel, 1, wx.EXPAND)
        p_sizer = wx.BoxSizer(wx.VERTICAL)
        p_sizer.Add(self.txt_ctrl, 1, wx.EXPAND)
        self.frame_panel.SetSizer(p_sizer)
        self.SetSizer(sizer)
        self.Layout()
 
    def on_menu_exit(self, event):
        self.Close()
        event.Skip()
 
    def on_menu_open(self, event):
        wildcard = 'Text Documents (*.txt)|*.txt|Python Documents (*.py)|*.py'
        with wx.FileDialog(self, message='Open', wildcard=wildcard,
                           style=wx.FD_OPEN) as dlg:
            if dlg.ShowModal() == wx.ID_OK:
                directory, filename = dlg.GetDirectory(), dlg.GetFilename()
                self.load_file_to_txt_ctrl(directory, filename)
                 
        event.Skip()
                 
    def load_file_to_txt_ctrl(self, directory, filename):
        self.txt_ctrl.LoadFile('/'.join((directory, filename)))
        self.SetTitle(f'{filename} - Notespad')
 
 
if __name__ == '__main__':
    wx_app = wx.App(False)
    frame = Notespad(None)
    frame.Show()
    wx_app.MainLoop()
Reply


Messages In This Thread
RE: [WxPython][Tutorial] Notespad W.I.P. - by Yoriz - Sep-17-2016, 05:17 PM
RE: [Tutorial] Notespad W.I.P. - by Yoriz - Mar-27-2019, 10:23 PM
RE: [Tutorial] Notespad W.I.P. - by Yoriz - Mar-28-2019, 12:08 AM
RE: [Tutorial] Notespad W.I.P. - by Yoriz - Apr-30-2019, 10:30 PM
RE: [Tutorial] Notespad W.I.P. - by Yoriz - Apr-30-2019, 10:53 PM
RE: [Tutorial] Notespad W.I.P. - by Yoriz - May-03-2019, 10:59 PM

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020