2017-12-25 7 views
0

간단한 라인 입력과 누름 버튼이있는 Qt Designer를 사용하여 UI를 만들었습니다. 내가 파이썬 변수에서 편집 라인의 입력을 받고 있지만 오류가 날 던지고있다. 내가 파이썬 프로그램을 실행하면AttributeError : 'bool'객체에 'le'속성이 없습니다 - pyqt - 파이썬 변수에 텍스트 가져 오기

self.le = QtGui.QLineEdit(self.centralwidget) 
self.le.setObjectName(_fromUtf8("le")) 

, 나는이 오류가 :

Traceback (most recent call last): 
    File "main.py", line 20, in functioni 
    cur.execute("INSERT INTO Name (Name) VALUES (?)", self.le.displayText()) 
AttributeError: 'bool' object has no attribute 'le' 

이 질문이있을 수 있습니다

from PyQt4 import QtGui 
import sys 
import prog 
import MySQLdb 

class ExampleApp(QtGui.QMainWindow, prog.Ui_Program): 
    def __init__(self, parent=None): 
     super(ExampleApp, self).__init__(parent) 
     self.setupUi(self) 
     self.pushButton.clicked.connect(functioni) 

def functioni (self): 
    db = MySQLdb.connect(host="localhost", 
        user="root",  
        passwd="*****",  
        db="testpy") 

    cur = db.cursor() 

    cur.execute("INSERT INTO Name (Name) VALUES (?)", self.le.text()) #self.le.text() is giving me trouble... 

    db.commit() 
    cur.close() 
    db.close() 


def main(): 
    app = QtGui.QApplication(sys.argv) 
    form = ExampleApp() 
    form.show() 
    app.exec_() 

if __name__ == '__main__': 
    main() 

내 UI 코드이 있습니다 이 내 파이썬 코드 이전에 물어 보았지만 모든 것을 시도했지만 효과가 없습니다! 나는 여기에 bool이 무엇인지 알 수 없다. 솔루션은 사소한 일이지만 누군가 내 실수를 지적 할 수 있으면 감사히 생각합니다. 고맙습니다. 함수 자체가 클래스 들여 쓰기 (따라서,이 클래스의 방법이어야한다)에있을 또는를 받아야으로,

# -*- coding: utf-8 -*- 

# Form implementation generated from reading ui file 'prog.ui' 
# 
# Created by: PyQt4 UI code generator 4.11.4 
# 
# WARNING! All changes made in this file will be lost! 

from PyQt4 import QtCore, QtGui 

try: 
    _fromUtf8 = QtCore.QString.fromUtf8 
except AttributeError: 
    def _fromUtf8(s): 
     return s 

try: 
    _encoding = QtGui.QApplication.UnicodeUTF8 
    def _translate(context, text, disambig): 
     return QtGui.QApplication.translate(context, text, disambig, _encoding) 
except AttributeError: 
    def _translate(context, text, disambig): 
     return QtGui.QApplication.translate(context, text, disambig) 

class Ui_Program(object): 
    def setupUi(self, Program): 
     Program.setObjectName(_fromUtf8("Program")) 
     Program.resize(351, 138) 
     Program.setLayoutDirection(QtCore.Qt.LeftToRight) 
     self.centralwidget = QtGui.QWidget(Program) 
     self.centralwidget.setObjectName(_fromUtf8("centralwidget")) 
     self.formLayout = QtGui.QFormLayout(self.centralwidget) 
     self.formLayout.setObjectName(_fromUtf8("formLayout")) 
     self.label = QtGui.QLabel(self.centralwidget) 
     self.label.setObjectName(_fromUtf8("label")) 
     self.formLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.label) 
     self.le = QtGui.QLineEdit(self.centralwidget) 
     self.le.setObjectName(_fromUtf8("le")) 
     self.formLayout.setWidget(0, QtGui.QFormLayout.FieldRole, self.le) 
     self.pushButton = QtGui.QPushButton(self.centralwidget) 
     self.pushButton.setObjectName(_fromUtf8("pushButton")) 
     self.formLayout.setWidget(1, QtGui.QFormLayout.FieldRole, self.pushButton) 
     Program.setCentralWidget(self.centralwidget) 
     self.menubar = QtGui.QMenuBar(Program) 
     self.menubar.setGeometry(QtCore.QRect(0, 0, 351, 25)) 
     self.menubar.setObjectName(_fromUtf8("menubar")) 
     self.menuSubmit = QtGui.QMenu(self.menubar) 
     self.menuSubmit.setObjectName(_fromUtf8("menuSubmit")) 
     Program.setMenuBar(self.menubar) 
     self.statusbar = QtGui.QStatusBar(Program) 
     self.statusbar.setObjectName(_fromUtf8("statusbar")) 
     Program.setStatusBar(self.statusbar) 
     self.toolBar = QtGui.QToolBar(Program) 
     self.toolBar.setObjectName(_fromUtf8("toolBar")) 
     Program.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar) 
     self.actionSubmit = QtGui.QAction(Program) 
     self.actionSubmit.setObjectName(_fromUtf8("actionSubmit")) 
     self.menuSubmit.addAction(self.actionSubmit) 
     self.menubar.addAction(self.menuSubmit.menuAction()) 

     self.retranslateUi(Program) 
     QtCore.QMetaObject.connectSlotsByName(Program) 

    def retranslateUi(self, Program): 
     Program.setWindowTitle(_translate("Program", "Program", None)) 
     self.label.setText(_translate("Program", "Name", None)) 
     self.pushButton.setText(_translate("Program", "Submit", None)) 
     self.menuSubmit.setTitle(_translate("Program", "Submit", None)) 
     self.toolBar.setWindowTitle(_translate("Program", "toolBar", None)) 
     self.actionSubmit.setText(_translate("Program", "Submit", None)) 
+0

당신은 내가 클래스 멤버 함수 나 전역 함수 당신이 functioni 원하는 무엇을 물어 trying.Can있다 : 당신은 하나 개의 매개 변수가있는 경우, 단일 값 터플은 괄호를 닫기 전에 쉼표를 추가하여 얻을 수 있습니다? 당신이 인자로 함수에 자기를 넘겨주고 함수가 클래스 외부에있다. –

답변

0

당신은 "자기"인수를 오용하고 있습니다 : 여기

내 전체 UI 코드 인스턴스를 인수로 사용합니다.

코드에서 functioni은 신호 인수 만받습니다 (QPushButtons를 포함한 모든 버튼에는 검사 된 인수가 있음). 즉, functioniFalse으로 호출하고 (클릭 후 QPushButton의 체크 상태), 실제로는 이 bool 변수가됩니다. self은 파이썬에서의 규칙 일 뿐이며 실제로는 일반적인 위치 인수입니다. 원하는대로 호출 할 수 있습니다.

문제를 해결하려면 올바른 들여 쓰기를 추가하고 신호 연결에 self.functioni을 호출하여 functioni 함수를 클래스 메서드로 만드는 것으로 충분합니다.

self.pushButton.clicked.connect(lambda checked: functioni(self.le.text()) 
    self.pushButton.clicked.connect(lambda checked: functioni(self)) 



관련없는,하지만 중요한 : 어떤 이유로, 당신은 클래스 외부의 기능을 중단해야하는 경우 , 당신은 인수로 텍스트 또는 클래스의 인스턴스를 추가 할 수 있습니다 중 . sqlite에 대한 두 번째 execute 인수는 반복 가능해야합니다 (튜플, 목록 등).

cur.execute("INSERT INTO Name (Name) VALUES (?)", (self.le.text(),)) 
+0

또한 나의 경우에는 ... VALUES (% s) "... 대신 ... –

+0

을 사용해야한다. 어쨌든 작동해야한다. 물음표 (더 나은 퍼센트 기호보다 안전합니다.) – musicamante

+0

나는 (?) 시도했지만 SQL synatx 오류를 계속했다. –

관련 문제