2015-07-02 3 views
0

У меня есть ошибка, когда я вставляю данные от QLineEdit. Вы можете видеть в методе button1Clicked(self), я не могу выполнить:Как вставить текст в QLineEdit в PyQt?

q.exec_("insert into COMPANY (id, name, age, address, salary) values (self.IDEdit.text(),self.NameEdit.text(),self.AgeEdit.text(),self.AddressEdit.text(),self.SalaryEdit.text())") 

Но я могу получить текст, когда я использую print(self.IDEdit.text()).

Я не понимаю, почему. Я надеюсь, что кто-то может мне помочь.

#-*- coding: utf-8 -*- 
import sys 
import sqlite3 
from PyQt4 import QtCore, QtGui 
from PyQt4.QtSql import * 

def createConnection(): 
    db=QSqlDatabase.addDatabase("QSQLITE") 
    db.setDatabaseName("test.db") 
    db.open() 

def createTable(): 
    q=QSqlQuery() # 
    q.exec_("create table if not exists COMPANY (ID INT PRIMARY KEY NOT NULL,NAME TEXT NOT NULL,AGE INT NOT NULL,ADDRESS CHAR(50),SALARY REAL)") 
    q.exec_("commit") 

class Model(QSqlTableModel): 
    def __init__(self,parent): 
     QSqlTableModel.__init__(self,parent) 
     self.setTable("COMPANY") 
     self.select() 
     self.setEditStrategy(QSqlTableModel.OnManualSubmit) 

class TestWidget(QtGui.QWidget): 
    def __init__(self): 
     QtGui.QWidget.__init__(self) 

     vbox=QtGui.QVBoxLayout(self) 
     self.view=QtGui.QTableView() 
     self.model=Model(self.view) 
     self.view.setModel(self.model) 
     vbox.addWidget(self.view) 

     self.resize(900,300) 

     self.component() 


    def component(self): 
     ID = QtGui.QLabel('ID :', self) 
     ID.move(30, 180) 

     self.IDEdit = QtGui.QLineEdit(self) 
     self.IDEdit.move(70, 180) 
     self.IDEdit.setFocus() 

     Name = QtGui.QLabel('NAME :', self) 
     Name.move(180, 180) 
     self.NameEdit = QtGui.QLineEdit(self) 
     self.NameEdit.move(230, 180) 

     Age = QtGui.QLabel('AGE :', self) 
     Age.move(340, 180) 
     self.AgeEdit = QtGui.QLineEdit(self) 
     self.AgeEdit.move(380, 180) 

     Address = QtGui.QLabel('ADDRESS :', self) 
     Address.move(500, 180) 
     self.AddressEdit = QtGui.QLineEdit(self) 
     self.AddressEdit.move(560, 180) 

     Salary = QtGui.QLabel('SALARY :', self) 
     Salary.move(670, 180) 
     self.SalaryEdit = QtGui.QLineEdit(self) 
     self.SalaryEdit.move(730, 180) 

     button1= QtGui.QPushButton('submit', self) 
     button1.setGeometry(730, 240, 70, 30) 
     self.connect(button1, QtCore.SIGNAL('clicked()'),self.button1Clicked) 




    def button1Clicked(self): 
     q=QSqlQuery() 
     q.exec_("insert into COMPANY (id, name, age, address, salary) values (self.IDEdit.text(), self.NameEdit.text(),self.AgeEdit.text(),self.AddressEdit.text(),self.SalaryEdit.text())") 

     q.exec_("commit") 

     print (self.IDEdit.text()) 
     print (self.NameEdit.text()) 
     print (self.AgeEdit.text()) 
     print (self.AddressEdit.text()) 
     print (self.SalaryEdit.text()) 


if __name__=="__main__": 
    app=QtGui.QApplication(sys.argv) 
    createConnection() 
    createTable() 
    w=TestWidget() 
    w.show() 
    sys.exit(app.exec_()) 

ответ

1

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

q.exec_("insert into COMPANY (id, \ 
           name, \ 
           age, \ 
           address, \ 
           salary) values (\ 
           '{0}', \ 
           '{1}', \ 
           '{2}', \ 
           '{3}', \ 
           '{4}')".format(self.IDEdit.text(), 
              self.NameEdit.text(), 
              self.AgeEdit.text(), 
              self.AddressEdit.text(), 
              self.SalaryEdit.text())) 

Это выглядит немного сложнее, но это просто simple string formatting.

+0

Спасибо. Я делаю то, что вы сказали, но показывает «недействительный синтаксис» –

+0

Теперь он может компилироваться, но он по-прежнему не вставляет данные в sqlite. –

+0

Любые сообщения об ошибках? Трудно сказать, не запуская его сам. Возможно, имена столбцов, например. 'id', чувствительны к регистру. – 101

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