How to get Buttons to work
Peter Otten
__peter__ at web.de
Sat Apr 22 09:06:07 EDT 2017
horgan.anton5 at 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 at h\Desktop\New INF\CallDoctorLocator.py", line 57, in
> <module>
> myapp = MyForm()
> File "C:\Users\Bl at 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_())
More information about the Python-list
mailing list