Skip to main content
 首页 » 编程设计

python之从 PyQt GUI 类外部访问 GUI 元素 text( )

2025年05月04日25lonelyxmas

Ui_MainWindow 是由 designer 和 pyuic 生成的 .py 文件,我想将 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) 

请您参考如下方法:

您的示例代码有一些问题。主要问题是您正在修改 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_())