⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frame1.py

📁 isql for acess,sqlite , mysql etc
💻 PY
字号:
#Boa:Frame:frame1

import wx
from wx.lib.anchors import LayoutAnchors
import wx.grid
import os
import dbpar
from getpath import getpath
from isql2 import MyError
inipath=getpath()
def create(parent):
    return frame1(parent)

[wxID_FRAME1, wxID_FRAME1BUTTON1, wxID_FRAME1GRID1, wxID_FRAME1LISTBOX1, 
 wxID_FRAME1LISTBOX2, wxID_FRAME1TEXTCTRL1, wxID_FRAME1TEXTCTRL2, 
] = [wx.NewId() for _init_ctrls in range(7)]

[wxID_FRAME1MENU1ITEMS0, wxID_FRAME1MENU1ITEMS1, 
] = [wx.NewId() for _init_coll_menu1_Items in range(2)]

class frame1(wx.Frame):
    def _init_coll_menu1_Items(self, parent):
        # generated method, don't edit

        parent.Append(help='', id=wxID_FRAME1MENU1ITEMS0, kind=wx.ITEM_NORMAL,
              text=u'add')
        parent.Append(help='', id=wxID_FRAME1MENU1ITEMS1, kind=wx.ITEM_NORMAL,
              text=u'delete')
        self.Bind(wx.EVT_MENU, self.OnMenu1Items0Menu,
              id=wxID_FRAME1MENU1ITEMS0)
        self.Bind(wx.EVT_MENU, self.OnMenu1Items1Menu,
              id=wxID_FRAME1MENU1ITEMS1)

    def _init_utils(self):
        # generated method, don't edit
        self.menu1 = wx.Menu(title='')

        self._init_coll_menu1_Items(self.menu1)

    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Frame.__init__(self, id=wxID_FRAME1, name=u'frame1', parent=prnt,
              pos=wx.Point(423, 54), size=wx.Size(536, 633),
              style=wx.DEFAULT_FRAME_STYLE | wx.CAPTION,
              title=u'isql for Access&SQLite')
        self._init_utils()
        self.SetClientSize(wx.Size(528, 605))
        self.SetAutoLayout(True)
        self.Bind(wx.EVT_CLOSE, self.OnFrame1Close)

        self.textCtrl1 = wx.TextCtrl(id=wxID_FRAME1TEXTCTRL1, name='textCtrl1',
              parent=self, pos=wx.Point(8, 360), size=wx.Size(512, 96), style=0,
              value='textCtrl1')
        self.textCtrl1.SetConstraints(LayoutAnchors(self.textCtrl1, True, False,
              True, True))

        self.button1 = wx.Button(id=wxID_FRAME1BUTTON1, label=u'go',
              name='button1', parent=self, pos=wx.Point(200, 464),
              size=wx.Size(80, 24), style=0)
        self.button1.SetConstraints(LayoutAnchors(self.button1, True, False,
              False, True))
        self.button1.Bind(wx.EVT_BUTTON, self.OnButton1Button,
              id=wxID_FRAME1BUTTON1)

        self.textCtrl2 = wx.TextCtrl(id=wxID_FRAME1TEXTCTRL2, name='textCtrl2',
              parent=self, pos=wx.Point(8, 496), size=wx.Size(512, 104),
              style=wx.TE_MULTILINE, value='textCtrl2')
        self.textCtrl2.SetConstraints(LayoutAnchors(self.textCtrl2, True, False,
              True, True))

        self.grid1 = wx.grid.Grid(id=wxID_FRAME1GRID1, name='grid1',
              parent=self, pos=wx.Point(152, 104), size=wx.Size(368, 248),
              style=0)
        self.grid1.SetConstraints(LayoutAnchors(self.grid1, True, True, True,
              True))

        self.listBox1 = wx.ListBox(choices=[], id=wxID_FRAME1LISTBOX1,
              name='listBox1', parent=self, pos=wx.Point(8, 104),
              size=wx.Size(131, 248), style=0)
        self.listBox1.SetConstraints(LayoutAnchors(self.listBox1, True, True,
              False, True))
        self.listBox1.Bind(wx.EVT_LISTBOX_DCLICK, self.OnListBox1ListboxDclick,
              id=wxID_FRAME1LISTBOX1)

        self.listBox2 = wx.ListBox(choices=[], id=wxID_FRAME1LISTBOX2,
              name='listBox2', parent=self, pos=wx.Point(8, 8),
              size=wx.Size(512, 88), style=0)
        self.listBox2.SetConstraints(LayoutAnchors(self.listBox2, True, True,
              True, False))
        self.listBox2.Bind(wx.EVT_LISTBOX_DCLICK, self.OnListBox2ListboxDclick,
              id=wxID_FRAME1LISTBOX2)
        self.listBox2.Bind(wx.EVT_RIGHT_DOWN, self.OnListBox2RightDown)

    def __init__(self, parent):
        self._init_ctrls(parent)
        self.grid1.CreateGrid(4,4)
        self.dbs=self.loaddbs()
        self.textCtrl2.Clear()
    def loaddbs(self):
        r=[]
        try:
            f=open(inipath+"\isql.ini","r")
            n=f.read()
            n=n.split("\n")
            for n1 in n:
                if n1<>"":
                    self.listBox2.Append(n1)
                    r.append(n1)
            f.close()
        except IOError,e:
            print e
        print r
        return(r)
    def OnButton1Button(self, event):
        #go
##        self.button1.Enable(0)
        self.go()
##        self.button1.Enable(1)
        self.savelogmsg("ready")
    def go(self):
        cmd=self.textCtrl1.GetValue()
        print cmd
        try:
            r=self.db.execQuery(cmd)
            if cmd[:6].lower()=="select":
                self.queryToGrid(r,self.grid1)
        except MyError,e:
            self.savelogmsg(str(e))
    def savelogmsg(self,s):
        self.textCtrl2.AppendText(s+"\n")
        
    def getFileName(self):
        from wxPython.wx import wxFileDialog,wxOPEN,wxID_OK
        f=""
        wildcard = "sqlite db (*.db)|*.db|" \
                    "access db (*.mdb)|*.mdb|" \
                   "All files (*.*)|*.*"

        dlg = wxFileDialog(self, "Choose a file", os.getcwd(), "", wildcard,
                       wxOPEN
                       )
        if dlg.ShowModal() == wxID_OK:
            f= dlg.GetPath()
        dlg.Destroy()
        return(f)
    def queryToGrid(self,query,grid):
        names=query[0]
        r=query[1:]
        m1=len(r)
        if m1>0:
            n1=len(r[0])
            m=grid.GetNumberRows()
            if m>0:
                grid.DeleteRows(numRows =m)
            grid.InsertRows(numRows =m1)
            n=grid.GetNumberCols()
            grid.DeleteCols(numCols =n)
            grid.InsertCols(numCols =n1)
            for j in range(n1):
                for i in range(m1):
                    grid.SetCellValue(i,j,unicode(r[i][j]))
        else:
            n1=len(names)
            m=grid.GetNumberRows()
            if m>0:
                grid.DeleteRows(numRows =m)
            n=grid.GetNumberCols()
            grid.DeleteCols(numCols =n)
            grid.InsertCols(numCols =n1)
        for j in range(len(names)):
            grid.SetColLabelValue(j,names[j])
    def addSource(self):
        f=self.getFileName()
        self.addSource1(f)
    def addSource1(self,f):
        self.listBox2.Append(f)
        self.dbs.append(f)
        at=self.listBox2.GetCount()
        self.listBox2.SetSelection(at-1)
        self.showTables()
    def showTables(self):
        self.listBox1.Clear()
        dbn=self.listBox2.GetString(self.listBox2.GetSelection() )
        print "dbn"
        print dbn
        self.db=dbpar.getdb(dbn)
        n=self.db.getTables()
        if n!=None:
            for n1 in n:
                self.listBox1.Append(n1)
    def OnListBox1ListboxDclick(self, event):
        #open table
        s=self.listBox1.GetString(self.listBox1.GetSelection() )
        s="select *  from "+s
        self.textCtrl1.Clear()
        self.textCtrl1.AppendText(s)
        self.go()
 
    def OnListBox2ListboxDclick(self, event):
        #open database
        self.showTables()
        event.Skip()

    def OnMenu1Items0Menu(self, event):
        #add data source
        print "add source"
        self.addSource()
        pass

    def OnMenu1Items1Menu(self, event):
        #delete data source
        s=self.listBox2.GetString(self.listBox2.GetSelection())
        self.listBox2.Delete(self.listBox2.GetSelection() )
        self.dbs.remove(s)

    def OnListBox2RightDown(self, event):
        self.PopupMenu(self.menu1, event.GetPosition())

    def OnFrame1Close(self, event):
        f=open(inipath+"\isql.ini","w")
        for d in self.dbs:
            f.write(d+"\n")
        f.close()
        self.Destroy()

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -