【问题标题】:How do i Acess Items that i created with Qt Designer?如何访问使用 Qt Designer 创建的项目?
【发布时间】:2023-01-31 18:15:19
【问题描述】:

对于许多人来说,这可能是一个简单的问题,但我仍然难以访问我在 QT Designer 中创建的项目。

我使用 QT Designer 创建了一个简单的 GUI,它显示了一个 16x5 的表格,并将 .ui 转换为 .py 文件。

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(686, 539)
        self.widget = QtWidgets.QWidget(Form)
        self.widget.setGeometry(QtCore.QRect(10, 60, 258, 223))
        self.widget.setObjectName("widget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.widget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.tableWidget = QtWidgets.QTableWidget(self.widget)
        self.tableWidget.setObjectName("tableWidget")
        self.tableWidget.setColumnCount(4)
        self.tableWidget.setRowCount(4)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setVerticalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setVerticalHeaderItem(1, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setVerticalHeaderItem(2, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setVerticalHeaderItem(3, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(1, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(2, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(3, item)
        self.verticalLayout.addWidget(self.tableWidget)
        self.pushButton = QtWidgets.QPushButton(self.widget)
        self.pushButton.setObjectName("pushButton")
        self.verticalLayout.addWidget(self.pushButton)

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        item = self.tableWidget.verticalHeaderItem(0)
        item.setText(_translate("Form", "1"))
        item = self.tableWidget.verticalHeaderItem(1)
        item.setText(_translate("Form", "2"))
        item = self.tableWidget.verticalHeaderItem(2)
        item.setText(_translate("Form", "3"))
        item = self.tableWidget.verticalHeaderItem(3)
        item.setText(_translate("Form", "4"))
        item = self.tableWidget.horizontalHeaderItem(0)
        item.setText(_translate("Form", "A"))
        item = self.tableWidget.horizontalHeaderItem(1)
        item.setText(_translate("Form", "B"))
        item = self.tableWidget.horizontalHeaderItem(2)
        item.setText(_translate("Form", "C"))
        item = self.tableWidget.horizontalHeaderItem(3)
        item.setText(_translate("Form", "D"))

起初我尝试在生成的文件中编码,但感谢用户:musicamante,他对我的最后一个问题发表了评论,我放弃了这个想法。

现在我只是像那样加载文件。


from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QTableWidgetItem
import sys
from GUI import Ui_Form

class ExampleApp(QtWidgets.QWidget, Ui_Form):
    def __init__(self, parent=None):
        super(ExampleApp, self).__init__(parent)
        self.setupUi(self)

def update_now():
    #Store some Measurement Values
    WriteDatatoTable()

def WriteDatatoTable():
    **Test=Ui_Form()**
    **Test.tableWidget.setItem(0,1, QTableWidgetItem("123")**



def main():
    app = QApplication(sys.argv)
    form = ExampleApp()              
    timer=QtCore.QTimer()
    timer.timeout.connect(update_now)
    timer.start(1000)
    
    form.show()
    app.exec_()

if __name__ == '__main__':
    main()

我只想将数据打印到我的 GUI 表中。但是当我尝试我的方法时,我得到了 Ui_Form 没有名为“tableWidget”的属性的错误。除了知道为什么会出现该错误外,遗憾的是我不知道如何解决该问题。还是我的想法完全错了?

我希望任何人都可以提供帮助。

【问题讨论】:

    标签: python user-interface pyqt pyqt5 qt-designer


    【解决方案1】:

    您应该使您的函数成为 ExampleApp 类的方法,并使其成为该类内部“UI 类”的连接。这在这里应该工作。也许这不是最好的方法,但我会这样做。我希望它能帮助你。

    from PyQt5 import QtCore, QtGui, QtWidgets
    from PyQt5.QtWidgets import QApplication, QTableWidgetItem
    import sys
    from ZoneDeNonDroit import Ui_Form
    
    
    class ExampleApp(QtWidgets.QWidget, Ui_Form):
        def __init__(self, parent=None):
            super(ExampleApp, self).__init__(parent)
            self.setupUi(self)
            self.timer = QtCore.QTimer()
            self.timer.start(1000)
    
        def connect(self):
            self.timer.timeout.connect(self.update_now)
    
        def update_now(self):
            WriteDatatoTable()
    
    
    def WriteDatatoTable():
        Test = Ui_Form()
        Test.tableWidget.setItem(0, 1, QTableWidgetItem("123"))
    
    
    def main():
        app = QApplication(sys.argv)
        form = ExampleApp()
        form.show()
        app.exec_()
    
    
    if __name__ == '__main__':
        main()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多