gui-wx.py
106 lines
| 3.0 KiB
| text/x-python
|
PythonLexer
Fernando Perez
|
r4419 | #!/usr/bin/env python | ||
Fernando Perez
|
r4440 | """ | ||
A Simple wx example to test IPython's event loop integration. | ||||
Brian Granger
|
r2214 | |||
To run this do: | ||||
Piotr Zolnierczuk
|
r5922 | In [5]: %gui wx # or start IPython with '--gui wx' or '--pylab wx' | ||
Brian Granger
|
r2214 | |||
In [6]: %run gui-wx.py | ||||
Ref: Modified from wxPython source code wxPython/samples/simple/simple.py | ||||
""" | ||||
import wx | ||||
class MyFrame(wx.Frame): | ||||
""" | ||||
This is MyFrame. It just shows a few controls on a wxPanel, | ||||
and has a simple menu. | ||||
""" | ||||
def __init__(self, parent, title): | ||||
wx.Frame.__init__(self, parent, -1, title, | ||||
pos=(150, 150), size=(350, 200)) | ||||
# Create the menubar | ||||
menuBar = wx.MenuBar() | ||||
Bernardo B. Marques
|
r4872 | # and a menu | ||
Brian Granger
|
r2214 | menu = wx.Menu() | ||
# add an item to the menu, using \tKeyName automatically | ||||
# creates an accelerator, the third param is some help text | ||||
# that will show up in the statusbar | ||||
menu.Append(wx.ID_EXIT, "E&xit\tAlt-X", "Exit this simple sample") | ||||
# bind the menu event to an event handler | ||||
self.Bind(wx.EVT_MENU, self.OnTimeToClose, id=wx.ID_EXIT) | ||||
# and put the menu on the menubar | ||||
menuBar.Append(menu, "&File") | ||||
self.SetMenuBar(menuBar) | ||||
self.CreateStatusBar() | ||||
# Now create the Panel to put the other controls on. | ||||
panel = wx.Panel(self) | ||||
# and a few controls | ||||
text = wx.StaticText(panel, -1, "Hello World!") | ||||
text.SetFont(wx.Font(14, wx.SWISS, wx.NORMAL, wx.BOLD)) | ||||
text.SetSize(text.GetBestSize()) | ||||
btn = wx.Button(panel, -1, "Close") | ||||
funbtn = wx.Button(panel, -1, "Just for fun...") | ||||
# bind the button events to handlers | ||||
self.Bind(wx.EVT_BUTTON, self.OnTimeToClose, btn) | ||||
self.Bind(wx.EVT_BUTTON, self.OnFunButton, funbtn) | ||||
# Use a sizer to layout the controls, stacked vertically and with | ||||
# a 10 pixel border around each | ||||
sizer = wx.BoxSizer(wx.VERTICAL) | ||||
sizer.Add(text, 0, wx.ALL, 10) | ||||
sizer.Add(btn, 0, wx.ALL, 10) | ||||
sizer.Add(funbtn, 0, wx.ALL, 10) | ||||
panel.SetSizer(sizer) | ||||
panel.Layout() | ||||
def OnTimeToClose(self, evt): | ||||
"""Event handler for the button click.""" | ||||
Thomas Kluyver
|
r6453 | print("See ya later!") | ||
Brian Granger
|
r2214 | self.Close() | ||
def OnFunButton(self, evt): | ||||
"""Event handler for the button click.""" | ||||
Thomas Kluyver
|
r6453 | print("Having fun yet?") | ||
Brian Granger
|
r2214 | |||
class MyApp(wx.App): | ||||
def OnInit(self): | ||||
frame = MyFrame(None, "Simple wxPython App") | ||||
self.SetTopWindow(frame) | ||||
Thomas Kluyver
|
r6453 | print("Print statements go to this stdout window by default.") | ||
Brian Granger
|
r2214 | |||
frame.Show(True) | ||||
return True | ||||
Fernando Perez
|
r4440 | |||
Fernando Perez
|
r4419 | if __name__ == '__main__': | ||
Fernando Perez
|
r4440 | |||
Fernando Perez
|
r4419 | app = wx.GetApp() | ||
if app is None: | ||||
app = MyApp(redirect=False, clearSigInt=False) | ||||
Piotr Zolnierczuk
|
r5922 | else: | ||
frame = MyFrame(None, "Simple wxPython App") | ||||
app.SetTopWindow(frame) | ||||
Thomas Kluyver
|
r6453 | print("Print statements go to this stdout window by default.") | ||
Piotr Zolnierczuk
|
r5922 | frame.Show(True) | ||
Brian Granger
|
r2214 | |||
Fernando Perez
|
r4419 | try: | ||
from IPython.lib.inputhook import enable_wx | ||||
enable_wx(app) | ||||
except ImportError: | ||||
app.MainLoop() | ||||