【问题标题】:How do I get something from my list to display in the GUI?如何从列表中获取某些内容以显示在 GUI 中?
【发布时间】:2018-11-11 22:24:18
【问题描述】:

我有一个清单:

def submit(self):
    self.l = []

我需要在我的 GUI 中显示列表中的任何内容

    def retranslateUi(self, Form):
    Form.setWindowTitle(_translate("Form", "Math Game", None))
    self.lineEdit.setStatusTip(_translate("Form", "Enter answer here", None))
    self.pushButton.setText(_translate("Form", "SUBMIT", None))
    self.label.setText(_translate("Form", self.l, None))

我得到错误:

        self.label.setText(_translate("Form", self.l, None))
AttributeError: 'Ui_Form' object has no attribute 'l'

我正在尝试创建一个儿童数学游戏(一项大学作业),而列表中的任何内容都必须显示在 GUI 中,我做错了什么?我相信这可能与("Form, self.l, None") 中的括号有关,但我不太确定。

这是完整的代码:

    from PyQt4 import QtCore, QtGui
import random

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s

try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)

class Ui_Form(object):
    #this is backend code
    def submit(self):
        self.l = []
        if self.lineEdit.text == self.l():
            print("Correct!")
        else:
            print("Incorrect!")
        #this is GUI code
    def setupUi(self, Form):
        Form.setObjectName(_fromUtf8("Form"))
        Form.setEnabled(True)
        Form.resize(311, 192)
        Form.setLayoutDirection(QtCore.Qt.LeftToRight)
        Form.setAutoFillBackground(True)
        self.lineEdit = QtGui.QLineEdit(Form)
        self.lineEdit.setGeometry(QtCore.QRect(10, 140, 191, 41))
        self.lineEdit.setAlignment(QtCore.Qt.AlignCenter)
        font = QtGui.QFont()
        font.setFamily(_fromUtf8("Calibri"))
        font.setPointSize(20)
        font.setFamily(_fromUtf8("Calibri"))
        self.lineEdit.setFont(font)
        self.lineEdit.setObjectName(_fromUtf8("lineEdit"))
        self.pushButton = QtGui.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(210, 140, 91, 41))
        self.pushButton.clicked.connect(self.submit)
        font = QtGui.QFont()
        font.setFamily(_fromUtf8("Calibri"))
        font.setPointSize(12)
        self.pushButton.setFont(font)
        self.pushButton.setObjectName(_fromUtf8("pushButton"))
        self.widget = QtGui.QWidget(Form)
        self.widget.setGeometry(QtCore.QRect(10, 10, 291, 121))
        self.widget.setAutoFillBackground(True)
        p = self.widget.palette()
        p.setColor(self.widget.backgroundRole(), QtCore.Qt.white)
        self.widget.setPalette(p)
        self.widget.setObjectName(_fromUtf8("widget"))
        self.label = QtGui.QLabel(self.widget)
        self.label.setGeometry(QtCore.QRect(60, 40, 341, 41))
        font = QtGui.QFont()
        font.setPointSize(24)
        self.label.setFont(font)
        self.label.setLayoutDirection(QtCore.Qt.LeftToRight)
        self.label.setObjectName(_fromUtf8("label"))
        self.widget.raise_()
        self.lineEdit.raise_()
        self.pushButton.raise_()
        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

        #translation of names from output name to edited name
    def retranslateUi(self, Form):
        Form.setWindowTitle(_translate("Form", "Math Game", None))
        self.lineEdit.setStatusTip(_translate("Form", "Enter answer here", None))
        self.pushButton.setText(_translate("Form", "SUBMIT", None))
        self.label.setText(_translate("Form", self.l, None))

【问题讨论】:

  • 什么是l????
  • l 是列表,所以 l = []
  • 正如他们在提供的答案中指出的那样,在您创建变量之前,变量不存在,并且在您的情况下,self.l 是在提交中创建的,因此很明显它会引发该错误。另一方面self.lineEdit.text == self.l()没有意义,首先self.lineEdit.text是一个方法的名称,我认为你想获取存储的文本,所以你应该使用self.lineEdit.text(),另一个问题是self.l正如你所指出的,它是一个列表,所以它是不可调用的,所以self.l() 会抛出另一个错误。

标签: python list user-interface pyqt4 python-3.4


【解决方案1】:

self.l 仅在调用self.submit 时创建(它本身仅由您的按钮的回调调用),因此如果在submit 之前调用retranslateUi,则self.l 将不存在.您应该在其 __init__ 方法中包含从创建对象时预期存在的任何内容,即使该值只是一个占位符,例如 []

【讨论】:

  • 所以我应该将“self.l”变量放在“retranslateUi”中,以便在“提交”按钮之前执行它?
  • @DominicEaston 如果您打算在应用程序运行时再次调用retranslateUi(即通过上下文菜单更改语言),再次将self.l 设置为空会踩踏它之前的值可能不是用户所期望的。如果基本上整个应用程序必须在语言更改时重新启动,这可能是合适的,但否则将它放在在安装过程中会被调用的地方会更有意义,例如self.setupUiself.__init__
猜你喜欢
  • 2017-07-31
  • 1970-01-01
  • 1970-01-01
  • 2015-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-12
  • 1970-01-01
相关资源
最近更新 更多