horgan.ant...@gmail.com wrote: > I am busy learning Python and I want to make a simple program that > connects to a database to locate the information of Doctors. Now the as > far as I can see everything works fine, database connects, info gets > displayed, but the buttons don't want to work. Please see code and error > below. > > Any help will be greatly appreciated. > > Error: > > Traceback (most recent call last): > File "C:\Users\Bl@h\Desktop\New INF\CallDoctorLocator.py", line 57, in > <module> > myapp = MyForm() > File "C:\Users\Bl@h\Desktop\New INF\CallDoctorLocator.py", line 29, in > __init__ > QtCore.QObject.connect(self.ui.ButtonUpdate, QtCore.SIGNAL('clicked()' > ), self.UpdateRecords) > AttributeError: 'MyForm' object has no attribute 'UpdateRecords' >>>> > Code: > > #CallDoctorLocator import sys from DoctorLocator import * from PyQt4 > #import QtSql, QtGui > > #Create Connection to the Database def createConnection(): > db = QtSql.QSqlDatabase.addDatabase('QMYSQL') > db.setHostName('localhost') > db.setDatabaseName('healthcare') > db.setUserName('root') > db.setPassword('3364834') > db.open() > print (db.lastError().text()) > return True > > class MyForm(QtGui.QDialog): > def __init__(self, parent=None): > QtGui.QWidget.__init__(self, parent) > QtGui.QWidget.__init__(self, parent) > self.ui = Ui_Dialog() > self.ui.setupUi(self) > self.model = QtSql.QSqlTableModel(self) > self.model.setTable("doctors") > self.model.setEditStrategy(QtSql.QSqlTableModel.OnManualSubmit) > self.model.select() > self.ui.tableView.setModel(self.model) > QtCore.QObject.connect(self.ui.ButtonUpdate, > QtCore.SIGNAL('clicked()' ), self.UpdateRecords) > QtCore.QObject.connect(self.ui.buttonCancel, > QtCore.SIGNAL('clicked()' ), self.CancelChanges) > QtCore.QObject.connect(self.ui.buttonAdd, > QtCore.SIGNAL('clicked()' ), self.AddRecord) > QtCore.QObject.connect(self.ui.buttonDelete, > QtCore.SIGNAL('clicked()' ), self.DeleteRecord) > QtCore.QObject.connect(self.ui.buttonSearch, > QtCore.SIGNAL('clicked()' ), self.SearchRecords) > > > def UpdateRecords(self): > self.model.AddRecord()
The above UpdateRecord() method (also the methods that follow) has to be indented to the same level as the __init__() method. As written it is defined as a standalone function. > > def CancelChanges(self): > self.model.revertAll() > > def UpdateRecords (self): > self.model.insertRow(self.ui.tableView.currentIndex().row()) Once the indentation is fixed: you cannot have two methods with the same name. You have to decide if you want the first or the second UpdateRecords() implementation. > > def DeleteRecords(self): > self.model.removeRow(self.ui.tableView.currentIndex().row()) > self.model.AddRecord() > > def SearchRecords(self): > self.model.setFilter("Name like '" + self.ui.Name.text()+"%'") > > if __name__ == "__main__": > app = QtGui.QApplication(sys.argv) > if not createConnection(): > sys.exit(1) > myapp = MyForm() > myapp.show() > sys.exit(app.exec_()) -- https://mail.python.org/mailman/listinfo/python-list