刘总的笔记小站

生活常识,娱乐搞笑,编程技巧,智能家居,深度学习,网络神经,数据挖掘

wxpython Example

#!/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()



发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
搜索
«   2024年9月   »
1
2345678
9101112131415
16171819202122
23242526272829
30
网站分类
最新留言
文章归档
网站收藏
友情链接
图标汇集
Powered by Z-BlogPHP

  • Copyright ©2021 @liuzong All rights reserved.
  • 陕ICP备17016542号