2017-12-25 15 views
0

Qt Designerを使用してUIを作成しましたが、単純なライン入力とプッシュボタンがあります。私は行の入力をpython変数で編集しようとしましたが、それは私にエラーを投げかけています。 これは私のpythonのコードです:AttributeError: 'bool'オブジェクトに属性 'le'がありません - pyqt - Python変数にテキストを取得する

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コードはこれを持っている:

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

私はPythonのプログラムを実行すると、私はこのエラーを取得:

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' 

この質問は持っているかもしれません前に尋ねられましたが、私はすべてを試しました、それは動作しません!私はここでブールが何かを把握することはできません。解決策は簡単かもしれませんが、誰かが私の誤りを指摘できるなら、私はそれを感謝します。ありがとうございました。ここで

は私の完全なUIコードです:

# -*- 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されています?あなたはパラメータを1つだけ持っている場合は、単一の値のタプルは括弧を閉じる前にコンマを追加することによって得ることができますか?あなたは引数として関数に自己を渡しているので、関数はクラスの外にあります –

答えて

0

機能自体はクラスのインデントであること(したがって、それはクラスのメソッドでなければなりません)、または受け取るべきであるとしてあなたは、「自己」の引数を悪用していますインスタンスを引数として指定します。

コードでは、functioniはsignal引数(QPushButtonsを含むすべてのボタンにチェックされた引数があります)だけを受け取ります。つまり、functioniを引数としてFalse(QPushButtonのクリック後の状態)と呼び、selfは実際にはbool変数になります。 selfはPythonの単なる慣習であり、実際には通常の位置引数であることを覚えておいてください。

問題を解決するには、正しいインデントを追加して(シグナル接続にself.functioniを呼び出して)functioniの機能をクラスメソッドにするだけで十分です。 何らかの理由で、あなたはクラスの外の機能を残しておく必要があり、場合は、引数として、テキストまたはクラスのインスタンスを追加することができ、次のいずれか

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



無関係、しかし重要な。 sqliteの2番目のexecute引数は、iterable(tuple、listなど)でなければならないことに注意してください。

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

また、私の場合、私は... VALUES(%s) "...の代わりに使用しなければなりませんか? –

+0

それはとにかく動作するはずです – musicamante

+0

私は(?)しようとしましたが、SQL synatxエラーが表示され続けました。 –

関連する問題