Some random test apps that I've been playing with
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@42803 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
5c9d9745fe
commit
6ed100b4a1
85
wxPython/tests/test_bufDcBlit.py
Normal file
85
wxPython/tests/test_bufDcBlit.py
Normal file
@ -0,0 +1,85 @@
|
||||
import wx
|
||||
import os
|
||||
print "PID:", os.getpid()
|
||||
|
||||
count = 0
|
||||
|
||||
class ResultsFrame(wx.Frame):
|
||||
def __init__(self, parent, bmp):
|
||||
global count
|
||||
count += 1
|
||||
wx.Frame.__init__(self, parent, title=str(count), size=(100,100))
|
||||
p = wx.Panel(self)
|
||||
sb = wx.StaticBitmap(p, -1, bmp, (20,20))
|
||||
self.Show()
|
||||
|
||||
|
||||
|
||||
class TestPanel(wx.Panel):
|
||||
def __init__(self, parent):
|
||||
wx.Panel.__init__(self, parent)
|
||||
b = wx.Button(self, -1, "Test", (50,50))
|
||||
self.Bind(wx.EVT_BUTTON, self.OnButton, b)
|
||||
|
||||
def RunTest(self, bdc, bg, fg):
|
||||
# draw to the buffered dc
|
||||
bdc.SetBackground(wx.Brush(bg))
|
||||
bdc.Clear()
|
||||
bdc.SetPen(wx.Pen(fg, 2))
|
||||
bdc.DrawLine(0,0, 30,30)
|
||||
bdc.DrawLine(0,30, 30,0)
|
||||
|
||||
# now bilt it to a bitmap
|
||||
bmp = wx.EmptyBitmap(30,30)
|
||||
mdc = wx.MemoryDC()
|
||||
mdc.SelectObject(bmp)
|
||||
mdc.Blit(0,0, 30,30, bdc, 0,0)
|
||||
del mdc
|
||||
|
||||
# display the results
|
||||
ResultsFrame(self, bmp)
|
||||
|
||||
|
||||
|
||||
def OnButton(self, evt):
|
||||
|
||||
# 1. test a buffered dc not using a buffer bitmap
|
||||
bdc = wx.BufferedDC(wx.ClientDC(self), self.GetSize())
|
||||
self.RunTest(bdc, "yellow", "red")
|
||||
del bdc
|
||||
|
||||
# 2. now do one that does have a buffer bitmap
|
||||
buf = wx.EmptyBitmap(100,100)
|
||||
bdc = wx.BufferedDC(wx.ClientDC(self), buf)
|
||||
self.RunTest(bdc, "red", "blue")
|
||||
del bdc
|
||||
|
||||
# 3. now one without a real DC
|
||||
buf = wx.EmptyBitmap(100,100)
|
||||
bdc = wx.BufferedDC(None, buf)
|
||||
self.RunTest(bdc, "purple", "yellow")
|
||||
del bdc
|
||||
|
||||
# 4. finally test a real unbuffered DC
|
||||
dc = wx.ClientDC(self)
|
||||
self.RunTest(dc, "red", "white")
|
||||
|
||||
|
||||
# blit from the last buffer back to the main window
|
||||
buf.SetMaskColour("yellow")
|
||||
mdc = wx.MemoryDC()
|
||||
mdc.SelectObject(buf)
|
||||
dc.Blit(100,100,30,30, mdc, 0,0, useMask=True)
|
||||
|
||||
|
||||
|
||||
app = wx.App(0)
|
||||
frm = wx.Frame(None)
|
||||
pnl = TestPanel(frm)
|
||||
frm.Show()
|
||||
app.MainLoop()
|
||||
|
||||
|
||||
|
||||
|
||||
|
371
wxPython/tests/test_comboTreeBox.py
Normal file
371
wxPython/tests/test_comboTreeBox.py
Normal file
@ -0,0 +1,371 @@
|
||||
|
||||
|
||||
import wx, unittest
|
||||
from wx.lib.combotreebox import ComboTreeBox, IterableTreeCtrl
|
||||
|
||||
|
||||
class ComboTreeBoxTest(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.comboBoxEventReceived = False
|
||||
frame = wx.Frame(None)
|
||||
self.comboBox = ComboTreeBox(frame, platform=platform)
|
||||
self.tree = self.comboBox._popupFrame.GetTree()
|
||||
|
||||
def onComboBox(self, event):
|
||||
self.comboBoxEventReceived = True
|
||||
|
||||
def testComboBoxIsEmptyByDefault(self):
|
||||
self.assertEqual(0, self.comboBox.GetCount())
|
||||
|
||||
def testAddingOneItem(self):
|
||||
self.comboBox.Append('Item 1')
|
||||
self.assertEqual(1, self.comboBox.GetCount())
|
||||
|
||||
def testAddingTwoItems(self):
|
||||
self.comboBox.Append('Item 1')
|
||||
self.comboBox.Append('Item 2')
|
||||
self.assertEqual(2, self.comboBox.GetCount())
|
||||
|
||||
def testAddingTwoParentAndChild(self):
|
||||
item1 = self.comboBox.Append('Item 1')
|
||||
self.comboBox.Append('Item 2', item1)
|
||||
self.assertEqual(2, self.comboBox.GetCount())
|
||||
|
||||
def testSelectingAnItemPutsItInTheComboBox(self):
|
||||
self.comboBox.Append('Item 1')
|
||||
self.comboBox.Bind(wx.EVT_COMBOBOX, self.onComboBox)
|
||||
self.comboBox.NotifyItemSelected('Item 1')
|
||||
self.failUnless(self.comboBoxEventReceived)
|
||||
|
||||
def testClear(self):
|
||||
self.comboBox.Append('Item 1')
|
||||
self.comboBox.Clear()
|
||||
self.assertEqual(0, self.comboBox.GetCount())
|
||||
|
||||
def testDelete(self):
|
||||
self.comboBox.Append('Item 1')
|
||||
self.comboBox.Delete(self.tree.GetFirstItem())
|
||||
self.assertEqual(0, self.comboBox.GetCount())
|
||||
|
||||
def testGetSelection_NoItems(self):
|
||||
self.failIf(self.comboBox.GetSelection().IsOk())
|
||||
|
||||
def testGetSelection_NoSelection(self):
|
||||
self.comboBox.Append('Item 1')
|
||||
self.failIf(self.comboBox.GetSelection().IsOk())
|
||||
|
||||
def testGetSelection_WithSelection(self):
|
||||
item1 = self.comboBox.Append('Item 1')
|
||||
self.comboBox.SetValue('Item 1')
|
||||
self.assertEqual(item1, self.comboBox.GetSelection())
|
||||
|
||||
def testGetSelection_EquallyNamedNodes_SelectedInTree(self):
|
||||
item1 = self.comboBox.Append('Item')
|
||||
item2 = self.comboBox.Append('Item')
|
||||
self.tree.SelectItem(item2)
|
||||
self.assertEqual(self.tree.GetSelection(), self.comboBox.GetSelection())
|
||||
|
||||
def testGetSelection_EquallyNamedNodes_TypedInTextBox(self):
|
||||
item1 = self.comboBox.Append('Item')
|
||||
item2 = self.comboBox.Append('Item')
|
||||
self.comboBox.SetValue('Item')
|
||||
self.assertEqual(item1, self.comboBox.GetSelection())
|
||||
|
||||
def testFindString_NotPresent(self):
|
||||
self.comboBox.Append('Item 1')
|
||||
self.failIf(self.comboBox.FindString('Item 2').IsOk())
|
||||
|
||||
def testFindString_Present(self):
|
||||
self.comboBox.Append('Item 1')
|
||||
self.assertEqual(self.tree.GetFirstItem(),
|
||||
self.comboBox.FindString('Item 1'))
|
||||
|
||||
def testFindString_Child(self):
|
||||
parent = self.comboBox.Append('Parent')
|
||||
child = self.comboBox.Append('Child', parent=parent)
|
||||
self.assertEqual(child, self.comboBox.FindString('Child'))
|
||||
|
||||
def testGetString_NotPresent(self):
|
||||
self.assertEqual('', self.comboBox.GetString(self.tree.GetFirstItem()))
|
||||
|
||||
def testGetString_Present(self):
|
||||
self.comboBox.Append('Item 1')
|
||||
self.assertEqual('Item 1',
|
||||
self.comboBox.GetString(self.tree.GetFirstItem()))
|
||||
|
||||
def testGetStringSelection_NotPresent(self):
|
||||
self.assertEqual('', self.comboBox.GetStringSelection())
|
||||
|
||||
def testGetStringSelection_Present(self):
|
||||
self.comboBox.SetValue('Item 1')
|
||||
self.assertEqual('Item 1', self.comboBox.GetStringSelection())
|
||||
|
||||
def testInsertAsFirstItem(self):
|
||||
self.comboBox.Insert('Item 1')
|
||||
self.assertEqual('Item 1',
|
||||
self.comboBox.GetString(self.tree.GetFirstItem()))
|
||||
|
||||
def testInsertAsFirstItemBeforeExistingItem(self):
|
||||
item1 = self.comboBox.Append('Item 1')
|
||||
item2 = self.comboBox.Insert('Item 2')
|
||||
self.assertEqual(item2, self.tree.GetFirstItem())
|
||||
|
||||
def testInsertAsFirstChildBeforeExistingChild(self):
|
||||
parent = self.comboBox.Append('parent')
|
||||
child1 = self.comboBox.Append('child 1', parent)
|
||||
child2 = self.comboBox.Insert('child 2', parent=parent)
|
||||
self.assertEqual(child2, self.tree.GetFirstChild(parent)[0])
|
||||
|
||||
def testSelect(self):
|
||||
item1 = self.comboBox.Append('Item 1')
|
||||
self.comboBox.Select(item1)
|
||||
self.assertEqual('Item 1', self.comboBox.GetValue())
|
||||
|
||||
def testSetString(self):
|
||||
item1 = self.comboBox.Append('Item 1')
|
||||
self.comboBox.SetString(item1, 'Item 2')
|
||||
self.assertEqual('Item 2', self.comboBox.GetString(item1))
|
||||
|
||||
def testSetStringSelection_ExistingString(self):
|
||||
self.comboBox.Append('Hi')
|
||||
self.comboBox.SetStringSelection('Hi')
|
||||
self.assertEqual('Hi', self.comboBox.GetStringSelection())
|
||||
|
||||
def testSetStringSelection_NonExistingString(self):
|
||||
self.comboBox.SetStringSelection('Hi')
|
||||
self.assertEqual('', self.comboBox.GetStringSelection())
|
||||
|
||||
def testAppendWithClientData(self):
|
||||
item1 = self.comboBox.Append('Item 1', clientData=[1,2,3])
|
||||
self.assertEqual([1,2,3], self.comboBox.GetClientData(item1))
|
||||
|
||||
def testInsertWithClientData(self):
|
||||
item1 = self.comboBox.Append('Item 1')
|
||||
item2 = self.comboBox.Insert('Item 2', previous=item1,
|
||||
clientData=[1,2,3])
|
||||
self.assertEqual([1,2,3], self.comboBox.GetClientData(item2))
|
||||
|
||||
def testSetClientData(self):
|
||||
item1 = self.comboBox.Append('Item 1')
|
||||
self.comboBox.SetClientData(item1, [1,2,3])
|
||||
self.assertEqual([1,2,3], self.comboBox.GetClientData(item1))
|
||||
|
||||
def testFindClientData(self):
|
||||
item1 = self.comboBox.Append('Item 1', clientData='A')
|
||||
self.assertEqual(item1, self.comboBox.FindClientData('A'))
|
||||
|
||||
def testFindClientData_NoItems(self):
|
||||
self.failIf(self.comboBox.FindClientData('A'))
|
||||
|
||||
def testFindClientData_NoSuchData(self):
|
||||
item1 = self.comboBox.Append('Item 1', clientData='A')
|
||||
self.failIf(self.comboBox.FindClientData('B'))
|
||||
|
||||
def testSetClientDataSelection(self):
|
||||
item1 = self.comboBox.Append('Item 1', clientData='A')
|
||||
self.comboBox.SetClientDataSelection('A')
|
||||
self.assertEqual(item1, self.comboBox.GetSelection())
|
||||
|
||||
def testSetClientDataSelection_NoSuchData(self):
|
||||
item1 = self.comboBox.Append('Item 1', clientData='A')
|
||||
self.comboBox.SetClientDataSelection('B')
|
||||
self.failIf(self.comboBox.GetSelection())
|
||||
|
||||
|
||||
class SortedComboTreeBoxTest(unittest.TestCase):
|
||||
def setUp(self):
|
||||
frame = wx.Frame(None)
|
||||
self.comboBox = ComboTreeBox(frame, style=wx.CB_SORT, platform=platform)
|
||||
self.tree = self.comboBox._popupFrame.GetTree()
|
||||
|
||||
def testAppend(self):
|
||||
itemB = self.comboBox.Append('B')
|
||||
itemA = self.comboBox.Append('A')
|
||||
self.assertEqual(itemA, self.tree.GetFirstItem())
|
||||
|
||||
def testInsert(self):
|
||||
itemA = self.comboBox.Append('A')
|
||||
itemB = self.comboBox.Insert('B')
|
||||
self.assertEqual(itemA, self.tree.GetFirstItem())
|
||||
|
||||
def testAppend_Child(self):
|
||||
itemA = self.comboBox.Append('A')
|
||||
itemA2 = self.comboBox.Append('2', parent=itemA)
|
||||
itemA1 = self.comboBox.Append('1', parent=itemA)
|
||||
self.assertEqual(itemA1, self.tree.GetFirstChild(itemA)[0])
|
||||
|
||||
def testInsert_Child(self):
|
||||
itemA = self.comboBox.Append('A')
|
||||
itemA1 = self.comboBox.Append('1', parent=itemA)
|
||||
itemA2 = self.comboBox.Insert('2', parent=itemA)
|
||||
self.assertEqual(itemA1, self.tree.GetFirstChild(itemA)[0])
|
||||
|
||||
def testSetString(self):
|
||||
itemB = self.comboBox.Append('B')
|
||||
itemC = self.comboBox.Append('C')
|
||||
self.comboBox.SetString(itemC, 'A')
|
||||
self.assertEqual(itemC, self.tree.GetFirstItem())
|
||||
|
||||
|
||||
class ReadOnlyComboTreeBoxTest(unittest.TestCase):
|
||||
def setUp(self):
|
||||
frame = wx.Frame(None)
|
||||
self.comboBox = ComboTreeBox(frame, style=wx.CB_READONLY)
|
||||
self.tree = self.comboBox._popupFrame.GetTree()
|
||||
|
||||
def testSetValue_ToNonExistingValue(self):
|
||||
self.comboBox.SetValue('Ignored value')
|
||||
self.assertEqual('', self.comboBox.GetValue())
|
||||
|
||||
def testSetValue_ToExistingValue(self):
|
||||
self.comboBox.Append('This works')
|
||||
self.comboBox.SetValue('This works')
|
||||
self.assertEqual('This works', self.comboBox.GetValue())
|
||||
|
||||
|
||||
class IterableTreeCtrlTest(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.frame = wx.Frame(None)
|
||||
self.tree = IterableTreeCtrl(self.frame)
|
||||
self.root = self.tree.AddRoot('root')
|
||||
|
||||
def testPreviousOfRootIsInvalid(self):
|
||||
item = self.tree.GetPreviousItem(self.root)
|
||||
self.failIf(item.IsOk())
|
||||
|
||||
def testPreviousOfChildOfRootIsRoot(self):
|
||||
child = self.tree.AppendItem(self.root, 'child')
|
||||
self.assertEqual(self.root, self.tree.GetPreviousItem(child))
|
||||
|
||||
def testPreviousOfSecondChildOfRootIsFirstChild(self):
|
||||
child1 = self.tree.AppendItem(self.root, 'child1')
|
||||
child2 = self.tree.AppendItem(self.root, 'child2')
|
||||
self.assertEqual(child1, self.tree.GetPreviousItem(child2))
|
||||
|
||||
def testPreviousOfGrandChildIsChild(self):
|
||||
child = self.tree.AppendItem(self.root, 'child')
|
||||
grandchild = self.tree.AppendItem(child, 'grandchild')
|
||||
self.assertEqual(child, self.tree.GetPreviousItem(grandchild))
|
||||
|
||||
def testPreviousOfSecondChildWhenFirstChildHasChildIsThatChild(self):
|
||||
child1 = self.tree.AppendItem(self.root, 'child1')
|
||||
grandchild = self.tree.AppendItem(child1, 'child of child1')
|
||||
child2 = self.tree.AppendItem(self.root, 'child2')
|
||||
self.assertEqual(grandchild, self.tree.GetPreviousItem(child2))
|
||||
|
||||
def testPreviousOfSecondChildWhenFirstChildHasGrandChildIsThatGrandChild(self):
|
||||
child1 = self.tree.AppendItem(self.root, 'child1')
|
||||
grandchild = self.tree.AppendItem(child1, 'child of child1')
|
||||
greatgrandchild = self.tree.AppendItem(grandchild,
|
||||
'grandchild of child1')
|
||||
child2 = self.tree.AppendItem(self.root, 'child2')
|
||||
self.assertEqual(greatgrandchild, self.tree.GetPreviousItem(child2))
|
||||
|
||||
def testNextOfRootIsInvalidWhenRootHasNoChildren(self):
|
||||
item = self.tree.GetNextItem(self.root)
|
||||
self.failIf(item.IsOk())
|
||||
|
||||
def testNextOfRootIsItsChildWhenRootHasOneChild(self):
|
||||
child = self.tree.AppendItem(self.root, 'child')
|
||||
self.assertEqual(child, self.tree.GetNextItem(self.root))
|
||||
|
||||
def testNextOfLastChildIsInvalid(self):
|
||||
child = self.tree.AppendItem(self.root, 'child')
|
||||
self.failIf(self.tree.GetNextItem(child).IsOk())
|
||||
|
||||
def testNextOfFirstChildIsSecondChild(self):
|
||||
child1 = self.tree.AppendItem(self.root, 'child1')
|
||||
child2 = self.tree.AppendItem(self.root, 'child2')
|
||||
self.assertEqual(child2, self.tree.GetNextItem(child1))
|
||||
|
||||
def testNextOfGrandChildIsItsParentsSibling(self):
|
||||
child1 = self.tree.AppendItem(self.root, 'child1')
|
||||
grandchild = self.tree.AppendItem(child1, 'child of child1')
|
||||
child2 = self.tree.AppendItem(self.root, 'child2')
|
||||
self.assertEqual(child2, self.tree.GetNextItem(grandchild))
|
||||
|
||||
def testNextOfGreatGrandChildIsItsParentsSiblingRecursively(self):
|
||||
child1 = self.tree.AppendItem(self.root, 'child1')
|
||||
grandchild = self.tree.AppendItem(child1, 'child of child1')
|
||||
greatgrandchild = self.tree.AppendItem(grandchild,
|
||||
'grandchild of child1')
|
||||
child2 = self.tree.AppendItem(self.root, 'child2')
|
||||
self.assertEqual(child2, self.tree.GetNextItem(greatgrandchild))
|
||||
|
||||
def testNextOfGrandChildWhenItIsLastIsInvalid(self):
|
||||
child = self.tree.AppendItem(self.root, 'child')
|
||||
grandchild = self.tree.AppendItem(child, 'child of child')
|
||||
self.failIf(self.tree.GetNextItem(grandchild).IsOk())
|
||||
|
||||
def testFirstItemIsRoot(self):
|
||||
self.assertEqual(self.root, self.tree.GetFirstItem())
|
||||
|
||||
def testGetFirstItemWithoutRootIsInvalid(self):
|
||||
tree = IterableTreeCtrl(self.frame)
|
||||
self.failIf(tree.GetFirstItem().IsOk())
|
||||
|
||||
def testGetSelection_NoSelection(self):
|
||||
self.tree.Unselect()
|
||||
self.failIf(self.tree.GetSelection().IsOk())
|
||||
|
||||
def testGetSelection_RootItemSelected(self):
|
||||
self.tree.SelectItem(self.tree.GetRootItem())
|
||||
self.assertEqual(self.tree.GetRootItem(), self.tree.GetSelection())
|
||||
|
||||
def testGetSelection_OtherItem(self):
|
||||
child = self.tree.AppendItem(self.root, 'child')
|
||||
self.tree.SelectItem(child)
|
||||
self.assertEqual(child, self.tree.GetSelection())
|
||||
|
||||
|
||||
class IterableTreeCtrlWithHiddenRootTest(unittest.TestCase):
|
||||
def setUp(self):
|
||||
frame = wx.Frame(None)
|
||||
self.tree = IterableTreeCtrl(frame, style=wx.TR_HIDE_ROOT)
|
||||
self.root = self.tree.AddRoot('root')
|
||||
|
||||
def testPreviousOfChildOfRootIsInvalid(self):
|
||||
child = self.tree.AppendItem(self.root, 'child')
|
||||
self.failIf(self.tree.GetPreviousItem(child).IsOk())
|
||||
|
||||
def testNextOfGrandChildWhenItIsLastIsInvalid(self):
|
||||
child = self.tree.AppendItem(self.root, 'child')
|
||||
grandchild = self.tree.AppendItem(child, 'child of child')
|
||||
self.failIf(self.tree.GetNextItem(grandchild).IsOk())
|
||||
|
||||
def testRootIsNotTheFirstItem(self):
|
||||
self.failIf(self.tree.GetFirstItem().IsOk())
|
||||
|
||||
def testFirstChildOfRootIsTheFirstItem(self):
|
||||
child = self.tree.AppendItem(self.root, 'child')
|
||||
self.assertEqual(child, self.tree.GetFirstItem())
|
||||
|
||||
def testGetSelection_NoSelection(self):
|
||||
self.tree.Unselect()
|
||||
self.failIf(self.tree.GetSelection().IsOk())
|
||||
|
||||
def testGetSelection_RootItemSelected(self):
|
||||
# Apparently, selecting a hidden root item crashes wxPython on
|
||||
# Windows, so don't do that.
|
||||
if '__WXMSW__' not in wx.PlatformInfo:
|
||||
self.tree.SelectItem(self.tree.GetRootItem())
|
||||
self.failIf(self.tree.GetSelection().IsOk())
|
||||
|
||||
def testGetSelection_OtherItem(self):
|
||||
child = self.tree.AppendItem(self.root, 'child')
|
||||
self.tree.SelectItem(child)
|
||||
self.assertEqual(child, self.tree.GetSelection())
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
import sys
|
||||
if len(sys.argv) > 1:
|
||||
platform = sys.argv[1].upper()
|
||||
del sys.argv[1]
|
||||
else:
|
||||
platform = None
|
||||
|
||||
app = wx.App(False)
|
||||
unittest.main()
|
||||
|
244
wxPython/tests/test_delayedResult.py
Normal file
244
wxPython/tests/test_delayedResult.py
Normal file
@ -0,0 +1,244 @@
|
||||
|
||||
import wx
|
||||
import delayedresult as dr
|
||||
|
||||
|
||||
def testStruct():
|
||||
ss=dr.Struct(a='a', b='b')
|
||||
assert ss.a == 'a'
|
||||
assert ss.b == 'b'
|
||||
|
||||
|
||||
def testHandler():
|
||||
def handler(b, d, a=None, c=None):
|
||||
assert a=='a'
|
||||
assert b=='b'
|
||||
assert c=='c'
|
||||
assert d==1
|
||||
hh=dr.Handler(handler, 1, a='a')
|
||||
hh('b', c='c')
|
||||
|
||||
def handler2(*args, **kwargs):
|
||||
assert args[0] == 3
|
||||
assert args[1] == 1
|
||||
assert kwargs['a'] == 'a'
|
||||
assert kwargs['b'] == 'b'
|
||||
hh2 = dr.Handler(handler2, 1, a='a')
|
||||
args = ()
|
||||
hh3 = dr.Handler(hh2, b='b', *args)
|
||||
hh3(3)
|
||||
|
||||
|
||||
def testSender():
|
||||
triplet = (1,'a',2.34)
|
||||
b = dr.Struct(called=False, which=1)
|
||||
assert not b.called
|
||||
def consumer(result, a, b=None):
|
||||
assert result.get() == 789 + b.which
|
||||
assert result.getJobID() == 456
|
||||
assert a == 'a'
|
||||
b.called = True
|
||||
handler = dr.Handler(consumer, 'a', **dict(b=b))
|
||||
ss = dr.SenderNoWx( handler, jobID=456 )
|
||||
ss.sendResult(789+1)
|
||||
assert b.called
|
||||
|
||||
|
||||
def testSendExcept():
|
||||
def consumer(result):
|
||||
try:
|
||||
result.get()
|
||||
raise RuntimeError('should have raised!')
|
||||
except AssertionError:
|
||||
pass
|
||||
ss = dr.SenderNoWx( dr.Handler(consumer) )
|
||||
ss.sendException( AssertionError('test') )
|
||||
|
||||
|
||||
def testThread():
|
||||
expect = dr.Struct(value=1)
|
||||
def consumer(result):
|
||||
assert result.getJobID() is None
|
||||
assert result.get() == expect.value
|
||||
expect.value += 2
|
||||
ss = dr.SenderNoWx( dr.Handler(consumer) )
|
||||
import time
|
||||
def worker(sender=None):
|
||||
sender.sendResult(1)
|
||||
time.sleep(0.1)
|
||||
sender.sendResult(3)
|
||||
time.sleep(0.1)
|
||||
sender.sendResult(5)
|
||||
time.sleep(0.1)
|
||||
return 7
|
||||
tt = dr.Producer(ss, worker, senderArg='sender')
|
||||
tt.start()
|
||||
while expect.value < 7:
|
||||
time.sleep(0.1)
|
||||
print '.'
|
||||
|
||||
|
||||
def testStartWorker():
|
||||
print 'Doing worker thread with call-after'
|
||||
import time
|
||||
def handleButtonClick():
|
||||
produce = [123, 456, 789, 012, 345, 678, 901]
|
||||
expect = dr.Struct(idx=0)
|
||||
def worker(a, b=None, sender=None):
|
||||
assert a == 2
|
||||
assert b == 'b'
|
||||
for val in produce:
|
||||
time.sleep(0.5)
|
||||
sender.sendResult(val)
|
||||
def consumer(result, b, a=None):
|
||||
assert b == 1
|
||||
assert a=='a'
|
||||
result = result.get()
|
||||
print 'got result', result
|
||||
if expect.idx < len(produce):
|
||||
assert result == produce[ expect.idx ]#, 'Expected %s, got %s' % (
|
||||
else:
|
||||
assert result is None
|
||||
app.ExitMainLoop()
|
||||
expect.idx += 1
|
||||
|
||||
dr.startWorker(consumer, worker, cargs=(1,), ckwargs={'a':'a'},
|
||||
wargs=(2,), wkwargs={'b':'b'}, senderArg='sender')
|
||||
|
||||
app = wx.PySimpleApp()
|
||||
frame = wx.Frame(None) # need this otherwise MainLoop() returns immediately
|
||||
# pretend user has clicked:
|
||||
import thread
|
||||
thread.start_new_thread( wx.CallAfter, (handleButtonClick,))
|
||||
app.MainLoop()
|
||||
|
||||
|
||||
def testStartWorkerEvent():
|
||||
print 'Doing same with events'
|
||||
import time
|
||||
produce = [123, 456, 789, 012, 345, 678, 901]
|
||||
expect = dr.Struct(idx=0)
|
||||
def worker(a, b=None, sender=None):
|
||||
assert a == 2
|
||||
assert b == 'b'
|
||||
for val in produce:
|
||||
time.sleep(0.5)
|
||||
sender.sendResult(val)
|
||||
def consumer(event):
|
||||
assert event.a=='a'
|
||||
result = event.result.get()
|
||||
print 'got result', result
|
||||
if expect.idx < len(produce):
|
||||
assert result == produce[ expect.idx ]#, 'Expected %s, got %s' % (
|
||||
else:
|
||||
assert result is None
|
||||
app.ExitMainLoop()
|
||||
expect.idx += 1
|
||||
def handleButtonClick():
|
||||
dr.startWorker(frame, worker,
|
||||
cargs=(eventClass,), ckwargs={'a':'a','resultAttr':'result'},
|
||||
wargs=(2,), wkwargs={'b':'b'}, senderArg='sender')
|
||||
|
||||
app = wx.PySimpleApp()
|
||||
frame = wx.Frame(None) # need this otherwise MainLoop() returns immediately
|
||||
from wx.lib.newevent import NewEvent as wxNewEvent
|
||||
eventClass, eventBinder = wxNewEvent()
|
||||
frame.Bind(eventBinder, consumer)
|
||||
# pretend user has clicked:
|
||||
import thread
|
||||
thread.start_new_thread( wx.CallAfter, (handleButtonClick,))
|
||||
app.MainLoop()
|
||||
|
||||
|
||||
def testAbort():
|
||||
import threading
|
||||
abort = dr.AbortEvent()
|
||||
|
||||
# create a wx app and a function that will cause
|
||||
# app to close when abort occurs
|
||||
app = wx.PySimpleApp()
|
||||
frame = wx.Frame(None) # need this otherwise MainLoop() returns immediately
|
||||
def exiter():
|
||||
abort.wait()
|
||||
# make sure any events have time to be processed before exit
|
||||
wx.FutureCall(2000, app.ExitMainLoop)
|
||||
threading.Thread(target=exiter).start()
|
||||
|
||||
# now do the delayed result computation:
|
||||
def worker():
|
||||
count = 0
|
||||
while not abort(1):
|
||||
print 'Result computation not done, not aborted'
|
||||
return 'Result computed'
|
||||
def consumer(dr): # never gets called but as example
|
||||
print 'Got dr=', dr.get()
|
||||
app.ExitMainLoop()
|
||||
dr.startWorker(consumer, worker)
|
||||
|
||||
# pretend user doing other stuff
|
||||
import time
|
||||
time.sleep(5)
|
||||
# pretend user aborts now:
|
||||
print 'Setting abort event'
|
||||
abort.set()
|
||||
app.MainLoop()
|
||||
|
||||
|
||||
def testPreProcChain():
|
||||
# test when no chain
|
||||
def handler(dr):
|
||||
assert dr.getJobID() == 123
|
||||
assert dr.get() == 321
|
||||
pp=dr.PreProcessChain( handler )
|
||||
pp( dr.DelayedResult(321, jobID=123) )
|
||||
|
||||
# test with chaining
|
||||
def handlerPP(chainTrav, n, a=None):
|
||||
print 'In handlerPP'
|
||||
assert n==1
|
||||
assert a=='a'
|
||||
assert chainTrav.getJobID() == 321
|
||||
res = chainTrav.get()
|
||||
assert res == 135
|
||||
print 'Done handlerPP'
|
||||
|
||||
def subStart1(handler):
|
||||
pp=dr.PreProcessChain(handler)
|
||||
pp.addSub(subEnd1, 1, b='b')
|
||||
subStart2(pp.clone())
|
||||
def subEnd1(chainTrav, aa, b=None):
|
||||
print 'In subEnd1'
|
||||
assert aa==1
|
||||
assert b=='b'
|
||||
assert chainTrav.getJobID() == 321
|
||||
res = chainTrav.get()
|
||||
assert res == 246, 'res=%s' % res
|
||||
print 'Returning from subEnd1'
|
||||
return res - 111
|
||||
|
||||
def subStart2(preProc):
|
||||
preProc.addSub(subEnd2, 3, c='c')
|
||||
ss = dr.SenderNoWx(preProc, jobID=321)
|
||||
ss.sendResult(123)
|
||||
def subEnd2(chainTrav, a, c=None):
|
||||
print 'In subEnd2'
|
||||
assert a==3
|
||||
assert c=='c'
|
||||
assert chainTrav.getJobID() == 321
|
||||
res = chainTrav.get()
|
||||
assert res == 123
|
||||
print 'Returning from subEnd2'
|
||||
return 123*2
|
||||
|
||||
subStart1( dr.Handler(handlerPP, 1, a='a') )
|
||||
|
||||
testStruct()
|
||||
testHandler()
|
||||
testSender()
|
||||
testSendExcept()
|
||||
testThread()
|
||||
testStartWorker()
|
||||
testStartWorkerEvent()
|
||||
testAbort()
|
||||
testPreProcChain()
|
||||
|
35
wxPython/tests/test_drawrect.py
Normal file
35
wxPython/tests/test_drawrect.py
Normal file
@ -0,0 +1,35 @@
|
||||
import wx
|
||||
|
||||
##import os; print os.getpid(); raw_input("press enter...")
|
||||
|
||||
|
||||
class TestPanel(wx.Panel):
|
||||
def __init__(self, parent):
|
||||
wx.Panel.__init__(self, parent)
|
||||
self.Bind(wx.EVT_PAINT, self.OnPaint)
|
||||
|
||||
def OnPaint(self, evt):
|
||||
dc = wx.GCDC(wx.PaintDC(self))
|
||||
#dc = wx.PaintDC(self)
|
||||
r = wx.Rect(64, 25, 45, 18)
|
||||
dc.SetPen(wx.Pen("black", 1))
|
||||
dc.SetBrush(wx.Brush("red"))
|
||||
dc.DrawRectangleRect(r)
|
||||
|
||||
dc.SetPen(wx.TRANSPARENT_PEN)
|
||||
#dc.SetPen(wx.Pen("light blue", 1))
|
||||
dc.SetBrush(wx.Brush("light blue"))
|
||||
dc.DrawRectangle(r.x+1, r.y+1, r.width-2, r.height-2)
|
||||
|
||||
dc.SetPen(wx.Pen("black", 1))
|
||||
dc.DrawLine(r.x+r.width+02, r.y,
|
||||
r.x+r.width+15, r.y)
|
||||
dc.DrawLine(r.x+r.width+02, r.y+r.height-1,
|
||||
r.x+r.width+15, r.y+r.height-1)
|
||||
|
||||
|
||||
app = wx.App(False)
|
||||
frm = wx.Frame(None)
|
||||
pnl = TestPanel(frm)
|
||||
frm.Show()
|
||||
app.MainLoop()
|
81
wxPython/tests/test_evtHandler.py
Normal file
81
wxPython/tests/test_evtHandler.py
Normal file
@ -0,0 +1,81 @@
|
||||
|
||||
import wx
|
||||
|
||||
|
||||
# This class is just an experiment to see how easy it would be to
|
||||
# handle simulating transfer of ownership of object to a 'parent'
|
||||
# object, and then automatically calling Destroy on those when the
|
||||
# parent is destroyed. Conclusion: It's not too hard at all. Now,
|
||||
# what should I do with it...
|
||||
class DestroyWrapper(object):
|
||||
def __init__(self):
|
||||
import weakref
|
||||
self.items = weakref.WeakValueDictionary()
|
||||
|
||||
def AddItem(self, obj):
|
||||
self.items[len(self.items)+1] = obj
|
||||
|
||||
def __del__(self):
|
||||
for item in self.items.values():
|
||||
item.Destroy()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class MyEvtHandler(wx.EvtHandler):
|
||||
instCount = 0
|
||||
|
||||
def __init__(self):
|
||||
wx.EvtHandler.__init__(self)
|
||||
MyEvtHandler.instCount += 1
|
||||
self.cnt = MyEvtHandler.instCount
|
||||
self.Bind(wx.EVT_CHECKBOX, self.OnCheckBox)
|
||||
|
||||
def __del__(self):
|
||||
print "%02d: deleted" % self.cnt
|
||||
|
||||
def OnCheckBox(self, evt):
|
||||
print "%02d: %s" % (self.cnt, evt.IsChecked())
|
||||
evt.Skip()
|
||||
|
||||
|
||||
|
||||
class MyFrame(wx.Frame):
|
||||
def __init__(self):
|
||||
wx.Frame.__init__(self, None, title="wx.EvtHandler Test")
|
||||
p = wx.Panel(self)
|
||||
|
||||
pushBtn = wx.Button(p, -1, "Push EvtHandler", (20,20))
|
||||
popBtn = wx.Button(p, -1, "Pop EvtHandler", (20,60))
|
||||
|
||||
checkBox = wx.CheckBox(p, -1, "Test EvtHandler", (200, 25))
|
||||
|
||||
self.Bind(wx.EVT_BUTTON, self.OnPushBtn, pushBtn)
|
||||
self.Bind(wx.EVT_BUTTON, self.OnPopBtn, popBtn)
|
||||
|
||||
## self.dw = DestroyWrapper()
|
||||
|
||||
|
||||
def OnPushBtn(self, evt):
|
||||
eh = MyEvtHandler()
|
||||
self.PushEventHandler(eh)
|
||||
## self.dw.AddItem(eh)
|
||||
print "%02d: pushed" % eh.cnt
|
||||
|
||||
|
||||
def OnPopBtn(self, evt):
|
||||
eh = self.GetEventHandler()
|
||||
if eh.this == self.this:
|
||||
print "All already popped!"
|
||||
else:
|
||||
eh = self.PopEventHandler()
|
||||
print "%02d: popped( %s )" % (eh.cnt, eh.__class__)
|
||||
eh.Destroy()
|
||||
|
||||
|
||||
|
||||
app = wx.App(False)
|
||||
frm = MyFrame()
|
||||
frm.Show()
|
||||
app.MainLoop()
|
101
wxPython/tests/test_gc.py
Normal file
101
wxPython/tests/test_gc.py
Normal file
@ -0,0 +1,101 @@
|
||||
import wx
|
||||
|
||||
class TestPanel(wx.Panel):
|
||||
def __init__(self, *args, **kw):
|
||||
wx.Panel.__init__(self, *args, **kw)
|
||||
self.Bind(wx.EVT_PAINT, self.OnPaint)
|
||||
|
||||
def OnPaint(self, evt):
|
||||
gc = wx.GraphicsContext.Create(wx.PaintDC(self))
|
||||
|
||||
pen = wx.Pen("navy", 2)
|
||||
gc.SetPen(pen)
|
||||
brush = wx.Brush((255,32,32,128))
|
||||
gc.SetBrush(brush)
|
||||
gc.PushState()
|
||||
|
||||
path = gc.CreatePath()
|
||||
path.MoveToPoint(50, 50)
|
||||
path.AddLineToPoint(25,25)
|
||||
path.AddLineToPoint(50,25)
|
||||
path.AddLineToPoint(50,50)
|
||||
path.CloseSubpath()
|
||||
|
||||
gc.DrawPath(path)
|
||||
|
||||
gc.Scale(2,2)
|
||||
gc.Translate(10,5)
|
||||
gc.DrawPath(path)
|
||||
|
||||
gc.Translate(50,0)
|
||||
gc.FillPath(path)
|
||||
gc.Translate(0,5)
|
||||
gc.StrokePath(path)
|
||||
gc.Translate(0,5)
|
||||
|
||||
brush = wx.Brush((32,32,255,128))
|
||||
gc.SetBrush(brush)
|
||||
|
||||
gc.FillPath(path)
|
||||
gc.Translate(50,0)
|
||||
gc.DrawPath(path)
|
||||
|
||||
gc.PopState()
|
||||
|
||||
points = [ (5.2, 5.9),
|
||||
(50, 50),
|
||||
(35, 50),
|
||||
(25,40),
|
||||
wx.Point2D(20.5,50.9),
|
||||
wx.Point2D(5,25),
|
||||
(5,6)
|
||||
]
|
||||
|
||||
gc.Translate(0, 150)
|
||||
gc.DrawLines(points)
|
||||
gc.Translate(75, 0)
|
||||
gc.StrokeLines(points)
|
||||
|
||||
|
||||
begin = [ (0,0),
|
||||
(0,10),
|
||||
(0,20),
|
||||
(0,30),
|
||||
(0,40),
|
||||
(0,50),
|
||||
]
|
||||
|
||||
end = [ (50,0),
|
||||
(50,10),
|
||||
(50,20),
|
||||
(50,30),
|
||||
(50,40),
|
||||
(50,50),
|
||||
]
|
||||
|
||||
# in a floating point coordinate system the center of the
|
||||
# pixel is actually at x+0.5, y+0.5, so with anti-aliasing
|
||||
# turned on we'll get a crisper line by positioning our line
|
||||
# segments at the 0.5 offset. For this test we'll just let
|
||||
# the GC do the translation for us.
|
||||
gc.Translate(0.5, 0.5)
|
||||
|
||||
pen = wx.Pen("purple", 1)
|
||||
gc.SetPen(pen)
|
||||
|
||||
gc.Translate(75, 0)
|
||||
gc.StrokeLineSegements(begin, end)
|
||||
|
||||
gc.Translate(75, 0)
|
||||
gc.Scale(2,2)
|
||||
gc.StrokeLineSegements(begin, end)
|
||||
gc.DrawLines(points)
|
||||
|
||||
del path
|
||||
|
||||
|
||||
app = wx.App(False)
|
||||
frm = wx.Frame(None)
|
||||
pnl = TestPanel(frm)
|
||||
frm.Show()
|
||||
app.MainLoop()
|
30
wxPython/tests/test_idle.py
Normal file
30
wxPython/tests/test_idle.py
Normal file
@ -0,0 +1,30 @@
|
||||
|
||||
import wx
|
||||
|
||||
class TestPanel(wx.Panel):
|
||||
def __init__(self, parent):
|
||||
wx.Panel.__init__(self, parent)
|
||||
self.gauge = wx.Gauge(self, range=100, pos=(20,20), size=(100,-1))
|
||||
self.Bind(wx.EVT_IDLE, self.OnIdle)
|
||||
self.count = 1
|
||||
self.skipNext = False
|
||||
|
||||
def OnIdle(self, evt):
|
||||
if self.skipNext:
|
||||
self.skipNext = False
|
||||
return
|
||||
self.skipNext = True
|
||||
|
||||
print "OnIdle:", self.count
|
||||
#self.gauge.SetValue(self.count)
|
||||
self.count += 1
|
||||
if self.count >= 100:
|
||||
self.count = 1
|
||||
|
||||
|
||||
|
||||
app = wx.App(False)
|
||||
frm = wx.Frame(None)
|
||||
pnl = TestPanel(frm)
|
||||
frm.Show()
|
||||
app.MainLoop()
|
130
wxPython/tests/test_renderHeaderButton.py
Normal file
130
wxPython/tests/test_renderHeaderButton.py
Normal file
@ -0,0 +1,130 @@
|
||||
|
||||
import wx
|
||||
import cStringIO
|
||||
|
||||
#import os; print os.getpid(); raw_input("Press enter...")
|
||||
|
||||
|
||||
class Panel(wx.Panel):
|
||||
def __init__(self, parent):
|
||||
wx.Panel.__init__(self, parent)
|
||||
self.Bind(wx.EVT_PAINT, self.OnPaint)
|
||||
|
||||
def OnPaint(self, evt):
|
||||
dc = wx.PaintDC(self)
|
||||
dc.SetFont(self.GetFont())
|
||||
r = wx.RendererNative.Get()
|
||||
rect = wx.Rect(40,10, 95,r.GetHeaderButtonHeight(self))
|
||||
#print rect
|
||||
|
||||
# simple helper to make calling DrawHeaderButton so many times a
|
||||
# bit easier and less messy
|
||||
def dhb(idx, rect, flags=0, sort=0, params=None):
|
||||
dc.DrawText("%02d." % idx, rect.x-25, rect.y)
|
||||
r.DrawHeaderButton(self, dc, rect, flags, sort, params)
|
||||
rect.y += 30
|
||||
|
||||
dhb(1, rect)
|
||||
dhb(2, rect, wx.CONTROL_SELECTED)
|
||||
dhb(3, rect, wx.CONTROL_CURRENT)
|
||||
dhb(4, rect, wx.CONTROL_SELECTED|wx.CONTROL_CURRENT)
|
||||
dhb(5, rect, 0, wx.HDR_SORT_ICON_UP)
|
||||
dhb(6, rect, 0, wx.HDR_SORT_ICON_DOWN)
|
||||
dhb(7, rect, wx.CONTROL_SELECTED, wx.HDR_SORT_ICON_UP)
|
||||
dhb(8, rect, wx.CONTROL_SELECTED, wx.HDR_SORT_ICON_DOWN)
|
||||
|
||||
rect.x = 180
|
||||
rect.y = 10
|
||||
hp = wx.HeaderButtonParams()
|
||||
hp.m_labelText = "Hello"
|
||||
dhb(9, rect, params=hp)
|
||||
hp.m_labelAlignment = wx.ALIGN_CENTER
|
||||
dhb(10, rect, params=hp)
|
||||
hp.m_labelAlignment = wx.ALIGN_RIGHT
|
||||
dhb(11, rect, params=hp)
|
||||
hp.m_labelAlignment = wx.ALIGN_CENTER
|
||||
dhb(12, rect, wx.CONTROL_SELECTED, 0, hp)
|
||||
dhb(13, rect, wx.CONTROL_SELECTED, wx.HDR_SORT_ICON_UP, hp)
|
||||
hp.m_labelText = "This label is too long"
|
||||
dhb(14, rect, params=hp)
|
||||
dhb(15, rect, wx.CONTROL_SELECTED, 0, hp)
|
||||
dhb(16, rect, wx.CONTROL_SELECTED, wx.HDR_SORT_ICON_UP, hp)
|
||||
|
||||
rect.x = 320
|
||||
rect.y = 10
|
||||
hp = wx.HeaderButtonParams()
|
||||
hp.m_labelBitmap = getBitmap()
|
||||
dhb(17, rect, params=hp)
|
||||
hp.m_labelAlignment = wx.ALIGN_CENTER
|
||||
dhb(18, rect, params=hp)
|
||||
hp.m_labelAlignment = wx.ALIGN_RIGHT
|
||||
dhb(19, rect, params=hp)
|
||||
hp.m_labelAlignment = wx.ALIGN_CENTER
|
||||
dhb(20, rect, wx.CONTROL_SELECTED, 0, hp)
|
||||
dhb(21, rect, wx.CONTROL_SELECTED, wx.HDR_SORT_ICON_UP, hp)
|
||||
|
||||
|
||||
hp.m_labelText = "label"
|
||||
hp.m_labelAlignment = wx.ALIGN_LEFT
|
||||
dhb(22, rect, 0, 0, hp)
|
||||
hp.m_labelAlignment = wx.ALIGN_CENTER
|
||||
dhb(23, rect, 0, 0, hp)
|
||||
hp.m_labelAlignment = wx.ALIGN_RIGHT
|
||||
dhb(24, rect, 0, 0, hp)
|
||||
|
||||
rect.x = 460
|
||||
rect.y = 10
|
||||
hp.m_labelAlignment = wx.ALIGN_LEFT
|
||||
dhb(25, rect, wx.CONTROL_SELECTED, wx.HDR_SORT_ICON_UP, hp)
|
||||
hp.m_labelAlignment = wx.ALIGN_CENTER
|
||||
dhb(26, rect, wx.CONTROL_SELECTED, wx.HDR_SORT_ICON_UP, hp)
|
||||
hp.m_labelAlignment = wx.ALIGN_RIGHT
|
||||
dhb(27, rect, wx.CONTROL_SELECTED, wx.HDR_SORT_ICON_UP, hp)
|
||||
|
||||
hp.m_labelText = "longer label"
|
||||
hp.m_labelAlignment = wx.ALIGN_LEFT
|
||||
dhb(28, rect, wx.CONTROL_SELECTED, wx.HDR_SORT_ICON_UP, hp)
|
||||
hp.m_labelAlignment = wx.ALIGN_CENTER
|
||||
dhb(29, rect, wx.CONTROL_SELECTED, wx.HDR_SORT_ICON_UP, hp)
|
||||
hp.m_labelAlignment = wx.ALIGN_RIGHT
|
||||
dhb(30, rect, wx.CONTROL_SELECTED, wx.HDR_SORT_ICON_UP, hp)
|
||||
|
||||
|
||||
def getData():
|
||||
return \
|
||||
'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
|
||||
\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
|
||||
\x00\x01\xceIDAT8\x8d\x95\x93=h\x14A\x14\xc7\x7f\xfbq\xc7m\xce\x0b\xe4\xa2F/\
|
||||
~\x04\x9b\x03O\x0bE\x10\x04\x91\x10\x88X\xa4J\xe7&\x8a\x10A\xc4Bb\xe9uje\xc0\
|
||||
\xd2\xd2\xca\x94V\xa9\xa3X\x88i\x14\x0b\x91\x14\xae$dO\x8d\x97#\xf1<n/;\xb3k\
|
||||
!;\xd9\xbd\xdd\x14\xfea\x9a7\xef\xff{\x8f7\xf34M7\x88+\x90"d\x1f\xe9\x86\xa9\
|
||||
\xf5\xc7\xcc~\xf3\x8d\x87W\xb9pbR\xc5\xb6\xfc5\x00\xbe}_%\x90"\xec\x87\x98q\
|
||||
\xf3\xfc\xc2,\xf7\xef=\x00\xa0\xc36\x8d\xf0\x03#\x0c\x00p\x9asL?:\x9b\x82\
|
||||
\x98q\xf3\x8c=\xcbr\xf3E\xa2E\xcf\xf7\x01\x90\x81`|\xae\x96\x82\xe8\x81\x14\
|
||||
\xe1\xf4\x9d\te\xf6|_\x9dN\xaf\x8b\x0c\x04\x83\xc6a\xa6F\xef\xe2\xfd\xb0\x18\
|
||||
\x9f\xabq\xf1\xfa\xa8\x9a\x95\x1eUjt\xbf&*\xcb@\x000\x94\xab`W\xeb\x9c?:I^\
|
||||
\xb7\x0084r0{\x88Q\xbb\x91\x8a\xc6\x10v\xb5\xcep\xa1\xc2\xe7\xd6;~\xcbM\xacP\
|
||||
&r\x12\x80\x82V\xe2\xda\xc9\xdb\x1c\x19\x18\xe3\xe5\xeac&\x8e\xcf0\\\xa8\xb0\
|
||||
\xe4<gy\xfd\x159\xd3\xc0\xc2\xe2\xd7\xcf\xa6\xf2\xe8q@^\xb7h\xf56(\xe5\xca\
|
||||
\xd8\xd5:\xb5\xf2%e\xdeO\x89\x0e\xdc\xb6\x83\xdbv\xf8\xb8\xf9\x06\xbbZO\x99}\
|
||||
!\x91\xa1\xc8\x06\xec\xc85\xda\x9d.\xa5\xa2\x85\xdbvx\xf2\xfef"\xd1\xeb\xed\
|
||||
\x02`h\x07\x92\x00\xdd0\xb5@\x8ap\xea\xd6e\xae\xcc\x1f\xa3\xb1\xd5T\xc9\xfd\
|
||||
\x1a;3\xc8\xeb\xa7\x0e+\x8b\xae\xfa\xd6&\xfc\xfb\xe3qHP\xfeCgg\xefEtS\xc3*\
|
||||
\x9a\xbc]Xg\xe9\xd9\'v\xa5\xa7\xee\xb4\xf82E\x90\xfc\xa9\xedT\xf5\x8d/-V\x16\
|
||||
]\xa2\x82\x99\x80\x08\x92\xd9?\xd9\xdb\x98\x02\xfc\xaf\xfe\x02\xb1S\xd1)\xa5\
|
||||
\x1a\xc2\x99\x00\x00\x00\x00IEND\xaeB`\x82'
|
||||
|
||||
def getBitmap():
|
||||
return wx.BitmapFromImage(getImage())
|
||||
|
||||
def getImage():
|
||||
stream = cStringIO.StringIO(getData())
|
||||
return wx.ImageFromStream(stream)
|
||||
|
||||
|
||||
app = wx.App(False)
|
||||
frm = wx.Frame(None, title="DrawHeaderButton Test", size=(580,300))
|
||||
pnl = Panel(frm)
|
||||
frm.Show()
|
||||
app.MainLoop()
|
||||
|
Loading…
Reference in New Issue
Block a user