2015-03-09 3 views
0

Я уже давно работаю над этой программой. В основном это программа хранения магазина и по какой-то причине, когда я пытаюсь открыть и просмотреть информацию о поставщике, программа вылетает после того, как я ее просмотрю. Консоль просто не позволит мне запускать другие команды.Программа WxPython продолжает сбой консоли

Вот полный код:

#Place imports here 
import wx 
from sqlite3 import * 
#---------------------------------------------------------------------------    
text1='Name:' 
text2='Address:' 
text3='Contact Number:' 
text4='Alternate Number:' 
text5='Email ID:' 
text6='CST Number :' 
text7='VAT Number:' 
global datalist 

#GUI Starts here 

class MainMenu(wx.Frame): 

    def __init__(self,parent,id): 
     wx.Frame.__init__(self,parent,id,'Main Window',size=(500,600)) 
     mainpanel=wx.Panel(self) 
     status=self.CreateStatusBar() 
     wx.Frame.CenterOnScreen(self) 
     mainmenubar=wx.MenuBar() 

     filemenu=wx.Menu() 
     fileitem=filemenu.Append(wx.ID_EXIT,'&Save and Quit','This will quit the application') 
     mainmenubar.Append(filemenu, '&File') 

     usermenu=wx.Menu() 
     useritem1=usermenu.Append(wx.NewId(), '&View User Details', 'This will allow you to see the current user details') 
     useritem2=usermenu.Append(wx.NewId(), '&Change User Details', 'This will change the existing user details') 
     mainmenubar.Append(usermenu, '&User') 

     suppliermenu=wx.Menu() 
     supplieritem1=suppliermenu.Append(wx.NewId(),'&New Supplier','This will allow you to a new Supplier to the database') 
     supplieritem2=suppliermenu.Append(wx.NewId(), '&View Supplier Details', 'This will allow you to view any existing supplier details') 
     supplieritem3=suppliermenu.Append(wx.NewId(), '&Change Supplier Details', 'This will allow you to change the supplier details') 
     mainmenubar.Append(suppliermenu, '&Supplier')   



     self.SetMenuBar(mainmenubar) 
     self.Bind(wx.EVT_MENU,self.ViewUserDetail,useritem1) 
     self.Bind(wx.EVT_MENU,self.ChangeUserDetail,useritem2) 
     self.Bind(wx.EVT_MENU, self.OnQuit, fileitem) 
     self.Bind(wx.EVT_MENU, self.ViewSupplierDetail,supplieritem2) 
     self.Bind(wx.EVT_MENU, self.NewSupplier,supplieritem1) 

    def OnQuit(self, e): 
     self.Close() 
     conn.commit() 
     c.close() 

    def ViewUserDetail(self,e): 
     global datalist 
     datalist=[row for row in c.execute('SELECT * FROM User') ] 

     self.new=ViewUserDetail(parent=None, id=-1) 
     self.new.Show() 


    def ChangeUserDetail(self,e): 
     self.new=ChangeUserDetail(parent=None, id=-1) 
     self.new.Show() 

    def ViewSupplierDetail(self,e): 
     global datalist2 
     datalist2=[row for row in c.execute('SELECT * FROM Supplier') ] 
     self.new=ViewSupplierDetail(parent=None, id=-1) 
     self.new.Show() 

    def NewSupplier(self,e): 
     self.new=NewSupplier(parent=None, id=-1) 
     self.new.Show() 


conn=Connection('E:\Python Software\ShopTest\SystemData.db') 
c=conn.cursor() 
try: 
    c.execute('''CREATE TABLE User 
      (Name, Address, Contact_No, Alternate_No, Email_ID, CST_No, VAT_No, ID Primary Key) ''') 
except OperationalError: 
    pass 

try: 
    c.execute('''CREATE TABLE Supplier 
      (Name, Address, Contact_No, Alternate_No, Email_ID, CST_No, VAT_No, ID Primary Key) ''') 
except OperationalError: 
    pass  





class ChangeUserDetail(wx.MiniFrame): 
      def __init__(self,parent,id): 
       wx.MiniFrame.__init__(self,parent,id,'Change User Details',size=(350,490)) 
       wx.MiniFrame.CenterOnScreen(self) 

       changeuserdetailpanel=wx.Panel(self) 


       sta = wx.StaticText(changeuserdetailpanel, label=text1, pos=(10,9)) 
       stb = wx.StaticText(changeuserdetailpanel, label=text2, pos=(10,89)) 
       stc = wx.StaticText(changeuserdetailpanel, label=text3, pos=(10,169)) 
       std = wx.StaticText(changeuserdetailpanel, label=text4, pos=(10,219)) 
       ste = wx.StaticText(changeuserdetailpanel, label=text5, pos=(10,269)) 
       stf = wx.StaticText(changeuserdetailpanel, label=text6, pos=(10,319)) 
       stg = wx.StaticText(changeuserdetailpanel, label=text7, pos=(10,369)) 


       global tcl1,tcl2,tcl3,tcl4,tcl5,tcl6,tcl7,tcl8,tcl9 

       tcl1 = wx.TextCtrl(changeuserdetailpanel, -1, "", size=(175, 25),pos=(145,7)) 
       tcl2 = wx.TextCtrl(changeuserdetailpanel, -1, "", size=(175, 25),pos=(145,57)) #,style=wx.TE_MULTILINE) 
       tcl3 = wx.TextCtrl(changeuserdetailpanel, -1, "", size=(175, 25),pos=(145,87)) 
       tcl4 = wx.TextCtrl(changeuserdetailpanel, -1, "", size=(175, 25),pos=(145,114)) 
       tcl5 = wx.TextCtrl(changeuserdetailpanel, -1, "", size=(175, 25),pos=(145,167)) 
       tcl6 = wx.TextCtrl(changeuserdetailpanel, -1, "", size=(175, 25),pos=(145,217)) 
       tcl7 = wx.TextCtrl(changeuserdetailpanel, -1, "", size=(175, 25),pos=(145,267)) 
       tcl8 = wx.TextCtrl(changeuserdetailpanel, -1, "", size=(175, 25),pos=(145,317)) 
       tcl9 = wx.TextCtrl(changeuserdetailpanel, -1, "", size=(175, 25),pos=(145,367)) 


       submitbutton=wx.Button(changeuserdetailpanel, label='Submit', pos=(60,410),size=(100,30))    
       cancelbutton=wx.Button(changeuserdetailpanel, label='Cancel', pos=(180,410),size=(100,30)) 
       self.Bind(wx.EVT_BUTTON,self.OnSubmit,submitbutton) 
       self.Bind(wx.EVT_BUTTON,self.OnCancel,cancelbutton) 

      def OnSubmit(self,e): 

       add1=tcl2.GetValue()+ '\n' 
       add2=tcl3.GetValue()+ '\n' 
       add3=tcl4.GetValue() 

       user_name=tcl1.GetValue() 
       user_add=add1+add2+add3 
       user_contact=tcl5.GetValue() 
       user_alt=tcl6.GetValue() 
       user_email=tcl7.GetValue() 
       user_cst=tcl8.GetValue() 
       user_vat=tcl9.GetValue() 

       global user_list 

       user_list=[user_name,user_add,user_contact,user_alt,user_email,user_cst,user_vat,1] 



       c.execute('DELETE FROM User WHERE ID=1') 
       c.execute('INSERT INTO User(Name,Address,Contact_No,  Alternate_No, Email_ID, CST_No, VAT_No, ID) VALUES(?,?,?,?,?,?,?,?)',user_list)    



       self.Close(True) 
      def OnCancel(self,e): 
       self.Close(True) 


class ViewUserDetail(wx.MiniFrame): 

      def __init__(self,parent,id): 
       wx.MiniFrame.__init__(self,parent,id,'View User Details',size=(350,390)) 
       wx.MiniFrame.CenterOnScreen(self) 

       viewuserdetailpanel=wx.Panel(self) 
       closebutton=wx.Button(viewuserdetailpanel, label='Close', pos=(100,310),size=(100,30)) 

       st1=wx.StaticText(viewuserdetailpanel, label=text1, pos=(10,10)) 
       st2=wx.StaticText(viewuserdetailpanel, label=text2, pos=(10,50)) 
       st3=wx.StaticText(viewuserdetailpanel, label=text3, pos=(10,120)) 
       st4=wx.StaticText(viewuserdetailpanel, label=text4, pos=(10,160)) 
       st5=wx.StaticText(viewuserdetailpanel, label=text5, pos=(10,200)) 
       st6=wx.StaticText(viewuserdetailpanel, label=text6, pos=(10,240)) 
       st7=wx.StaticText(viewuserdetailpanel, label=text7, pos=(10,280)) 



       sta=wx.StaticText(viewuserdetailpanel, label=datalist[0][0], pos=(170,10)) 
       stb=wx.StaticText(viewuserdetailpanel, label=datalist[0][1], pos=(170,50))      
       stc=wx.StaticText(viewuserdetailpanel, label=datalist[0][2], pos=(170,120)) 
       std=wx.StaticText(viewuserdetailpanel, label=datalist[0][3], pos=(170,160)) 
       ste=wx.StaticText(viewuserdetailpanel, label=datalist[0][4], pos=(170,200)) 
       stf=wx.StaticText(viewuserdetailpanel, label=datalist[0][5], pos=(170,240)) 
       stg=wx.StaticText(viewuserdetailpanel, label=datalist[0][6], pos=(170,280)) 



       self.Bind(wx.EVT_BUTTON,self.OnClose,closebutton) 



      def OnClose(self,e): 
       self.Close(True) 

class NewSupplier(wx.MiniFrame): 
      def __init__(self,parent,id): 
       wx.MiniFrame.__init__(self,parent,id,'New Supplier',size=(350,490)) 
       wx.MiniFrame.CenterOnScreen(self) 

       newsupplierpanel=wx.Panel(self) 


       sta = wx.StaticText(newsupplierpanel, label=text1, pos=(10,9)) 
       stb = wx.StaticText(newsupplierpanel, label=text2, pos=(10,89)) 
       stc = wx.StaticText(newsupplierpanel, label=text3, pos=(10,169)) 
       std = wx.StaticText(newsupplierpanel, label=text4, pos=(10,219)) 
       ste = wx.StaticText(newsupplierpanel, label=text5, pos=(10,269)) 
       stf = wx.StaticText(newsupplierpanel, label=text6, pos=(10,319)) 
       stg = wx.StaticText(newsupplierpanel, label=text7, pos=(10,369)) 


       global tcl1,tcl2,tcl3,tcl4,tcl5,tcl6,tcl7,tcl8,tcl9 

       tcl1 = wx.TextCtrl(newsupplierpanel, -1, "", size=(175, 25),pos=(145,7)) 
       tcl2 = wx.TextCtrl(newsupplierpanel, -1, "", size=(175, 25),pos=(145,57)) #,style=wx.TE_MULTILINE) 
       tcl3 = wx.TextCtrl(newsupplierpanel, -1, "", size=(175, 25),pos=(145,87)) 
       tcl4 = wx.TextCtrl(newsupplierpanel, -1, "", size=(175, 25),pos=(145,114)) 
       tcl5 = wx.TextCtrl(newsupplierpanel, -1, "", size=(175, 25),pos=(145,167)) 
       tcl6 = wx.TextCtrl(newsupplierpanel, -1, "", size=(175, 25),pos=(145,217)) 
       tcl7 = wx.TextCtrl(newsupplierpanel, -1, "", size=(175, 25),pos=(145,267)) 
       tcl8 = wx.TextCtrl(newsupplierpanel, -1, "", size=(175, 25),pos=(145,317)) 
       tcl9 = wx.TextCtrl(newsupplierpanel, -1, "", size=(175, 25),pos=(145,367)) 


       submitbutton=wx.Button(newsupplierpanel, label='Submit', pos=(60,410),size=(100,30))    
       cancelbutton=wx.Button(newsupplierpanel, label='Cancel', pos=(180,410),size=(100,30)) 
       self.Bind(wx.EVT_BUTTON,self.OnSubmit,submitbutton) 
       self.Bind(wx.EVT_BUTTON,self.OnCancel,cancelbutton) 

      def OnSubmit(self,e): 

       add1=tcl2.GetValue()+ '\n' 
       add2=tcl3.GetValue()+ '\n' 
       add3=tcl4.GetValue() 

       supplier_name=tcl1.GetValue() 
       supplier_add=add1+add2+add3 
       supplier_contact=tcl5.GetValue() 
       supplier_alt=tcl6.GetValue() 
       supplier_email=tcl7.GetValue() 
       supplier_cst=tcl8.GetValue() 
       supplier_vat=tcl9.GetValue() 

       global supplierlist 

       supplier_list= [supplier_name,supplier_add,supplier_contact,supplier_alt,supplier_email,supplier_cst,supplier_vat] 



       #c.execute('DELETE FROM User WHERE ID=1') 
       c.execute('INSERT INTO Supplier(Name,Address,Contact_No,  Alternate_No, Email_ID, CST_No, VAT_No, ID) VALUES(?,?,?,?,?,?,?,?)',supplier_list)    



       self.Close(True) 
      def OnCancel(self,e): 
       self.Close(True) 


class ViewSupplierDetail(wx.MiniFrame): 

      def __init__(self,parent,id): 


       viewsupplierbox=wx.SingleChoiceDialog(None, 'Choose Supplier', 'View Supplier Details', datalist2[0][0]) 
       if viewsupplierbox.ShowModal()==wx.ID_OK: 
        answer=viewsupplierbox.GetStringSelection() 



        wx.MiniFrame.__init__(self,parent,id,'View Supplier Details',size=(320,350)) 
        wx.MiniFrame.CenterOnScreen(self) 
        viewsupplierdetailpanel=wx.Panel(self) 


        st1=wx.StaticText(viewsupplierdetailpanel, label=text1, pos=(10,10)) 
        st2=wx.StaticText(viewsupplierdetailpanel, label=text2, pos=(10,50)) 
        st3=wx.StaticText(viewsupplierdetailpanel, label=text3, pos=(10,90)) 
        st4=wx.StaticText(viewsupplierdetailpanel, label=text4, pos=(10,130)) 
        st5=wx.StaticText(viewsupplierdetailpanel, label=text5, pos=(10,170)) 
        st6=wx.StaticText(viewsupplierdetailpanel, label=text6, pos=(10,210)) 
        st7=wx.StaticText(viewsupplierdetailpanel, label=text7, pos=(10,250)) 

        closebutton=wx.Button(viewsupplierdetailpanel, label='Ok', pos=(110,270),size=(90,30))    

        self.Bind(wx.EVT_BUTTON,self.OnClose,closebutton) 


      def OnClose(self,e): 

       self.Close(True) 

if __name__=='__main__': 
    app=wx.App() 
    frame=MainMenu(parent=None,id=-1) 
    frame.Show() 
    app.MainLoop() 

Порция дает мне неприятности это: класс ViewSupplierDetail (wx.MiniFrame):

  def __init__(self,parent,id): 


       viewsupplierbox=wx.SingleChoiceDialog(None, 'Choose Supplier', 'View Supplier Details', datalist2[0][0]) 
       if viewsupplierbox.ShowModal()==wx.ID_OK: 
        answer=viewsupplierbox.GetStringSelection() 



        wx.MiniFrame.__init__(self,parent,id,'View Supplier Details',size=(320,350)) 
        wx.MiniFrame.CenterOnScreen(self) 
        viewsupplierdetailpanel=wx.Panel(self) 


        st1=wx.StaticText(viewsupplierdetailpanel, label=text1, pos=(10,10)) 
        st2=wx.StaticText(viewsupplierdetailpanel, label=text2, pos=(10,50)) 
        st3=wx.StaticText(viewsupplierdetailpanel, label=text3, pos=(10,90)) 
        st4=wx.StaticText(viewsupplierdetailpanel, label=text4, pos=(10,130)) 
        st5=wx.StaticText(viewsupplierdetailpanel, label=text5, pos=(10,170)) 
        st6=wx.StaticText(viewsupplierdetailpanel, label=text6, pos=(10,210)) 
        st7=wx.StaticText(viewsupplierdetailpanel, label=text7, pos=(10,250)) 

        closebutton=wx.Button(viewsupplierdetailpanel, label='Ok', pos=(110,270),size=(90,30))    

        self.Bind(wx.EVT_BUTTON,self.OnClose,closebutton) 


      def OnClose(self,e): 

       self.Close(True) 

Любые идеи?

+0

Любые ошибки в журнале? – radimpe

+0

Нет. Никто. Я даже пытался запустить его через консоль python. Обычно я работаю в Canopy. – freeribosome

+0

«Сбой» не является описанием проблемы - что именно происходит? Пожалуйста, задайте только один вопрос в одном сообщении. –

ответ

0

Немного поиграв с этим, я предполагаю, что соединение с SQLite никогда не закрывается, что может случиться. Вы действительно должны поместить код подключения в свой основной класс, а затем передать объект соединения другим классам при их создании. Затем каждый из других классов может создавать объект-курсор для использования для своих запросов, вставок, выбора и т. Д. Когда вы закрываете другие фреймы, вы можете очищать свои курсоры. Затем, когда вы закроете свой класс MainMenu, вы можете закрыть соединение с базой данных, и он должен вернуться правильно.

Смежные вопросы