#!/usr/bin/env python # -*- coding: utf-8 -*- # pyinstaller -F -w -i favicon.ico curFile.py # pyinstaller --distpath . -F -w -i favicon.ico curFile.py import os import time import traceback import sys if 2 == sys.version_info.major: reload(sys) sys.setdefaultencoding('utf-8') import wx import wx.grid import wx.lib.scrolledpanel as scrolled global runPath global curPath global curFile runPath = None curPath = None curFile = None class Example(wx.Frame): def __init__(self, parent, title): scn_w, scn_h = wx.DisplaySize() pos_x, pos_y = 100, 50 cur_w, cur_h = scn_w - pos_x * 2, scn_h - pos_y * 2 cen_x, cen_y = scn_w / 2, scn_h / 2 super(Example, self).__init__(parent, title=title, pos=(pos_x, pos_y), size=(cur_w, cur_h)) self.SetMaxSize((scn_w, scn_h)) self.SetMinSize((cen_x, cen_y)) self.InitUI() self.Centre() # self.SetAutoLayout(True) # self.Layout() self.Show() self.Hide() print(self.IsShown()) self.Show() print(self.IsShown()) def InitUI(self): self.splitterLeft = wx.SplitterWindow(self, style=wx.SP_3D) self.splitterRigt = wx.SplitterWindow(self.splitterLeft, style=wx.SP_3D) # self.baseDevice = wx.Panel(self.splitterLeft, -1) self.baseDevice = wx.Window(self.splitterLeft, -1) # self.drawDevice = wx.Panel(self.splitterRigt, -1) self.drawDevice = wx.Window(self.splitterRigt, -1) self.showDevice = wx.grid.Grid(self.splitterRigt, -1) self.splitterLeft.SplitVertically(self.baseDevice, self.splitterRigt, 300) self.splitterRigt.SplitHorizontally(self.drawDevice, self.showDevice, 100) self.baseDevice.SetBackgroundColour("MEDIUM GREY") self.drawDevice.SetBackgroundColour("GRAY") self.showDevice.SetBackgroundColour("LIGHT GREY") self.basePanel = self.baseDevice # self.basePanel.SetBackgroundColour('#4f5049') self.baseSizer = wx.BoxSizer(wx.VERTICAL) self.devPanel = wx.Panel(self.basePanel) self.devPanel.SetBackgroundColour('DIM GREY') self.devSizer = wx.BoxSizer(wx.VERTICAL) self.devPanel.SetSizer(self.devSizer) self.grpPanel = scrolled.ScrolledPanel(self.basePanel) self.grpPanel.SetBackgroundColour('WHITE') self.grpSizer = wx.BoxSizer(wx.VERTICAL) self.grpPanel.SetSizer(self.grpSizer) self.grpPanel.SetupScrolling() self.baseSizer.Add(self.devPanel, wx.ID_ANY, wx.EXPAND | wx.ALL, 5) self.baseSizer.Add(self.grpPanel, wx.ID_ANY, wx.EXPAND | wx.ALL, 5) self.basePanel.SetSizer(self.baseSizer) for i in range(16): new_ctrl = wx.TextCtrl(self.devPanel, value='TextCtrl') self.devSizer.Add(new_ctrl) new_bton = wx.Button(self.grpPanel, label='Button') self.grpSizer.Add(new_bton) new_text = wx.StaticText(self.grpPanel, label='StaticText') self.grpSizer.Add(new_text) hbox5 = wx.BoxSizer(wx.HORIZONTAL) self.ctrl = wx.TextCtrl(self.devPanel, value='TextCtrl', size=(100, 30)) self.btnPop = wx.Button(self.devPanel, label='Popup', size=(70, 30)) self.btnOK = wx.Button(self.devPanel, label='Ok', size=(70, 30)) self.btnNG = wx.Button(self.devPanel, label='Close', size=(70, 30)) self.Bind(wx.EVT_BUTTON, self.OnPopup, self.btnPop) self.Bind(wx.EVT_BUTTON, self.OnTouchOk, self.btnOK) self.Bind(wx.EVT_BUTTON, self.OnTouchClose, self.btnNG) hbox5.Add(self.ctrl, wx.EXPAND, 20) hbox5.Add(self.btnPop, wx.EXPAND, 20) hbox5.Add(self.btnOK, wx.EXPAND, 20) hbox5.Add(self.btnNG, flag=wx.LEFT | wx.BOTTOM, border=5) self.devSizer.Add(hbox5, flag=wx.ALIGN_RIGHT | wx.RIGHT, border=5) self.drawDevice.Bind(wx.EVT_PAINT, self.OnPaint) self.showDevice.CreateGrid(32, 64) self.showDevice.SetRowSize(0, 60) self.showDevice.SetColSize(0, 120) def OnPopup(self, event): self.ctrl.SetLabel(u'Popup') scn_w, scn_h = wx.DisplaySize() win_w, win_h = 800, 600 pos_x, pos_y = (scn_w - win_w)/2, (scn_h - win_h)/2 dialog = wx.Dialog(self, -1, 'Dialog Subclass', pos=(pos_x, pos_y), size=(win_w, win_h)) okButton = wx.Button(dialog, wx.ID_OK, "OK", pos=(300, 400)) okButton.SetDefault() cancelButton = wx.Button(dialog, wx.ID_CANCEL, "Cancel", pos=(400, 400)) result = dialog.ShowModal() if result == wx.ID_OK: print "OK" else: print "Cancel" dialog.Destroy() def OnTouchOk(self, event): self.ctrl.SetLabel(u'↓') self.baseSizer.Show(self.grpPanel) def OnTouchClose(self, event): self.ctrl.SetLabel(u'↑') self.baseSizer.Hide(self.grpPanel) def OnPaint(self, event): print('OnPaint') self.dc = wx.PaintDC(self.drawDevice) self.dc.SetPen(wx.Pen('#4c4c4c', 1, wx.SOLID)) self.dc.DrawRectangle(10, 15, 90, 60) self.dc.SetPen(wx.Pen('#4c4c4c', 1, wx.DOT)) self.dc.DrawRectangle(120, 15, 90, 60) self.dc.SetPen(wx.Pen('#4c4c4c', 1, wx.LONG_DASH)) self.dc.DrawRectangle(240, 15, 90, 60) self.dc.SetPen(wx.Pen('#4c4c4c', 1, wx.SHORT_DASH)) self.dc.DrawRectangle(360, 15, 90, 60) self.dc.SetPen(wx.Pen('#4c4c4c', 1, wx.DOT_DASH)) self.dc.DrawRectangle(480, 15, 90, 60) self.dc.SetPen(wx.Pen('#4c4c4c', 1, wx.TRANSPARENT)) self.dc.DrawRectangle(600, 15, 90, 60) def main(argv): global runPath global curPath global curFile try: logTime = time.strftime('%Y-%m-%d_%H-%M-%S ', time.localtime(time.time())) print(logTime + "main call") runPath = os.getcwd().decode('GB18030', 'ignore') # GB2312 => GBK => GB18030 curPath = os.path.dirname(os.path.abspath(__file__).decode('GB18030', 'ignore')) curFile = os.path.basename(os.path.abspath(__file__).decode('GB18030', 'ignore')) (curName, curExtn) = os.path.splitext(curFile) app = wx.App() ex = Example(None, title='Example') ex.Show() app.MainLoop() logTime = time.strftime('%Y-%m-%d_%H-%M-%S ', time.localtime(time.time())) print(logTime + "main exit") return True except: print(traceback.format_exc()) print(traceback.print_exc()) logtime = time.strftime('%Y-%m-%d_%H-%M-%S ', time.localtime(time.time())) print(logtime + "main fail") sys.stdout.flush() return False if __name__ == '__main__': retCode = main(sys.argv) exit(not retCode)
#########################################################################################
#!/usr/bin/env python # -*- coding: utf-8 -*- # pyinstaller -F -w -i favicon.ico curFile.py # pyinstaller --distpath . -F -w -i favicon.ico curFile.py import os import time import traceback import sys if 2 == sys.version_info.major: reload(sys) sys.setdefaultencoding('utf-8') import wx import wx.grid import wx.lib.scrolledpanel as scrolled global runPath global curPath global curFile runPath = None curPath = None curFile = None class SideFrame(scrolled.ScrolledPanel): def __init__(self, parent, title): super(self.__class__, self).__init__(parent, -1) self.SetAutoLayout(1) self.SetupScrolling() self.InitUI() def InitUI(self): # self.sideSizer = wx.BoxSizer(wx.VERTICAL) # self.SetSizer(self.sideSizer) # for i in range(64): # button = wx.Button(self, -1, label="Add Widget") # self.sideSizer.Add(button) # sb = wx.StaticBox(self, label="Optional Attributes") # self.sideSizer = wx.StaticBoxSizer(sb, wx.VERTICAL) # self.SetSizer(self.sideSizer) # for i in range(64): # button = wx.Button(self, -1, label="Add Widget") # self.sideSizer.Add(button) # self.sideSizer = wx.GridSizer(rows=4, cols=3, vgap=5, hgap=5) # self.SetSizer(self.sideSizer) # for i in range(12): # button = wx.Button(self, -1, label="Add Widget") # self.sideSizer.Add(button, flag=wx.ALIGN_CENTER) # gs.AddMany([(),()]) # self.sideSizer = wx.FlexGridSizer(rows=4, cols=3, vgap=5, hgap=5) # self.SetSizer(self.sideSizer) # for i in range(12): # button = wx.Button(self, -1, label="Add Widget") # self.sideSizer.Add(button, flag=wx.ALIGN_CENTER) # gs.AddMany([(),()]) # fgs.AddGrowableRow(2, 1) # EXPAND row size # fgs.AddGrowableCol(1, 1) # EXPAND row size # self.sideSizer = wx.GridBagSizer(vgap=5, hgap=5) # self.SetSizer(self.sideSizer) # for i in range(12 * 2): # button = wx.Button(self, -1, label="Add Widget") # self.sideSizer.Add(button, pos=(i / 3, i % 3), span=(1, 1), flag=wx.ALIGN_CENTER, border=5) # # gs.AddMany([(),()]) self.sideSizer = wx.BoxSizer(wx.VERTICAL) # self.SetSizer(self.sideSizer) self.SetSizerAndFit(self.sideSizer) self.sideSizer.SetSizeHints(self) addevButton = wx.Button(self, -1, label="Add Device", size=(270, -1)) schTextCtrl = wx.TextCtrl(self, -1, size=(180, -1)) sumitButton = wx.Button(self, -1, label="Now Search", size=(90, -1)) self.infoSizer = wx.GridBagSizer(hgap=5, vgap=5) self.infoSizer.Add(addevButton, pos=(0, 0), span=(1, 3), flag=wx.ALIGN_CENTER) self.infoSizer.Add(schTextCtrl, pos=(1, 0), span=(1, 2), flag=wx.ALIGN_CENTER) self.infoSizer.Add(sumitButton, pos=(1, 2), span=(1, 1), flag=wx.ALIGN_CENTER) self.sideSizer.Add(self.infoSizer, flag=wx.ALIGN_CENTER) # self.infoSizer = wx.FlexGridSizer(cols=2, hgap=5, vgap=5) # self.infoSizer.AddGrowableCol(0) # self.infoSizer.Add(addevButton, 0,wx.EXPAND) # self.infoSizer.Add((5, 5)) # self.infoSizer.Add(schTextCtrl, 0, wx.EXPAND) # self.infoSizer.Add(sumitButton, 0, wx.ALIGN_LEFT|wx.ALIGN_CENTER_VERTICAL) # self.sideSizer.Add(self.infoSizer, flag=wx.ALIGN_CENTER | wx.ALL) for n in range(12 * 12): grpPanel = wx.CollapsiblePane(self, label="Group " + str(n), style=wx.CP_DEFAULT_STYLE | wx.CP_NO_TLW_RESIZE) self.Bind(wx.EVT_COLLAPSIBLEPANE_CHANGED, self.OnPaneChanged, grpPanel) self.sideSizer.Add(grpPanel, flag=wx.EXPAND | wx.ALL, border=5) paneSizer = wx.BoxSizer() grpPanel.GetPane().SetSizer(paneSizer) # grpPanel.Expand() # grpSizer = wx.FlexGridSizer(cols=3, hgap=5, vgap=5) grpSizer = wx.GridBagSizer(vgap=5, hgap=5) for i in range(12 + 2): # lable = wx.StaticText(grpPanel.GetPane(), -1, "Text " + str(i)) # grpSizer.Add(lable, 0, wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL) button = wx.Button(grpPanel.GetPane(), -1, label="Widget " + str(i)) grpSizer.Add(button, pos=(i / 3, i % 3), span=(1, 1), flag=wx.ALIGN_CENTER, border=5) paneSizer.Add(grpSizer, 1, wx.EXPAND | wx.ALL, 5) # for i in range(12 * 2): # button = wx.Button(grpPanel.GetPane(), label="Widget " + str(i)) # grpsSizer.Add(button, pos=(i / 3, i % 3), span=(1, 1), flag=wx.ALIGN_CENTER, border=5) # grpButton = wx.Button(self, -1, label="Group " + str(n)) # grpsSizer = wx.GridBagSizer(vgap=5, hgap=5) # grpBox = wx.StaticBox(self, -1, label=u'') # boxSizer = wx.StaticBoxSizer(grpBox, wx.VERTICAL) # boxSizer.Add(grpsSizer, proportion=0, flag=wx.EXPAND, border=10) # for i in range(12 * 2): # button = wx.Button(self, -1, label="Widget " + str(i)) # grpsSizer.Add(button, pos=(i / 3, i % 3), span=(1, 1), flag=wx.ALIGN_CENTER, border=5) # self.Bind(wx.EVT_BUTTON, self.ev_adaptor(self.ev_handler, btn=grpButton, grp=boxSizer), grpButton) # self.sideSizer.Add(grpButton, flag=wx.ALIGN_CENTER) # self.sideSizer.Add(boxSizer, flag=wx.ALIGN_CENTER) def ev_handler(self, event, btn, grp): print(btn.GetLabel(), self.sideSizer.IsShown(grp)) # if self.sideSizer.IsShown(grp): # self.sideSizer.Hide(grp) # else: # self.sideSizer.Show(grp) # self.sideSizer.Layout() def ev_adaptor(self, fun, **kwds): return lambda event, fun=fun, kwds=kwds: fun(event, **kwds) def OnPaneChanged(self, evt=None): print('OnPaneChanged') # self.Refresh() self.SetupScrolling(scrollToTop=False) self.Layout() # class DrawFrame(wx.ScrolledCanvas): class DrawFrame(scrolled.ScrolledPanel): def __init__(self, parent, title): super(self.__class__, self).__init__(parent, -1) # self.Bind(wx.EVT_PAINT, self.OnPaint) self.SetupScrolling() self.InitUI() def InitUI(self): # self.drawSizer = wx.GridBagSizer(vgap=5, hgap=5) self.drawSizer = wx.BoxSizer(wx.VERTICAL) self.SetSizer(self.drawSizer) self.button = wx.Button(self, -1, label='drag button') # for n in range(2): # boxSizer = wx.BoxSizer(wx.HORIZONTAL) # self.drawSizer.Add(boxSizer) # for i in range(4): # button = wx.Button(self, -1, label="button" + str(' n=%d j=%d' % (n, i))) # boxSizer.Add(button) # for i in range(12 * 2): # button = wx.Button(self, -1, label="Add Widget " + str(i), size=(-1, 100)) # self.drawSizer.Add(button, pos=(0, i * 2), span=(1, 2), flag=wx.EXPAND, border=5) # self.Bind(wx.EVT_BUTTON, self.ev_adaptor(self.ev_handler, btn=button, pos=i), button) self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown) self.Bind(wx.EVT_LEFT_UP, self.OnLeftUp) self.Bind(wx.EVT_MOTION, self.OnMotion) # self.Bind(wx.EVT_PAINT, self.OnPaint) self.lines = [] def OnLeftDown(self, event): print('OnLeftDown', 'LeftIsDown', event.GetPosition(), event.GetEventObject().GetLabel()) # wxDropSource、wxDropTarget、wxDataObject self.drawSizer.DropTarget() dataObject = wx.DataObject() dropSource = wx.DropSource(self.button) dropSource.SetData(dataObject) # ldata = wx.CustomDataObject("DoodleLines") # data = wx.DataObjectComposite() # data.Add(ldata) # # dropSource = wx.DropSource(self) # dropSource.SetData(data) # print("Beginning DragDrop\n") # result = dropSource.DoDragDrop(wx.Drag_AllowMove) # print("DragDrop completed: %d\n" % result) if result == wx.DragMove: self.lines = [] self.Refresh() print('OnLeftDown', 'LeftIsDown', result) # self.button.Move(event.GetPosition()) def OnLeftUp(self, event): if self.HasCapture(): self.ReleaseMouse() def OnMotion(self, event): if event.Dragging() and event.LeftIsDown(): print('OnMotion', 'Dragging', 'LeftIsDown') def OnPaint(self, event): print('OnPaint') # self.dc = wx.PaintDC(self) # self.dc.SetPen(wx.Pen('#4c4c4c', 1, wx.SOLID)) # self.dc.DrawRectangle(10, 15, 90, 60) # self.dc.SetPen(wx.Pen('#4c4c4c', 1, wx.DOT)) # self.dc.DrawRectangle(120, 15, 90, 60) # self.dc.SetPen(wx.Pen('#4c4c4c', 1, wx.LONG_DASH)) # self.dc.DrawRectangle(240, 15, 90, 60) # self.dc.SetPen(wx.Pen('#4c4c4c', 1, wx.SHORT_DASH)) # self.dc.DrawRectangle(360, 15, 90, 60) # self.dc.SetPen(wx.Pen('#4c4c4c', 1, wx.DOT_DASH)) # self.dc.DrawRectangle(480, 15, 90, 60) # self.dc.SetPen(wx.Pen('#4c4c4c', 1, wx.TRANSPARENT)) # self.dc.DrawRectangle(600, 15, 90, 60) def ev_handler(self, event, btn, pos): self.curbtn = btn print(btn.GetLabel(), pos) # if self.sideSizer.IsShown(grp): # self.sideSizer.Hide(grp) # else: # self.sideSizer.Show(grp) # self.sideSizer.Layout() def ev_adaptor(self, fun, **kwds): return lambda event, fun=fun, kwds=kwds: fun(event, **kwds) class ShowFrame(wx.grid.Grid): def __init__(self, parent, title): super(self.__class__, self).__init__(parent, -1) self.CreateGrid(32, 64) self.SetRowSize(0, 60) self.SetColSize(0, 120) def InitUI(self): pass class MainFrame(wx.Frame): def __init__(self, parent, title): scn_w, scn_h = wx.DisplaySize() pos_x, pos_y = 100, 50 cur_w, cur_h = scn_w - pos_x * 2, scn_h - pos_y * 2 cen_x, cen_y = scn_w / 2, scn_h / 2 super(self.__class__, self).__init__(parent, title=title, pos=(pos_x, pos_y), size=(cur_w, cur_h)) self.SetMaxSize((scn_w, scn_h)) self.SetMinSize((cen_x, cen_y)) self.InitUI() self.Centre() # self.SetAutoLayout(True) # self.Layout() self.Show() self.Hide() print(self.IsShown()) self.Show() print(self.IsShown()) def InitUI(self): self.splitterLeft = wx.SplitterWindow(self, style=wx.SP_3D) self.splitterRigt = wx.SplitterWindow(self.splitterLeft, style=wx.SP_3D) self.baseDevice = SideFrame(self.splitterLeft, -1) self.drawDevice = DrawFrame(self.splitterRigt, -1) self.showDevice = ShowFrame(self.splitterRigt, -1) self.splitterLeft.SplitVertically(self.baseDevice, self.splitterRigt, 300) self.splitterRigt.SplitHorizontally(self.drawDevice, self.showDevice, 100) self.baseDevice.SetBackgroundColour("MEDIUM GREY") self.drawDevice.SetBackgroundColour("GRAY") self.showDevice.SetBackgroundColour("LIGHT GREY") # # self.basePanel = self.baseDevice # # self.basePanel.SetBackgroundColour('#4f5049') # self.baseSizer = wx.BoxSizer(wx.VERTICAL) # # self.devPanel = wx.Panel(self.basePanel) # self.devPanel.SetBackgroundColour('DIM GREY') # self.devSizer = wx.BoxSizer(wx.VERTICAL) # self.devPanel.SetSizer(self.devSizer) # # self.grpPanel = scrolled.ScrolledPanel(self.basePanel) # self.grpPanel.SetBackgroundColour('WHITE') # self.grpSizer = wx.BoxSizer(wx.VERTICAL) # self.grpPanel.SetSizer(self.grpSizer) # self.grpPanel.SetupScrolling() # # self.baseSizer.Add(self.devPanel, wx.ID_ANY, wx.EXPAND | wx.ALL, 5) # self.baseSizer.Add(self.grpPanel, wx.ID_ANY, wx.EXPAND | wx.ALL, 5) # self.basePanel.SetSizer(self.baseSizer) # # for i in range(16): # new_ctrl = wx.TextCtrl(self.devPanel, value='TextCtrl') # self.devSizer.Add(new_ctrl) # new_bton = wx.Button(self.grpPanel, label='Button') # self.grpSizer.Add(new_bton) # new_text = wx.StaticText(self.grpPanel, label='StaticText') # self.grpSizer.Add(new_text) # # hbox5 = wx.BoxSizer(wx.HORIZONTAL) # self.ctrl = wx.TextCtrl(self.devPanel, value='TextCtrl', size=(100, 30)) # self.btnPop = wx.Button(self.devPanel, label='Popup', size=(70, 30)) # self.btnOK = wx.Button(self.devPanel, label='Ok', size=(70, 30)) # self.btnNG = wx.Button(self.devPanel, label='Close', size=(70, 30)) # # self.Bind(wx.EVT_BUTTON, self.OnPopup, self.btnPop) # self.Bind(wx.EVT_BUTTON, self.OnTouchOk, self.btnOK) # self.Bind(wx.EVT_BUTTON, self.OnTouchClose, self.btnNG) # hbox5.Add(self.ctrl, wx.EXPAND, 20) # hbox5.Add(self.btnPop, wx.EXPAND, 20) # hbox5.Add(self.btnOK, wx.EXPAND, 20) # hbox5.Add(self.btnNG, flag=wx.LEFT | wx.BOTTOM, border=5) # self.devSizer.Add(hbox5, flag=wx.ALIGN_RIGHT | wx.RIGHT, border=5) # # self.drawDevice.Bind(wx.EVT_PAINT, self.OnPaint) # # self.showDevice.CreateGrid(32, 64) # self.showDevice.SetRowSize(0, 60) # self.showDevice.SetColSize(0, 120) # def OnPopup(self, event): # self.ctrl.SetLabel(u'Popup') # scn_w, scn_h = wx.DisplaySize() # win_w, win_h = 800, 600 # pos_x, pos_y = (scn_w - win_w) / 2, (scn_h - win_h) / 2 # dialog = wx.Dialog(self, -1, 'Dialog Subclass', pos=(pos_x, pos_y), size=(win_w, win_h)) # okButton = wx.Button(dialog, wx.ID_OK, "OK", pos=(300, 400)) # okButton.SetDefault() # cancelButton = wx.Button(dialog, wx.ID_CANCEL, "Cancel", pos=(400, 400)) # # result = dialog.ShowModal() # if result == wx.ID_OK: # print "OK" # else: # print "Cancel" # dialog.Destroy() # # def OnTouchOk(self, event): # self.ctrl.SetLabel(u'↓') # self.baseSizer.Show(self.grpPanel) # # def OnTouchClose(self, event): # self.ctrl.SetLabel(u'↑') # self.baseSizer.Hide(self.grpPanel) # # def OnPaint(self, event): # print('OnPaint') # self.dc = wx.PaintDC(self.drawDevice) # self.dc.SetPen(wx.Pen('#4c4c4c', 1, wx.SOLID)) # self.dc.DrawRectangle(10, 15, 90, 60) # self.dc.SetPen(wx.Pen('#4c4c4c', 1, wx.DOT)) # self.dc.DrawRectangle(120, 15, 90, 60) # self.dc.SetPen(wx.Pen('#4c4c4c', 1, wx.LONG_DASH)) # self.dc.DrawRectangle(240, 15, 90, 60) # self.dc.SetPen(wx.Pen('#4c4c4c', 1, wx.SHORT_DASH)) # self.dc.DrawRectangle(360, 15, 90, 60) # self.dc.SetPen(wx.Pen('#4c4c4c', 1, wx.DOT_DASH)) # self.dc.DrawRectangle(480, 15, 90, 60) # self.dc.SetPen(wx.Pen('#4c4c4c', 1, wx.TRANSPARENT)) # self.dc.DrawRectangle(600, 15, 90, 60) def main(argv): global runPath global curPath global curFile try: logTime = time.strftime('%Y-%m-%d_%H-%M-%S ', time.localtime(time.time())) print(logTime + "main call") runPath = os.getcwd().decode('GB18030', 'ignore') # GB2312 => GBK => GB18030 curPath = os.path.dirname(os.path.abspath(__file__).decode('GB18030', 'ignore')) curFile = os.path.basename(os.path.abspath(__file__).decode('GB18030', 'ignore')) (curName, curExtn) = os.path.splitext(curFile) app = wx.App() ex = MainFrame(None, title='MainFrame') ex.Show() app.MainLoop() logTime = time.strftime('%Y-%m-%d_%H-%M-%S ', time.localtime(time.time())) print(logTime + "main exit") return True except: print(traceback.format_exc()) print(traceback.print_exc()) logtime = time.strftime('%Y-%m-%d_%H-%M-%S ', time.localtime(time.time())) print(logtime + "main fail") sys.stdout.flush() return False if __name__ == '__main__': retCode = main(sys.argv) exit(not retCode)
#########################################################################################
import wx class MyDropTarget(wx.TextDropTarget): def __init__(self, win): super(self.__class__, self).__init__() self.object = win def OnDropText(self, x, y, text): drop = wx.Button(self.object, wx.ID_ANY, label=text) self.object.GetSizer().Add(drop, wx.ID_ANY, wx.TOP | wx.EXPAND) self.object.GetSizer().Layout() return True class MainFrame(wx.Frame): def __init__(self, parent, title): super(self.__class__, self).__init__(parent, title=title, size=(800, 600)) self.mainPanel = wx.Panel(self) self.leftPanel = wx.Panel(self.mainPanel, -1, size=(100, -1)) self.workPanel = wx.Panel(self.mainPanel, -1, style=wx.RIGHT) self.leftPanel.SetBackgroundColour('GOLD') self.workPanel.SetBackgroundColour('GRAY') self.mainSizer = wx.BoxSizer(wx.HORIZONTAL) self.leftSizer = wx.BoxSizer(wx.VERTICAL) self.workSizer = wx.BoxSizer(wx.VERTICAL) self.mainSizer.Add(self.leftPanel, wx.ID_ANY, wx.EXPAND) self.mainSizer.Add(self.workPanel, wx.ID_ANY, wx.EXPAND) self.mainPanel.SetSizer(self.mainSizer) self.leftPanel.SetSizer(self.leftSizer) self.workPanel.SetSizer(self.workSizer) drop_target = MyDropTarget(self.workPanel) self.workPanel.SetDropTarget(drop_target) for i in range(8): drag = wx.Button(self.leftPanel, -1, label='drag ' + str(i)) drag.Bind(wx.EVT_LEFT_DOWN, self.OnDragInit) self.leftSizer.Add(drag, wx.ID_ANY, wx.TOP | wx.EXPAND) # for i in range(4): # drop = wx.Button(self.workPanel, -1, label='drop ' + str(i)) # self.workSizer.Add(drop, wx.ID_ANY, wx.TOP | wx.EXPAND) self.Layout() self.Centre() self.Show(True) def OnDragInit(self, event): print('OnDragInit', event.GetEventObject().GetLabel()) text = event.GetEventObject().GetLabel() tobj = wx.TextDataObject(text) src = wx.DropSource(self.leftPanel) src.SetData(tobj) ret_code = src.DoDragDrop(True) dlg = wx.MessageDialog(self.leftPanel, 'Comfirm', 'A Message Box', # wx.OK | wx.ICON_INFORMATION wx.YES_NO | wx.NO_DEFAULT | wx.CANCEL | wx.ICON_INFORMATION ) ret_id = dlg.ShowModal() # if dlg.ShowModal() == wx.ID_OK: dlg.Destroy() print('OnDragInit', ret_code, ret_id, wx.YES_NO) # ret is 3 do ok self.leftSizer.Hide(event.GetEventObject()) event.GetEventObject().Destroy() self.leftSizer.Layout() if __name__ == '__main__': ex = wx.App() MainFrame(None, 'Drag&Drop button') ex.MainLoop()