2014-03-14 4 views
2

Ui_MainWindow는 디자이너와 pyuic에 의해 생성 된 .py 파일입니다. PyQt GUI 요소 텍스트 값을 다른 파일로 전달하고 기본 작업을 수행하고 결과를 반환하고 싶습니다.PyQt GUI 클래스 외부에서 GUI 요소 text()에 액세스

부모 파일

from PyQt4 import QtCore, QtGui 

try: 
    _fromUtf8 = QtCore.QString.fromUtf8 
except AttributeError: 
    _fromUtf8 = lambda s: s 


class Ui_MainWindow(object): 

    def setupUi(self, MainWindow): 
     MainWindow.setObjectName(_fromUtf8("MainWindow")) 
     MainWindow.resize(742, 515) 
     self.centralwidget = QtGui.QWidget(MainWindow) 
     self.centralwidget.setObjectName(_fromUtf8("centralwidget")) 
     self.layoutWidget = QtGui.QWidget(self.centralwidget) 
     self.layoutWidget.setGeometry(QtCore.QRect(70, 30, 601, 331)) 
     self.layoutWidget.setObjectName(_fromUtf8("layoutWidget")) 
     self.gridLayout_2 = QtGui.QGridLayout(self.layoutWidget) 
     self.gridLayout_2.setMargin(0) 
     self.gridLayout_2.setObjectName(_fromUtf8("gridLayout_2")) 
     self.gridLayout = QtGui.QGridLayout() 
     self.gridLayout.setObjectName(_fromUtf8("gridLayout")) 
     self.horizontalLayout = QtGui.QHBoxLayout() 
     self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) 
     self.label = QtGui.QLabel(self.layoutWidget) 
     self.label.setObjectName(_fromUtf8("label")) 
     self.horizontalLayout.addWidget(self.label) 
     self.lineEdit = QtGui.QLineEdit(self.layoutWidget) 
     self.lineEdit.setObjectName(_fromUtf8("lineEdit")) 
     self.horizontalLayout.addWidget(self.lineEdit) 
     self.gridLayout.addLayout(self.horizontalLayout, 0, 0, 1, 1) 
     self.horizontalLayout_2 = QtGui.QHBoxLayout() 
     self.horizontalLayout_2.setObjectName(_fromUtf8("horizontalLayout_2")) 
     self.label_2 = QtGui.QLabel(self.layoutWidget) 
     self.label_2.setObjectName(_fromUtf8("label_2")) 
     self.horizontalLayout_2.addWidget(self.label_2) 
     self.textEdit = QtGui.QTextEdit(self.layoutWidget) 
     self.textEdit.setObjectName(_fromUtf8("textEdit")) 
     self.horizontalLayout_2.addWidget(self.textEdit) 
     self.gridLayout.addLayout(self.horizontalLayout_2, 1, 0, 1, 1) 
     self.horizontalLayout_3 = QtGui.QHBoxLayout() 
     self.horizontalLayout_3.setObjectName(_fromUtf8("horizontalLayout_3")) 
     self.label_3 = QtGui.QLabel(self.layoutWidget) 
     self.label_3.setObjectName(_fromUtf8("label_3")) 
     self.horizontalLayout_3.addWidget(self.label_3) 
     self.lineEdit_2 = QtGui.QLineEdit(self.layoutWidget) 
     self.lineEdit_2.setObjectName(_fromUtf8("lineEdit_2")) 
     self.horizontalLayout_3.addWidget(self.lineEdit_2) 
     self.gridLayout.addLayout(self.horizontalLayout_3, 2, 0, 1, 1) 
     self.gridLayout_2.addLayout(self.gridLayout, 0, 0, 1, 1) 
     self.pushButton = QtGui.QPushButton(self.layoutWidget) 
     self.pushButton.setObjectName(_fromUtf8("pushButton")) 
     self.gridLayout_2.addWidget(self.pushButton, 1, 0, 1, 1) 
     MainWindow.setCentralWidget(self.centralwidget) 
     self.statusbar = QtGui.QStatusBar(MainWindow) 
     self.statusbar.setObjectName(_fromUtf8("statusbar")) 
     MainWindow.setStatusBar(self.statusbar) 


     self.retranslateUi(MainWindow) 

     from textvalues import Valued 
     QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL(_fromUtf8("clicked()")), Valued.callingdata) 
     QtCore.QMetaObject.connectSlotsByName(MainWindow) 

    def retranslateUi(self, MainWindow): 
     MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8)) 
     self.label.setText(QtGui.QApplication.translate("MainWindow", "Title", None, QtGui.QApplication.UnicodeUTF8)) 
     self.label_2.setText(QtGui.QApplication.translate("MainWindow", "Body", None, QtGui.QApplication.UnicodeUTF8)) 
     self.label_3.setText(QtGui.QApplication.translate("MainWindow", "Tag", None, QtGui.QApplication.UnicodeUTF8)) 
     self.pushButton.setText(QtGui.QApplication.translate("MainWindow", "Create", None, QtGui.QApplication.UnicodeUTF8)) 

if __name__ == "__main__": 
    import sys 
    app = QtGui.QApplication(sys.argv) 
    MainWindow = QtGui.QMainWindow() 
    ui = Ui_MainWindow() 
    ui.setupUi(MainWindow) 
    MainWindow.show() 
    callingdata(ui) 
    sys.exit(app.exec_()) 

아동 파일 I는 입력 텍스트 값을 얻으려고 아이 파일에서 ...

from PyQt4 import QtCore, QtGui 
from blog_tool import Ui_MainWindow 

class Valued(QtGui.QMainWindow): 
    def __init__(self, parent=None): 
     QtGui.QWidget.__init__(self, parent) 
     self.ui = Ui_MainWindow() 
     app = self.ui.setupUi(self) 

    def callingdata(): 
     blog_title = app.lineEdit.text() 
     blog_body = app.textEdit.toPlainText() 
     blog_tag = app.lineEdit_2.text() 
     print "Title\n\t%s\nBody\n\t%s\nTag\n\t%s" % (blog_title, blog_body, blog_tag) 

답변

1

귀하의 예제 코드 문제 몇 가지가있다. 주된 문제는 pyuic에 의해 생성 된 GUI 모듈을 수정한다는 것이므로 유혹해서는 안됩니다. 항상 GUI 모듈을 기본 응용 프로그램으로 가져 와서 거기에 모든 추가 코드를 추가하십시오.

다른 문제는 주로 GUI에서 위젯을 제대로 참조하지 않아서 발생합니다. 귀하의 예에서는 모두 사용자가 만든 Ui_MainWindow 개체의 속성이되므로 self.ui을 통해 액세스 할 수 있습니다.

다음과 같은 비 GUI 모듈을 다시 작성하여 함께하는 방법을 보여주었습니다. 하지만 시도하기 전에 GUI 모듈을 재생성해야합니다.

from PyQt4 import QtCore, QtGui 
from blog_tool import Ui_MainWindow 

class Valued(QtGui.QMainWindow): 
    def __init__(self, parent=None): 
     QtGui.QMainWindow.__init__(self, parent) 
     self.ui = Ui_MainWindow() 
     self.ui.setupUi(self) 
     self.ui.pushButton.clicked.connect(self.callingdata) 

    def callingdata(self): 
     blog_title = self.ui.lineEdit.text() 
     blog_body = self.ui.textEdit.toPlainText() 
     blog_tag = self.ui.lineEdit_2.text() 
     print "Title\n\t%s\nBody\n\t%s\nTag\n\t%s" % (
      blog_title, blog_body, blog_tag) 

if __name__ == '__main__': 

    import sys 
    app = QtGui.QApplication(sys.argv) 
    window = Valued() 
    window.show() 
    sys.exit(app.exec_()) 
+0

고마워요! 그것은 효과가있다! – ranjithtenz