2014-03-14 35 views
2

Ui_MainWindow外面是由設計師和pyuic生成的.py文件,我想PyQt的GUI元素文本值傳遞到另一個文件,並做一些基本的操作,並返回結果。訪問GUI元素文本()從PyQt的GUI類

父文件

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_()) 

子文件 從子文件我試圖讓輸入文本值...

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