adding "Print" menu in wxPython
Akand Islam
sohel807 at gmail.com
Tue Jan 25 22:51:01 EST 2011
Thanks for your response. Actually I already know I have to create
"OnPrint" method followed by adding the menu named "Print" that calls
"OnPrint" method. But the problem I am facing is to implement it. Here
are the codes I am adding (from Tutorial) which make an editor and I
want to add printing option so that I can print whatever is written in
the editor. I will appreciate if you add coding with this file.
===========================================================================================
import wx
import os.path
class MainWindow(wx.Frame):
def __init__(self, filename='noname.txt'):
super(MainWindow, self).__init__(None, size=(400,200))
self.filename = filename
self.dirname = '.'
self.CreateInteriorWindowComponents()
self.CreateExteriorWindowComponents()
def CreateInteriorWindowComponents(self):
''' Create "interior" window components. In this case it is
just a
simple multiline text control. '''
self.control = wx.TextCtrl(self, style=wx.TE_MULTILINE)
def CreateExteriorWindowComponents(self):
''' Create "exterior" window components, such as menu and
status
bar. '''
self.CreateMenu()
self.CreateStatusBar()
self.SetTitle()
def CreateMenu(self):
fileMenu = wx.Menu()
for id, label, helpText, handler in \
[(wx.ID_ABOUT, '&About', 'Information about this program',
self.OnAbout),
(wx.ID_OPEN, '&Open', 'Open a new file', self.OnOpen),
(wx.ID_SAVE, '&Save', 'Save the current file',
self.OnSave),
(wx.ID_SAVEAS, 'Save &As', 'Save the file under a
different name',
self.OnSaveAs),
(None, None, None, None),
(wx.ID_EXIT, 'E&xit', 'Terminate the program',
self.OnExit)]:
if id == None:
fileMenu.AppendSeparator()
else:
item = fileMenu.Append(id, label, helpText)
self.Bind(wx.EVT_MENU, handler, item)
menuBar = wx.MenuBar()
menuBar.Append(fileMenu, '&File') # Add the fileMenu to the
MenuBar
self.SetMenuBar(menuBar) # Add the menuBar to the Frame
def SetTitle(self):
# MainWindow.SetTitle overrides wx.Frame.SetTitle, so we have
to
# call it using super:
super(MainWindow, self).SetTitle('Editor %s'%self.filename)
# Helper methods:
def defaultFileDialogOptions(self):
''' Return a dictionary with file dialog options that can be
used in both the save file dialog as well as in the open
file dialog. '''
return dict(message='Choose a file', defaultDir=self.dirname,
wildcard='*.*')
def askUserForFilename(self, **dialogOptions):
dialog = wx.FileDialog(self, **dialogOptions)
if dialog.ShowModal() == wx.ID_OK:
userProvidedFilename = True
self.filename = dialog.GetFilename()
self.dirname = dialog.GetDirectory()
self.SetTitle() # Update the window title with the new
filename
else:
userProvidedFilename = False
dialog.Destroy()
return userProvidedFilename
# Event handlers:
def OnAbout(self, event):
dialog = wx.MessageDialog(self, 'A sample editor\n'
'in wxPython', 'About Sample Editor', wx.OK)
dialog.ShowModal()
dialog.Destroy()
def OnExit(self, event):
self.Close() # Close the main window.
def OnSave(self, event):
textfile = open(os.path.join(self.dirname, self.filename),
'w')
textfile.write(self.control.GetValue())
textfile.close()
def OnOpen(self, event):
if self.askUserForFilename(style=wx.OPEN,
**self.defaultFileDialogOptions()):
textfile = open(os.path.join(self.dirname, self.filename),
'r')
self.control.SetValue(textfile.read())
textfile.close()
def OnSaveAs(self, event):
if self.askUserForFilename(defaultFile=self.filename,
style=wx.SAVE,
**self.defaultFileDialogOptions()):
self.OnSave(event)
app = wx.App()
frame = MainWindow()
frame.Show()
app.MainLoop()
====================================================================================
-- Akand
On Jan 25, 6:54 pm, rantingrick <rantingr... at gmail.com> wrote:
> On Jan 25, 5:52 pm, Akand Islam <sohel... at gmail.com> wrote:
>
>
>
> > I will appreciate if someone please show me how to add
> > printing option.
>
> Hello Akand,
>
> Well the first step would be to create a stub "OnPrint" method and add
> a command to the File menu named "Print" that calls the "OnPrint"
> method. Can you do this part yourself? All the answers you need are in
> the source you linked to. Give it your best shot and then post some
> code with a specific question if you get stuck.
More information about the Python-list
mailing list