2013-07-28 1 views
1

버튼을 클릭 할 때 함수를 실행하는 간단한 programm (QtDesigner에서)을 만들고이 함수의 값을 LineEdit에 표시하고 싶습니다. 그리고 여기 내 코드입니다 :PyQt. 함수 값을 lineEdit로 변환하는 방법?

class MyForma1(object): 
    def AddWidgets1(self, Form): 
     Form.setObjectName(_fromUtf8("Form")) 
     Form.resize(613, 545) 
     self.pushButton = QtGui.QPushButton(Form) 
     self.pushButton.setGeometry(QtCore.QRect(244, 352, 111, 51)) 
     self.pushButton.setObjectName(_fromUtf8("pushButton")) 
     self.lineEdit = QtGui.QLineEdit(Form) 
     self.lineEdit.setGeometry(QtCore.QRect(242, 290, 111, 20)) 
     self.lineEdit.setObjectName(_fromUtf8("lineEdit")) 
     self.retranslateUi(Form) 

     QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL(_fromUtf8("clicked()")), Form.changeText) 

    def retranslateUi(self, Form): 
     self.pushButton.setText(_translate("Form", "Click me", None)) 
     self.lineEdit.setText(_translate("Form", "functionvalue", None)) 

class MyForma2(QtGui.QDialog, MyForma1): 
    def __init__(self, z11=0): 
     QtGui.QDialog.__init__(self) 
     self.AddWidgets1(self) 
     self.z = z11 

    def myfunc1(self): 
     self.z+=1 

    def changeText(self): 
     self.myfunc1() 
     self.lineEdit.setText(str(self.z)) 

if __name__ == "__main__": 
    import sys 
    app = QtGui.QApplication(sys.argv) 
    Forma = MyForma2() 
    Forma.show() 
    sys.exit(app.exec_()) 

사실, 그것은 잘 작동하지만 내가 그것을 완료하는 방식처럼 해달라고, 내가 더 절묘한 만들고 싶어. 여기에서 문제는 버튼이 함수와 값 변환 을 함께 "실행"합니다.입니다. 그리고 단추가 함수 만 실행하면 더 좋을 것이라고 생각합니다.이 함수의 값을 LineEdit 에 별도로 단추의으로 변환하는 것이 있습니다. 예를 들어, 지속적으로 모니터링해야하는 함수 값이 버튼뿐만 아니라 다른 이벤트 (예 : COM 포트에서 들어오는 신호)에 의해 영향을받을 수있는 상황이있을 수 있습니다. 이 경우 버튼을 누를 때뿐만 아니라 기능이 변경 될 때마다 신호를 내보내는 것이 좋습니다.

+0

질문은 무엇을 호출 할 수 있습니다 값을 수동으로 변경하려면? 신호/슬롯 메커니즘을 이해하는 것처럼 보이므로 접근 방법을 알 수 있습니다! 클래스의 변수 ('self.z')를 업데이트하는 함수를 만들고 함수의 끝에서 lineedit를 업데이트하는 함수를 호출하는 사용자 정의 신호를 내 보냅니다. – Ecno92

답변

1

체크 아웃이 예 :이 예에서

#!/usr/bin/env python 
#-*- coding:utf-8 -*- 

#--------- 
# IMPORT 
#--------- 
from PyQt4 import QtGui, QtCore 

#--------- 
# MAIN 
#--------- 
class MyWindow(QtGui.QWidget): 
    valueChanged = QtCore.pyqtSignal(int) 

    def __init__(self, parent=None): 
     super(MyWindow, self).__init__(parent) 

     self.value = 0 

     self.pushButtonAdd = QtGui.QPushButton(self) 
     self.pushButtonAdd.setText("Add!") 
     self.pushButtonAdd.clicked.connect(self.on_pushButtonAdd_clicked) 

     self.pushButtonSubtract = QtGui.QPushButton(self) 
     self.pushButtonSubtract.setText("Subtract!") 
     self.pushButtonSubtract.clicked.connect(self.on_pushButtonSubtract_clicked) 

     self.lineEditValue = QtGui.QLineEdit(self) 
     self.lineEditValue.setText(str(self.value)) 

     self.layoutVertical = QtGui.QVBoxLayout(self) 
     self.layoutVertical.addWidget(self.pushButtonAdd) 
     self.layoutVertical.addWidget(self.pushButtonSubtract) 
     self.layoutVertical.addWidget(self.lineEditValue) 

    @QtCore.pyqtSlot() 
    def on_pushButtonAdd_clicked(self): 
     self.valueChanged.emit(1) 

    @QtCore.pyqtSlot() 
    def on_pushButtonSubtract_clicked(self): 
     self.valueChanged.emit(-1) 

    def setValue(self, value): 
     self.value += value 
     self.lineEditValue.setText(str(self.value)) 

if __name__ == "__main__": 
    import sys 

    app = QtGui.QApplication(sys.argv) 
    app.setApplicationName('MyWindow') 

    main = MyWindow() 
    main.resize(333, 111) 
    main.valueChanged.connect(main.setValue) 
    main.show() 

    sys.exit(app.exec_()) 

, 당신은 main.setValue(34)

관련 문제