Skip to content
Fetching contributors…
Cannot retrieve contributors at this time
155 lines (112 sloc) 4.46 KB
#------------------------------------------------------------------------------
# Copyright (c) 2005, Enthought, Inc.
# All rights reserved.
#
# This software is provided without warranty under the terms of the BSD
# license included in enthought/LICENSE.txt and may be redistributed only
# under the conditions described in the aforementioned license. The license
# is also available online at http://www.enthought.com/licenses/BSD.txt
# Thanks for using Enthought open source!
#
# Author: Enthought, Inc.
# Description: <Enthought pyface package component>
#------------------------------------------------------------------------------
""" Application window example. """
# Standard library imports.
import os, sys
# Put the Enthought library on the Python path.
sys.path.append(os.path.abspath(r'..\..\..'))
# Major package imports.
import wx
import wx.html
import wx.lib.wxpTag
# Enthought library imports.
from pyface.api import ApplicationWindow, GUI, ImageResource, ImageWidget
from pyface.action.api import Action, MenuManager, MenuBarManager
# HTML templates.
HTML = """
<html>
<body>
%s
</body>
</html>
"""
PART = """<wxp module="wx" class="Panel"><param name="id" value="%s"><param name="size" value="(50, 50)"></wxp>"""
class MainWindow(ApplicationWindow):
""" The main application window. """
###########################################################################
# 'object' interface.
###########################################################################
def __init__(self, **traits):
""" Creates a new application window. """
# Base class constructor.
super(MainWindow, self).__init__(**traits)
# Add a menu bar.
self.menu_bar_manager = MenuBarManager(
MenuManager(
Action(name='E&xit', on_perform=self.close),
name = '&File',
)
)
return
###########################################################################
# Protected 'Window' interface.
###########################################################################
def _create_contents(self, parent):
""" Creates the window contents.
This method is intended to be overridden if necessary. By default we
just create an empty (and blue!) panel.
"""
panel = wx.Panel(parent, -1, style=wx.CLIP_CHILDREN)
sizer = wx.BoxSizer(wx.VERTICAL)
panel.SetSizer(sizer)
panel.SetAutoLayout(True)
N = 100
wxid = wx.NewId()
# Create the HTML.
parts = []
for i in range(N):
parts.append(PART % str(wxid+i))
html = HTML % "".join(parts)
# Create the HTML window.
html_window = wx.html.HtmlWindow(panel, -1, style=wx.CLIP_CHILDREN)
html_window.SetPage(html)
# Initialize all embedded wx controls.
for i in range(N):
self._initialize_window(html_window, wxid+i)
sizer.Add(html_window, 1, wx.EXPAND)
# Resize the panel to fit the sizer's minimum size.
sizer.Fit(panel)
return panel
###########################################################################
# Private interface.
###########################################################################
def _initialize_window(self, parent, wxid):
""" Initialize the window with the specified Id. """
window = parent.FindWindowById(wxid)
sizer = wx.BoxSizer(wx.VERTICAL)
window.SetSizer(sizer)
window.SetAutoLayout(True)
window.SetBackgroundColour('white')
window.SetWindowStyleFlag(wx.CLIP_CHILDREN)
window.Refresh()
image = ImageResource('closed_folder_24x24')
bitmap = image.create_image().ConvertToBitmap()
image_widget = ImageWidget(window, bitmap=bitmap)
image_widget.control.SetBackgroundColour('white')
sizer.Add(image_widget.control, 0, wx.EXPAND)
text = wx.StaticText(window, -1, "Blah", style=wx.ALIGN_CENTRE)
sizer.Add(text, 0, wx.EXPAND)
# Resize the window to match the sizer's minimum size.
sizer.Fit(window)
return
# Application entry point.
if __name__ == '__main__':
# Create the GUI (this does NOT start the GUI event loop).
gui = GUI()
# Create and open the main window.
window = MainWindow()
window.open()
# Start the GUI event loop!
gui.start_event_loop()
##### EOF #####################################################################
Something went wrong with that request. Please try again.