The GUI is very simple, just a text editing area and four buttons: Open, Save, Find, Exit.
The source code for the GUI is listed below. We use a vertical BoxSizer to separate the text area and the button area, and a horizontal BoxSizer for the four buttons. We align the buttons to the right, and create dummy button click event handlers to be implemented in the next post. Lastly, center the window on screen and set default to the Open button.
import wx
class MainFrame(wx.Frame):
def __init__(self, parent=None, id=(-1), title='kasio', size=(800,600)):
wx.Frame.__init__(self, parent, id, title, size=size)
self.panel = wx.Panel(self, wx.ID_ANY)
textbox = wx.TextCtrl(self.panel, -1, style=wx.TE_MULTILINE)
font = wx.Font(10, wx.FONTFAMILY_MODERN, wx.NORMAL, wx.NORMAL)
textbox.SetFont(font)
btnOpen = wx.Button(self.panel, -1, 'Open')
btnSave = wx.Button(self.panel, -1, 'Save')
btnFind = wx.Button(self.panel, -1, 'Find')
btnExit = wx.Button(self.panel, -1, 'Exit')
self.Bind(wx.EVT_BUTTON, self.onOpen, btnOpen)
self.Bind(wx.EVT_BUTTON, self.onSave, btnSave)
self.Bind(wx.EVT_BUTTON, self.onFind, btnFind)
self.Bind(wx.EVT_BUTTON, self.onExit, btnExit)
topSizer = wx.BoxSizer(wx.VERTICAL)
btnSizer = wx.BoxSizer(wx.HORIZONTAL)
btnSizer.Add(btnOpen, 0, wx.ALL, 1)
btnSizer.Add(btnSave, 0, wx.ALL, 1)
btnSizer.Add(btnFind, 0, wx.ALL, 1)
btnSizer.Add(btnExit, 0, wx.ALL, 1)
topSizer.Add(textbox, 1, wx.ALL|wx.EXPAND, 1)
topSizer.Add(wx.StaticLine(self.panel), 0, wx.ALL|wx.EXPAND, 3)
topSizer.Add(btnSizer, 0, wx.ALL|wx.ALIGN_RIGHT, 3)
self.panel.SetSizer(topSizer)
self.Centre() # center the frame in desktop
btnOpen.SetDefault()
self.filename = ''
self.password = ''
self.textbox = textbox
def onOpen(self, event):
pass
def onSave(self, event):
pass
def onFind(self, event):
pass
def onExit(self, event):
self.Close()
class MainApp(wx.App):
def OnInit(self):
frame = MainFrame()
frame.Show(True)
self.SetTopWindow(frame)
return True
def main():
app = MainApp()
app.MainLoop()
if __name__=='__main__':
main()
We will hook up the filecrypto module to the GUI and implement some of the buttons logic in the next post.
No comments:
Post a Comment