亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 5295 | 回復(fù): 5
打印 上一主題 下一主題

wxPython開發(fā)MySQL界面程序錯(cuò)誤--大家?guī)兔纯?/a> [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2010-05-23 13:09 |只看該作者 |倒序?yàn)g覽
本帖最后由 GOD_Father 于 2010-05-23 13:25 編輯

拿wxPython做MySQL的GUI開發(fā),純屬娛樂。結(jié)果把自己郁悶了,悲!

問題:程序運(yùn)行都好,點(diǎn)“TestConnect”按鈕老是不能正確連接數(shù)據(jù)庫
debug的時(shí)候,連接字符串都沒問題,IDLE中連接也沒問題。郁悶了,大家?guī)兔纯础?br />
窗口設(shè)計(jì)代碼:
  1. #coding:UTF-8
  2. #wxFrame:Frame1
  3. #LoadingFrame for Db connect seting
  4. #filename:Db_Connect.py
  5. #data:2010-5-22

  6. import wx
  7. import MySQLdb

  8. def create(parent):
  9.     return Frame1(parent)

  10. [wxID_FRAME1, wxID_FRAME1BUTTON1, wxID_FRAME1BUTTON2, wxID_FRAME1BUTTON3,
  11. wxID_FRAME1COMBOBOX1, wxID_FRAME1PANEL1, wxID_FRAME1STATICBOX1,
  12. wxID_FRAME1STATICTEXT1, wxID_FRAME1STATICTEXT2, wxID_FRAME1STATICTEXT3,
  13. wxID_FRAME1STATICTEXT4, wxID_FRAME1STATICTEXT5, wxID_FRAME1STATICTEXT6,
  14. wxID_FRAME1TEXTCTRL1, wxID_FRAME1TEXTCTRL2, wxID_FRAME1TEXTCTRL3,
  15. wxID_FRAME1TEXTCTRL4, wxID_FRAME1TEXTCTRL5,
  16. ] = [wx.NewId() for _init_ctrls in range(18)]

  17. class Frame1(wx.Frame):
  18.     def _init_ctrls(self, prnt):
  19.         # generated method, don't edit
  20.         wx.Frame.__init__(self, id=wxID_FRAME1, name='', parent=prnt,
  21.               pos=wx.Point(607, 221), size=wx.Size(313, 394),
  22.               style=wx.DEFAULT_FRAME_STYLE^
  23.                         (wx.MAXIMIZE_BOX | wx.RESIZE_BORDER),
  24.               title='MySQLdb_Test')
  25.         self.SetClientSize(wx.Size(305, 360))
  26.         self.Bind(wx.EVT_CLOSE, self.OnFrame1Close)

  27.         self.panel1 = wx.Panel(
  28.               id=wxID_FRAME1PANEL1,
  29.               name='panel1',
  30.               parent=self,
  31.               pos=wx.Point(0, 0),
  32.               size=wx.Size(305, 360),
  33.               style=wx.TAB_TRAVERSAL)
  34.         
  35.         #設(shè)置主機(jī)地址
  36.         self.staticText1 = wx.StaticText(
  37.               id=wxID_FRAME1STATICTEXT1,
  38.               label='Host..:', name='staticText1',
  39.               parent=self.panel1,
  40.               pos=wx.Point(40, 48),
  41.               size=wx.Size(44, 14),
  42.               style=0)
  43.         self.staticText1.SetFont(
  44.               wx.Font(9, wx.SWISS, wx.NORMAL, wx.NORMAL,
  45.               False, 'Tahoma'))

  46.         self.textCtrl1 = wx.TextCtrl(
  47.               id=wxID_FRAME1TEXTCTRL1,
  48.               name='textCtrl1',
  49.               parent=self.panel1,
  50.               pos=wx.Point(104, 46),
  51.               size=wx.Size(167, 22),
  52.               style=0, value='localhost')
  53.         self.textCtrl1.SetToolTipString('textCtrl1')
  54.         self.textCtrl1.SetHelpText('Like this: localhost or 127.0.0.1')
  55.         
  56.         self.staticText2 = wx.StaticText(
  57.               id=wxID_FRAME1STATICTEXT2,
  58.               label='Port..:',
  59.               name='staticText2',
  60.               parent=self.panel1,
  61.               pos=wx.Point(40, 88),
  62.               size=wx.Size(44, 14),
  63.               style=0)
  64.         self.staticText2.SetFont(
  65.               wx.Font(9, wx.SWISS, wx.NORMAL, wx.NORMAL,
  66.               False, 'Tahoma'))
  67.         
  68.         #數(shù)據(jù)庫端口號(hào)
  69.         self.textCtrl2 = wx.TextCtrl(
  70.               id=wxID_FRAME1TEXTCTRL2,
  71.               name='textCtrl2',
  72.               parent=self.panel1,
  73.               pos=wx.Point(104, 86),
  74.               size=wx.Size(48, 22),
  75.               style=0, value='3306')

  76.         self.staticText3 = wx.StaticText(
  77.               id=wxID_FRAME1STATICTEXT3,
  78.               label='UserName:',
  79.               name='staticText3',
  80.               parent=self.panel1,
  81.               pos=wx.Point(40, 128), size=wx.Size(48, 14),
  82.               style=0)
  83.         self.staticText3.SetFont(
  84.               wx.Font(9, wx.SWISS, wx.NORMAL, wx.NORMAL,
  85.               False, 'Tahoma'))
  86.         
  87.         #設(shè)置用戶名
  88.         self.textCtrl3 = wx.TextCtrl(
  89.               id=wxID_FRAME1TEXTCTRL3,
  90.               name='textCtrl3',
  91.               parent=self.panel1,
  92.               pos=wx.Point(104, 124),
  93.               size=wx.Size(100, 22),
  94.               style=0, value='')

  95.         self.staticText4 = wx.StaticText(
  96.               id=wxID_FRAME1STATICTEXT4,
  97.               label='PassWord:',
  98.               name='staticText4',
  99.               parent=self.panel1,
  100.               pos=wx.Point(40, 168), size=wx.Size(44, 14),
  101.               style=0)
  102.         self.staticText4.SetFont(
  103.               wx.Font(9, wx.SWISS, wx.NORMAL, wx.NORMAL,
  104.               False, 'Tahoma'))
  105.         
  106.         #設(shè)置密碼
  107.         self.textCtrl4 = wx.TextCtrl(
  108.               id=wxID_FRAME1TEXTCTRL4,
  109.               name='textCtrl4',
  110.               parent=self.panel1,
  111.               pos=wx.Point(104, 166),
  112.               size=wx.Size(100, 22),
  113.               style=wx.TE_PASSWORD, value='')

  114.         self.staticText5 = wx.StaticText(
  115.               id=wxID_FRAME1STATICTEXT5,
  116.               label='DataBase:',
  117.               name='staticText5',
  118.               parent=self.panel1,
  119.               pos=wx.Point(40, 208),
  120.               size=wx.Size(48, 14),
  121.               style=0)
  122.         self.staticText5.SetFont(
  123.               wx.Font(9, wx.SWISS, wx.NORMAL, wx.NORMAL,
  124.               False, 'Tahoma'))
  125.         
  126.         #設(shè)置默認(rèn)打開的數(shù)據(jù)庫
  127.         self.textCtrl5 = wx.TextCtrl(
  128.               id=wxID_FRAME1TEXTCTRL5,
  129.               name='textCtrl5',
  130.               parent=self.panel1,
  131.               pos=wx.Point(104, 206),
  132.               size=wx.Size(100, 22),
  133.               style=0, value='')

  134.         self.staticText6 = wx.StaticText(
  135.               id=wxID_FRAME1STATICTEXT6,
  136.               label='   DBType:',
  137.               name='staticText6',
  138.               parent=self.panel1,
  139.               pos=wx.Point(24, 256),
  140.               size=wx.Size(72, 14), style=0)
  141.         
  142.         #選擇數(shù)據(jù)庫類型
  143.         #功能待完善,標(biāo)記1
  144.         self.comboBox1 = wx.ComboBox(
  145.               choices=[],
  146.               id=wxID_FRAME1COMBOBOX1,
  147.               name='comboBox1',
  148.               parent=self.panel1,
  149.               pos=wx.Point(104, 256),
  150.               size=wx.Size(130, 22),
  151.               style=0, value='MySQL')
  152.         self.comboBox1.SetLabel('MySQL')
  153.         self.comboBox1.SetAutoLayout(False)

  154.         self.staticBox1 = wx.StaticBox(
  155.               id=wxID_FRAME1STATICBOX1,
  156.               label='Set Connecting:',
  157.               name='staticBox1',
  158.               parent=self.panel1,
  159.               pos=wx.Point(16, 16),
  160.               size=wx.Size(272, 280),
  161.               style=0)

  162.         self.button1 = wx.Button(
  163.               id=wxID_FRAME1BUTTON1,
  164.               label='TestConnect',
  165.               name='button1',
  166.               parent=self.panel1,
  167.               pos=wx.Point(24, 312),
  168.               size=wx.Size(75, 24),
  169.               style=0)
  170.         self.button1.Bind(
  171.               wx.EVT_BUTTON,
  172.               self.OnButton1Click,
  173.               id=wxID_FRAME1BUTTON1)

  174.         self.button2 = wx.Button(
  175.               id=wxID_FRAME1BUTTON2,
  176.               label=' OK ',
  177.               name='button2',
  178.               parent=self.panel1,
  179.               pos=wx.Point(120, 312),
  180.               size=wx.Size(75, 24), style=0)

  181.         self.button3 = wx.Button(
  182.               id=wxID_FRAME1BUTTON3,
  183.               label='Cancel',
  184.               name='button3',
  185.               parent=self.panel1,
  186.               pos=wx.Point(216, 312),
  187.               size=wx.Size(75, 24), style=0)
  188.         self.button3.Bind(wx.EVT_BUTTON, self.OnButton3, id=wxID_FRAME1BUTTON3)

  189.     def __init__(self, parent):
  190.         self._init_ctrls(parent)

  191.     def OnFrame1Close(self, event):
  192.         self.Destroy()

  193.     def OnButton3(self, event):
  194.         self.Destroy()

  195.     def OnButton1Click(self, event):
  196.         #myhost=str(self.textCtrl1.GetValue())
  197.         #print myhost
  198.         '''
  199.         connStr="host='localhost',port=3306,user='root',
  200.                         passwd='test',db='python'"
  201.          '''
  202.         
  203.         connStr="host='%s',port=%d,user='%s',passwd='%s',db='%s'"%(
  204.         str(self.textCtrl1.GetValue()),
  205.         int(self.textCtrl2.GetValue()),
  206.         str(self.textCtrl3.GetValue()),
  207.         str(self.textCtrl4.GetValue()),
  208.         str(self.textCtrl5.GetValue()),
  209.         )
  210.         #print connStr
  211.         try:
  212.             myConn=MySQLdb.connect(connStr)
  213.             #myConn.Close()
  214.             dlgOk=wx.MessageDialog(
  215.             None,
  216.             "成功連接數(shù)據(jù)庫",
  217.             caption="Success",
  218.             style=wx.OK|wx.ICON_INFORMATION|wx.STAY_ON_TOP,
  219.             )
  220.             retCode=dlgOk.ShowModal()
  221.             if retCode==wx.ID_OK:
  222.                 dlgOk.Destroy()
  223.         except:
  224.             dlgError=wx.MessageDialog(
  225.             None,
  226.             "連接失敗,確保數(shù)據(jù)庫已開啟并檢查設(shè)置!",
  227.             caption="ERROR",
  228.             style=wx.OK|wx.ICON_ERROR|wx.STAY_ON_TOP,
  229.             )
  230.             retCode=dlgError.ShowModal()
  231.             if retCode==wx.ID_OK:
  232.                 dlgError.Destroy()
  233.         finally:
  234.             myConn.Close()
復(fù)制代碼
主程序Db_App.py,調(diào)用上面的界面代碼文件:
  1. #!/usr/bin/env python
  2. #coding:UTF-8
  3. #MainApp
  4. #filename:Db_App.py
  5. #data:2010-5-22

  6. import wx
  7. import Db_Connect
  8. import MySQLdb

  9. modules ={'Db_Connect': [0, 'Loading Windows', 'Db_Connect.py']}
  10. class App(wx.App):
  11.     #重定向stdOut,stdError到DbApp.log文件
  12.     def __init__(self,redirect=True,filename='DbApp.log'):
  13.         wx.App.__init__(self,redirect,filename)
  14.     def OnInit(self):
  15.         wx.InitAllImageHandlers()
  16.         self.main=Db_Connect.create(None)
  17.         self.main.Show(True)
  18.         self.SetTopWindow(self.main)
  19.         return True
  20.    
  21. def main():
  22.     app=App(redirect=True,filename='DbApp.log')
  23.     app.MainLoop()

  24. if __name__ == '__main__':
  25.     main()
復(fù)制代碼
界面如下:

運(yùn)行結(jié)果:

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2010-05-23 14:29 |只看該作者
暈,try...except 不是這么用的吧,你把 except 抓到的錯(cuò)誤信息打印出來不就知道為啥出錯(cuò)了……

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2010-05-23 18:57 |只看該作者
回樓上  這么用沒什么問題啊

不是try....except結(jié)構(gòu)的問題  

我把連接字符串跟SQL語句字符串弄混了

改好的結(jié)果貼一下吧,把窗口設(shè)計(jì)代碼中的221行到230行改為:
  1. try:
  2.             myConn=MySQLdb.connect(
  3.                                    host=str(self.textCtrl1.GetValue()),
  4.                                    port=int(self.textCtrl2.GetValue()),
  5.                                    user=str(self.textCtrl3.GetValue()),
  6.                                    passwd=str(self.textCtrl4.GetValue()),
  7.                                    db=str(self.textCtrl5.GetValue()),
  8.                                    )
復(fù)制代碼
現(xiàn)在能正確反映是否連接成功了。

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2010-05-23 19:55 |只看該作者
成功了就好啊。

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2010-05-23 22:15 |只看該作者
本帖最后由 jjj137 于 2010-05-24 14:03 編輯
回樓上  這么用沒什么問題啊

不是try....except結(jié)構(gòu)的問題  

我把連接字符串跟SQL語句字符串弄混了:e ...
GOD_Father 發(fā)表于 2010-05-23 18:57



    我是說在調(diào)試程序時(shí)的作用,try...except 里的信息對找出錯(cuò)誤在哪很有用。就算是在成品里,也應(yīng)該把 except 的信息記入 Log 文件,而不僅僅是顯示一個(gè)對話框……

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2010-05-23 23:48 |只看該作者


感謝指教
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP