By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
446,187 Members | 1,059 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 446,187 IT Pros & Developers. It's quick & easy.

Inheritance problem. Creating an instance.

P: n/a
.nu
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Name: Sleepy Hollow
# Author: .nu

import wx
import os
import sys
NEW_ID = 1; OPEN_ID = 2; SAVE_ID = 3; SAVE_AS_ID = 4;
QUIT_ID = 5; UNDO_ID = 6; REDO_ID = 7; HELPME_ID = 8;
ABOUT_ID = 9; OPTIONS_ID = 10

APP_NAME = 'Sleepy Hollow'

class SleepyHollow(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, size=(600, 400))
self.SetTitle(APP_NAME)
# create sizers
self.vbox = wx.BoxSizer(wx.VERTICAL)

# create instance of the NoteBook class, then put a tab on it
self.notebook = NoteBook(self)
self.notebook.createTab()

# Create items(statusbar, number panel, etc)
self.statusbar = self.CreateStatusBar()
#self.statusbar.Hide()

#wx.EVT_KEY_UP(self.textarea, self.key_press)
# Call methods that can be turned on/off through options
self.statusbar_toggle(self, 0)
#self.hbox.Add(self.textarea, 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0)
#self.vbox.Add(self.hbox, 1, wx.EXPAND, 0)

#self.SetAutoLayout(True)

self.Layout()

## Menu
self.menubar = wx.MenuBar()
self.SetMenuBar(self.menubar)

self.file = wx.Menu()
self.new = wx.MenuItem(self.file, NEW_ID, 'new')
self.file.AppendItem(self.new)
self.open = wx.MenuItem(self.file, OPEN_ID, '&Open\tCtrl+O')
self.file.AppendItem(self.open)
self.file.AppendSeparator()
self.save = wx.MenuItem(self.file, SAVE_ID, '&Save\tCtrl+S')
self.file.AppendItem(self.save)
self.saveas = wx.MenuItem(self.file, SAVE_AS_ID, '&Save
as\tCtrl+Shift+s')
self.file.AppendItem(self.saveas)
self.file.AppendSeparator()
self.quit = wx.MenuItem(self.file, QUIT_ID, '&Quit')
self.file.AppendItem(self.quit)

self.edit = wx.Menu()
self.undo = wx.MenuItem(self.edit, UNDO_ID, '&Undo\tCtrl+z')
self.edit.AppendItem(self.undo)
self.redo = wx.MenuItem(self.edit, REDO_ID, '&Redo\tCtrl+Shift+z')
self.edit.AppendItem(self.redo)
self.edit.AppendSeparator()
self.options = wx.MenuItem(self.edit, OPTIONS_ID, '&Options\tCtrl+p')
self.edit.AppendItem(self.options)

self.help = wx.Menu()
self.helpme = wx.MenuItem(self.help, HELPME_ID, '&Help\tF1')
self.help.AppendItem(self.helpme)
self.about = wx.MenuItem(self.help, ABOUT_ID, '&About\tF2')
self.help.AppendItem(self.about)

self.menubar.Append(self.file, '&File')
self.menubar.Append(self.edit, '&Edit')
self.menubar.Append(self.help, '&Help')

# bind items to functions
self.Bind(wx.EVT_MENU, self.New, id=NEW_ID)
self.Bind(wx.EVT_MENU, self.Open, id=OPEN_ID)
self.Bind(wx.EVT_MENU, self.Save, id=SAVE_ID)
self.Bind(wx.EVT_MENU, self.Saveas, id=SAVE_AS_ID)
self.Bind(wx.EVT_MENU, self.Undo, id=UNDO_ID)
self.Bind(wx.EVT_MENU, self.Redo, id=REDO_ID)
self.Bind(wx.EVT_MENU, self.Helpme, id=HELPME_ID)
self.Bind(wx.EVT_MENU, self.About, id=ABOUT_ID)
self.Bind(wx.EVT_MENU, self.Quit, id=QUIT_ID)
self.Bind(wx.EVT_MENU, self.Options, id=OPTIONS_ID)
## Random variables
self.fileName = ''
self.dirName = ''

self.tempFileName = ''
self.tempDirName = ''

self.oldPos = -1
self.show_position(self)
## Menu Methods
def New(self, event):
self.popup(self, "Would you like to save this file before starting a
new one?", "Save?", wx.YES | wx.NO | wx.ICON_QUESTION)
#self.textarea.SetValue('')
self.notebook.createTab()

def Open(self, event):
open_dialog = wx.FileDialog(self, "Open", self.dirName,
self.fileName, "Text Files (*.txt)|*.txt|All Files|*.*", wx.OPEN)
# If open_dialog opens, try to get dirName and fileName, and open it
in the textarea
if (open_dialog.ShowModal() == wx.ID_OK):
try:
self.tempDirName = open_dialog.GetDirectory()
self.tempFileName = open_dialog.GetFilename()
self.file = file(os.path.join(self.tempDirName, self.tempFileName),
'r')
self.fileContents = self.file.read()
self.textarea.SetValue(self.fileContents.decode('u tf-8'))
self.SetTitle(APP_NAME + " | " + self.tempFileName + "")
self.fileName = self.tempFileName
print '--------- Open succeeded. Showing temporary and current
filenames (testing purposes) -------';
print '--------- Open succeeded. Showing temporary and current
filenames (testing purposes) -------';
print 'fileName :',self.fileName
self.dirName = self.tempDirName
self.file.close()
except:
self.tempDirName = self.dirName
self.tempFilename = self.fileName
print '--------- open failed. showing file names again (testing
purposes) ----------'
print 'temp file :',self.tempFileName
print 'fileName :', self.fileName
self.popup(self,'Could Not open file.', 'Error', wx.OK
|wx.ICON_ERROR)
open_dialog.Destroy()
def Save(self, event):
if (self.fileName != "") and (self.dirName != ""):
self.file = file(os.path.join(self.dirName, self.fileName), 'w') #
<-- Same as: self.file = file(self.dirName + '/' + self.fileName, 'w')
self.fileContents = self.textarea.GetValue()
self.file.write(self.fileContents.encode('utf-8'))
self.SetTitle(APP_NAME + " | " + self.fileName + "")
self.file.close()
print '*saved*'

else:
self.Saveas(self)
def Saveas(self, event):
# Ask for filename
saveDialogue = wx.FileDialog(self, "Save As", self.dirName,
self.fileName, "Text Files (*.txt)|*.txt|All Files|*.*", wx.SAVE |
wx.OVERWRITE_PROMPT)
if (saveDialogue.ShowModal() == wx.ID_OK):
self.fileName = saveDialogue.GetFilename()
self.dirName = saveDialogue.GetDirectory()
if self.Save(self):
self.SetTitle(APP_NAME + " | " + self.fileName + "")
saveDialogue.Destroy()
def Quit(self, event):
self.Destroy()

def Undo(self, event):
pass

def Redo(self, event):
pass

def Helpme(self, event):
self.popup(self, "No help file has been created yet.", "Help", wx.OK
| wx.ICON_INFORMATION)

def About(self, event):
self.popup(self, "Milkpad Lite 1.0\nby .nu\nwww.ficti0n.com",
"About", wx.OK | wx.ICON_INFORMATION)

def Options(self, event):
pass

## Option Methods
def statusbar_toggle(self, event, switch):
#if 1, then show. if 0, hide.
if (switch == True):
self.statusbar.Show()
self.Refresh()
elif (switch == False):
self.statusbar.Hide()

## Random Methods
def popup(self, event, message, title, button_type_and_icon):
# Show a pop-up message
popup_dialog = wx.MessageDialog(self, message, title,
button_type_and_icon)
popup_dialog.ShowModal()
popup_dialog.Destroy()

def key_press(self, event):
self.show_position(self)
event.Skip()

def show_position(self, event):
#(bPos,ePos) = self.textarea.GetSelection()
#if (self.oldPos != ePos):
#(c,r) = self.textarea.PositionToXY(ePos)
#self.SetStatusText(" " + str((r+1,c+1)))
#self.oldPos = ePos
pass
## This is the Notebook class. It is called in SleepyHollow's __init__
method to
## Create the notebook and createTab() creates/add a new tab(file->new)
class NoteBook(wx.Notebook):
def __init__(self, parent):
wx.Notebook.__init__(self, parent, -1, style=wx.NB_TOP)
#print parent
#self.notebook = wx.Notebook(parent, -1, style=wx.NB_TOP)
self.number_of_tabs = 0

""" #*_*_*__*_*_*_*_*_*_*_*__*_*_*_*_*_*_*_*__*___ERRO R__*__*_*_*_*_*_*_*_*__*_*_*_*_*_*_*_*__*_*_*_*_*_ *_*_*__*_*_*_*_*_
# This is where I am having problems. I am trying to create an
instance of SleepyHollow
# So i can call its 'popup' method. But i keep getting errors when
trying to create this instance
sh = SleepyHollow(parent, -1, '')
#*_*_*__*_*_*_*_*_*_*_*__*_*_*_*_*_*_*_*__*___ERRO R__*__*_*_*_*_*_*_*_*__*_*_*_*_*_*_*_*__*_*_*_*_*_ *_*_*__*_*_*_*_*_
"""

def tabCounter(self, action):
""" action is either 'add' or 'subtract' """
if(action == 'add'):
self.number_of_tabs += 1
print self.number_of_tabs
elif(action == 'subtract'):
self.number_of_tabs -= 1
#SleepyHollow.popup(SleepyHollow,'Could Not open file.', 'Error',
wx.OK |wx.ICON_ERROR)

def createTab(self):
#self.notebook_pane1 = wx.Panel(self.notebook)
#wx.Panel.__init__(self)
#t = wx.StaticText(self, -1, "This is a PageOne object", (20,20))
self.textarea = wx.TextCtrl(self, -1, ' hehe', style=wx.TE_MULTILINE)
self.AddPage(self.textarea, 'tab')
self.tabCounter('add')

def deleteTab(self):
pass

if __name__ == "__main__":
app = wx.App(0)
MainFrame = SleepyHollow(None, -1, '')
MainFrame.Show()
app.MainLoop()


So there i have two classes.
The main class, SleepyHollow, creates the main frame and the menu.
Inside the SleepyHollow class, i create an instance to NoteBook class
and call on it.
The NoteBook class creates a notebook and adds tabs to the notebook.

However, inside the NoteBook class, i try to call a SleepyHollow method
(the 'popup' method, for displaying dialogues), but i keep getting this
error:

/usr/bin/python -u "path/to/file/file.py"
Traceback (most recent call last):

File "path/to/file/file.py", line 256, in ?
MainFrame = SleepyHollow(None, -1, '')

File "path/to/file/file.py", line 26, in __init__
self.notebook = NoteBook(self)

File "path/to/file/file.py", line 222, in __init__
wx.Notebook.__init__(self, parent, -1, style=wx.NB_TOP)

File "path/to/file/file.py", line 3117, in __init__
self.this = newobj.this
AttributeError: 'PySwigObject' object has no attribute 'this'

Dec 6 '06 #1
Share this question for a faster answer!
Share on Google+

This discussion thread is closed

Replies have been disabled for this discussion.