- 论坛徽章:
- 0
|
本帖最后由 GOD_Father 于 2010-05-23 13:25 编辑
拿wxPython做MySQL的GUI开发,纯属娱乐。结果把自己郁闷了,悲剧!
问题:程序运行都好,点“TestConnect”按钮老是不能正确连接数据库
debug的时候,连接字符串都没问题,IDLE中连接也没问题。郁闷了,大家帮忙看看。
窗口设计代码:- #coding:UTF-8
- #wxFrame:Frame1
- #LoadingFrame for Db connect seting
- #filename:Db_Connect.py
- #data:2010-5-22
- import wx
- import MySQLdb
- def create(parent):
- return Frame1(parent)
- [wxID_FRAME1, wxID_FRAME1BUTTON1, wxID_FRAME1BUTTON2, wxID_FRAME1BUTTON3,
- wxID_FRAME1COMBOBOX1, wxID_FRAME1PANEL1, wxID_FRAME1STATICBOX1,
- wxID_FRAME1STATICTEXT1, wxID_FRAME1STATICTEXT2, wxID_FRAME1STATICTEXT3,
- wxID_FRAME1STATICTEXT4, wxID_FRAME1STATICTEXT5, wxID_FRAME1STATICTEXT6,
- wxID_FRAME1TEXTCTRL1, wxID_FRAME1TEXTCTRL2, wxID_FRAME1TEXTCTRL3,
- wxID_FRAME1TEXTCTRL4, wxID_FRAME1TEXTCTRL5,
- ] = [wx.NewId() for _init_ctrls in range(18)]
- class Frame1(wx.Frame):
- def _init_ctrls(self, prnt):
- # generated method, don't edit
- wx.Frame.__init__(self, id=wxID_FRAME1, name='', parent=prnt,
- pos=wx.Point(607, 221), size=wx.Size(313, 394),
- style=wx.DEFAULT_FRAME_STYLE^
- (wx.MAXIMIZE_BOX | wx.RESIZE_BORDER),
- title='MySQLdb_Test')
- self.SetClientSize(wx.Size(305, 360))
- self.Bind(wx.EVT_CLOSE, self.OnFrame1Close)
- self.panel1 = wx.Panel(
- id=wxID_FRAME1PANEL1,
- name='panel1',
- parent=self,
- pos=wx.Point(0, 0),
- size=wx.Size(305, 360),
- style=wx.TAB_TRAVERSAL)
-
- #设置主机地址
- self.staticText1 = wx.StaticText(
- id=wxID_FRAME1STATICTEXT1,
- label='Host..:', name='staticText1',
- parent=self.panel1,
- pos=wx.Point(40, 48),
- size=wx.Size(44, 14),
- style=0)
- self.staticText1.SetFont(
- wx.Font(9, wx.SWISS, wx.NORMAL, wx.NORMAL,
- False, 'Tahoma'))
- self.textCtrl1 = wx.TextCtrl(
- id=wxID_FRAME1TEXTCTRL1,
- name='textCtrl1',
- parent=self.panel1,
- pos=wx.Point(104, 46),
- size=wx.Size(167, 22),
- style=0, value='localhost')
- self.textCtrl1.SetToolTipString('textCtrl1')
- self.textCtrl1.SetHelpText('Like this: localhost or 127.0.0.1')
-
- self.staticText2 = wx.StaticText(
- id=wxID_FRAME1STATICTEXT2,
- label='Port..:',
- name='staticText2',
- parent=self.panel1,
- pos=wx.Point(40, 88),
- size=wx.Size(44, 14),
- style=0)
- self.staticText2.SetFont(
- wx.Font(9, wx.SWISS, wx.NORMAL, wx.NORMAL,
- False, 'Tahoma'))
-
- #数据库端口号
- self.textCtrl2 = wx.TextCtrl(
- id=wxID_FRAME1TEXTCTRL2,
- name='textCtrl2',
- parent=self.panel1,
- pos=wx.Point(104, 86),
- size=wx.Size(48, 22),
- style=0, value='3306')
- self.staticText3 = wx.StaticText(
- id=wxID_FRAME1STATICTEXT3,
- label='UserName:',
- name='staticText3',
- parent=self.panel1,
- pos=wx.Point(40, 128), size=wx.Size(48, 14),
- style=0)
- self.staticText3.SetFont(
- wx.Font(9, wx.SWISS, wx.NORMAL, wx.NORMAL,
- False, 'Tahoma'))
-
- #设置用户名
- self.textCtrl3 = wx.TextCtrl(
- id=wxID_FRAME1TEXTCTRL3,
- name='textCtrl3',
- parent=self.panel1,
- pos=wx.Point(104, 124),
- size=wx.Size(100, 22),
- style=0, value='')
- self.staticText4 = wx.StaticText(
- id=wxID_FRAME1STATICTEXT4,
- label='PassWord:',
- name='staticText4',
- parent=self.panel1,
- pos=wx.Point(40, 168), size=wx.Size(44, 14),
- style=0)
- self.staticText4.SetFont(
- wx.Font(9, wx.SWISS, wx.NORMAL, wx.NORMAL,
- False, 'Tahoma'))
-
- #设置密码
- self.textCtrl4 = wx.TextCtrl(
- id=wxID_FRAME1TEXTCTRL4,
- name='textCtrl4',
- parent=self.panel1,
- pos=wx.Point(104, 166),
- size=wx.Size(100, 22),
- style=wx.TE_PASSWORD, value='')
- self.staticText5 = wx.StaticText(
- id=wxID_FRAME1STATICTEXT5,
- label='DataBase:',
- name='staticText5',
- parent=self.panel1,
- pos=wx.Point(40, 208),
- size=wx.Size(48, 14),
- style=0)
- self.staticText5.SetFont(
- wx.Font(9, wx.SWISS, wx.NORMAL, wx.NORMAL,
- False, 'Tahoma'))
-
- #设置默认打开的数据库
- self.textCtrl5 = wx.TextCtrl(
- id=wxID_FRAME1TEXTCTRL5,
- name='textCtrl5',
- parent=self.panel1,
- pos=wx.Point(104, 206),
- size=wx.Size(100, 22),
- style=0, value='')
- self.staticText6 = wx.StaticText(
- id=wxID_FRAME1STATICTEXT6,
- label=' DBType:',
- name='staticText6',
- parent=self.panel1,
- pos=wx.Point(24, 256),
- size=wx.Size(72, 14), style=0)
-
- #选择数据库类型
- #功能待完善,标记1
- self.comboBox1 = wx.ComboBox(
- choices=[],
- id=wxID_FRAME1COMBOBOX1,
- name='comboBox1',
- parent=self.panel1,
- pos=wx.Point(104, 256),
- size=wx.Size(130, 22),
- style=0, value='MySQL')
- self.comboBox1.SetLabel('MySQL')
- self.comboBox1.SetAutoLayout(False)
- self.staticBox1 = wx.StaticBox(
- id=wxID_FRAME1STATICBOX1,
- label='Set Connecting:',
- name='staticBox1',
- parent=self.panel1,
- pos=wx.Point(16, 16),
- size=wx.Size(272, 280),
- style=0)
- self.button1 = wx.Button(
- id=wxID_FRAME1BUTTON1,
- label='TestConnect',
- name='button1',
- parent=self.panel1,
- pos=wx.Point(24, 312),
- size=wx.Size(75, 24),
- style=0)
- self.button1.Bind(
- wx.EVT_BUTTON,
- self.OnButton1Click,
- id=wxID_FRAME1BUTTON1)
- self.button2 = wx.Button(
- id=wxID_FRAME1BUTTON2,
- label=' OK ',
- name='button2',
- parent=self.panel1,
- pos=wx.Point(120, 312),
- size=wx.Size(75, 24), style=0)
- self.button3 = wx.Button(
- id=wxID_FRAME1BUTTON3,
- label='Cancel',
- name='button3',
- parent=self.panel1,
- pos=wx.Point(216, 312),
- size=wx.Size(75, 24), style=0)
- self.button3.Bind(wx.EVT_BUTTON, self.OnButton3, id=wxID_FRAME1BUTTON3)
- def __init__(self, parent):
- self._init_ctrls(parent)
- def OnFrame1Close(self, event):
- self.Destroy()
- def OnButton3(self, event):
- self.Destroy()
- def OnButton1Click(self, event):
- #myhost=str(self.textCtrl1.GetValue())
- #print myhost
- '''
- connStr="host='localhost',port=3306,user='root',
- passwd='test',db='python'"
- '''
-
- connStr="host='%s',port=%d,user='%s',passwd='%s',db='%s'"%(
- str(self.textCtrl1.GetValue()),
- int(self.textCtrl2.GetValue()),
- str(self.textCtrl3.GetValue()),
- str(self.textCtrl4.GetValue()),
- str(self.textCtrl5.GetValue()),
- )
- #print connStr
- try:
- myConn=MySQLdb.connect(connStr)
- #myConn.Close()
- dlgOk=wx.MessageDialog(
- None,
- "成功连接数据库",
- caption="Success",
- style=wx.OK|wx.ICON_INFORMATION|wx.STAY_ON_TOP,
- )
- retCode=dlgOk.ShowModal()
- if retCode==wx.ID_OK:
- dlgOk.Destroy()
- except:
- dlgError=wx.MessageDialog(
- None,
- "连接失败,确保数据库已开启并检查设置!",
- caption="ERROR",
- style=wx.OK|wx.ICON_ERROR|wx.STAY_ON_TOP,
- )
- retCode=dlgError.ShowModal()
- if retCode==wx.ID_OK:
- dlgError.Destroy()
- finally:
- myConn.Close()
复制代码 主程序Db_App.py,调用上面的界面代码文件:- #!/usr/bin/env python
- #coding:UTF-8
- #MainApp
- #filename:Db_App.py
- #data:2010-5-22
- import wx
- import Db_Connect
- import MySQLdb
- modules ={'Db_Connect': [0, 'Loading Windows', 'Db_Connect.py']}
- class App(wx.App):
- #重定向stdOut,stdError到DbApp.log文件
- def __init__(self,redirect=True,filename='DbApp.log'):
- wx.App.__init__(self,redirect,filename)
- def OnInit(self):
- wx.InitAllImageHandlers()
- self.main=Db_Connect.create(None)
- self.main.Show(True)
- self.SetTopWindow(self.main)
- return True
-
- def main():
- app=App(redirect=True,filename='DbApp.log')
- app.MainLoop()
- if __name__ == '__main__':
- main()
复制代码 界面如下:
运行结果:
|
|