2014-01-14 2 views
0

У меня есть форма с двумя виджетами. Один LineEdit (имя: lineEdit) и Button (имя pushButton_2).Доступ к тексту QT в строкеEdit

Ниже мой код:

 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_Form(object): 
    def setupUi(self, Form): 
     Form.setObjectName(_fromUtf8("Form")) 
     Form.resize(400, 300) 
     self.pushButton_2 = QtGui.QPushButton(Form) 
     self.pushButton_2.setGeometry(QtCore.QRect(140, 70, 75, 23)) 
     self.pushButton_2.setObjectName(_fromUtf8("pushButton_2")) 
     self.lineEdit = QtGui.QLineEdit(Form) 
     self.lineEdit.setGeometry(QtCore.QRect(130, 10, 113, 20)) 
     self.lineEdit.setObjectName(_fromUtf8("lineEdit")) 

     self.retranslateUi(Form) 
     QtCore.QObject.connect(self.pushButton_2, QtCore.SIGNAL(_fromUtf8("clicked()")), myFunc) 
     QtCore.QMetaObject.connectSlotsByName(Form) 

    def retranslateUi(self, Form): 
     Form.setWindowTitle(_translate("Form", "Form", None)) 
     self.pushButton_2.setText(_translate("Form", "Press me!", None)) 


if __name__ == "__main__": 
    import sys 
    app = QtGui.QApplication(sys.argv) 
    Form = QtGui.QWidget() 
    ui = Ui_Form() 
    ui.setupUi(Form) 
    Form.show() 
    sys.exit(app.exec_()) 

Я хочу сделать функцию, так что я нажать кнопку она получит значение текста формы LineEdit widget.Like

def myfunc(): 
    text=Get_Value_From_Widget() 
    ........... 
    return text 

Как я могу это сделать?

Спасибо заранее.

ответ

1

В качестве альтернативы вы можете запрограммировать этот простой виджет вручную, без использования QtDesigner. Сначала это может быть немного сложнее, но в конечном итоге это будет стоить того, поскольку вы получите гораздо более тонкий контроль над тем, что вы делаете.

Вот простой пример того, что вы можете сделать.

from PyQt4 import QtGui, QtCore 

class CustomWidget(QtGui.QWidget): 

    def __init__(self, parent=None): 
     super(QtGui.QWidget, self).__init__(parent) 
     layout = QtGui.QVBoxLayout(self) 

     self.lineEdit1 = QtGui.QLineEdit(self) 
     layout.addWidget(self.lineEdit1) 
     self.pushButton = QtGui.QPushButton("line1 -> line2", self) 
     self.pushButton.clicked.connect(self.onClick) 
     layout.addWidget(self.pushButton) 
     self.lineEdit2 = QtGui.QLineEdit(self) 
     layout.addWidget(self.lineEdit2) 

    def onClick(self): 
     self.lineEdit2.setText(self.lineEdit1.text()) 


if __name__ == "__main__": 
    import sys 
    app = QtGui.QApplication(sys.argv) 
    widget = CustomWidget() 
    widget.show() 
    sys.exit(app.exec_()) 
+0

Я получил его. Спасибо – ledien

0

Прежде всего, я думаю, вы должны посмотреть документацию Qt на механизм SIGNAL/SLOT.

Во всяком случае, ваша функция должна быть определена в Ui_Form класс, как

def myFunc(self): 
    text=self.lineEdit.text() 
    return text 

Пожалуйста, обратите внимание, что код чувствителен к регистру (как от имени методов/функций), так что в вашем случае myFunc не то же самое метод как myfunc

+0

Я попытался добавить функцию в класс Ui_Form с двумя разными типами def myFunc (self, Form): и def myFunc (self):. Но я получаю ошибку «AttributeError: объект« Ui_Form »не имеет атрибута« myFunc »« – ledien

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