如何使用迭代(仅显示最后一个值)从QLineEdit追加列表

时间:2018-02-09 05:10:37

标签: python-3.x pyqt5

我认为我在这个问题上缺少一个基本的想法和结构。

我使用QTDesigner 4为pyqt5设计了一个UI。在此UI中,用户将在名为self.elaexpect的QLineEdit小部件中输入一个数字,并将第二个数字输入到名为self.elaact的第二个QLineEdit小部件中。然后,用户将单击名为addnew的按钮。然后该按钮将信息发送到同一Ui窗口(MainWindow)中的QTableWidget。这一切都按预期工作。我的麻烦在于下一个期望的结果。

我希望将数字除以(预期/实际)以形成比率,然后将其存储在列表中(不是Ui的一部分)。在此步骤之后,我希望程序找到百分比的平均值。因此,在数学术语中,它看起来像{[(预期/实际)+(预期2 +实际2)] / 2} * 100。此结果将在QTextBrowser中填充一行,说明百分比是多少。

我的包版试图将比率存储在列表中。正如您在我的代码中看到的那样,我尝试使用list.append()无效,将其存储在for循环中。在阅读之后,我还尝试使用copy.deepcopy,我需要附加列表的副本。当我构建代码时会发生什么,Ui打开,我输入我的数字,解释器处理比率并打印比率。然后我再输入两个数字并按下按钮,解释器处理这个比例并打印,但不是有两个数字,而是只得到最后一个。我被困在这里并花了大约10个小时尝试不同的解决方案,但不能动摇我错过一些基本的东西的感觉。

这是我的代码:

import sys
import copy
from PyQt5 import QtCore, QtGui, QtWidgets
from app3 import Ui_MainWindow

class Accapp(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
    super().__init__()
    Ui_MainWindow.__init__(self)
    Ui_MainWindow.__init__(self)        
    self.setupUi(self)
    self.retranslateUi(self)
    self.elaaddnew.clicked.connect(self.elaaddRow)

     def elaaddRow(self):
    # Retrieve text from QLineEdit
    eladate = self.eladate.text()
    elatname = self.elaname.text()
    elaexpect = self.elaexp.text()
    elaactual = self.elaact.text()
    # Create a empty row at bottom of table
    numRows = self.elatable.rowCount()
    self.elatable.insertRow(numRows)
# Add text to the row
    self.elatable.setItem(numRows, 0, QtWidgets.QTableWidgetItem(eladate))
    self.elatable.setItem(numRows, 1, QtWidgets.QTableWidgetItem(elatname))
    self.elatable.setItem(numRows, 2, QtWidgets.QTableWidgetItem(elaexpect))
    self.elatable.setItem(numRows, 3, QtWidgets.QTableWidgetItem(elaactual))
# divide expected and actual times for ratio
    elaratio= int(elaexpect)/int(elaactual)
# convert ratio to string
    elaratiostr = str(elaratio)
#Split string to enter into list
    elastrsp = elaratiostr.split()
# Create list
    elaratiolst = []
#Create deepcopy of list
    elaratiolstc = copy.deepcopy(elaratiolst)
#append values into list 
    for x in elastrsp:
      elaratiolstc.append(x)
#Print list in python interpreter (not Ui)
    print(elaratiolstc)




if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
window = Accapp()

window.show()
sys.exit(app.exec_())

以下是Ui的相关部分(实际上它是正确对齐的):

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1044, 936)
        self.elatab = QtWidgets.QWidget()
        self.elatab.setObjectName("elatab")
        self.verticalLayout_9 = QtWidgets.QVBoxLayout(self.elatab)
        self.verticalLayout_9.setObjectName("verticalLayout_9")
        self.elagrpbx = QtWidgets.QGroupBox(self.elatab)
        self.elagrpbx.setMinimumSize(QtCore.QSize(994, 812))
        self.elagrpbx.setTitle("")
        self.elagrpbx.setObjectName("elagrpbx")
        self.formLayout_3 = QtWidgets.QFormLayout(self.elagrpbx)
        self.formLayout_3.setObjectName("formLayout_3")
        self.formLayout_2 = QtWidgets.QFormLayout()
        self.formLayout_2.setSizeConstraint(QtWidgets.QLayout.SetFixedSize)
        self.formLayout_2.setObjectName("formLayout_2")
        self.elaname = QtWidgets.QLineEdit(self.elagrpbx)
        self.elaname.setMaximumSize(QtCore.QSize(78, 20))
    self.elaname.setObjectName("elaname")
    self.formLayout_2.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.elaname)
    self.label_35 = QtWidgets.QLabel(self.elagrpbx)
    font = QtGui.QFont()
    font.setPointSize(11)
    self.label_35.setFont(font)
    self.label_35.setObjectName("label_35")
    self.formLayout_2.setWidget(5, QtWidgets.QFormLayout.LabelRole, self.label_35)
    self.elaexp = QtWidgets.QLineEdit(self.elagrpbx)
    self.elaexp.setMaximumSize(QtCore.QSize(78, 20))
    self.elaexp.setObjectName("elaexp")
    self.formLayout_2.setWidget(5, QtWidgets.QFormLayout.FieldRole, self.elaexp)
    self.elaaddnew = QtWidgets.QPushButton(self.elagrpbx)
    self.elaaddnew.setMaximumSize(QtCore.QSize(75, 23))
    self.elaaddnew.setObjectName("elaaddnew")
    self.formLayout_2.setWidget(9, QtWidgets.QFormLayout.FieldRole, self.elaaddnew)
    self.eladate = QtWidgets.QDateEdit(self.elagrpbx)
    self.eladate.setMaximumSize(QtCore.QSize(79, 22))
    self.eladate.setMinimumDate(QtCore.QDate(2018, 9, 14))
    self.eladate.setObjectName("eladate")
    self.formLayout_2.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.eladate)
    self.label_33 = QtWidgets.QLabel(self.elagrpbx)
    font = QtGui.QFont()
    font.setPointSize(11)
    self.label_33.setFont(font)
    self.label_33.setObjectName("label_33")
    self.formLayout_2.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_33)
    self.label_34 = QtWidgets.QLabel(self.elagrpbx)
    font = QtGui.QFont()
    font.setPointSize(11)
    self.label_34.setFont(font)
    self.label_34.setAlignment(QtCore.Qt.AlignCenter)
    self.label_34.setWordWrap(True)
    self.label_34.setObjectName("label_34")
    self.formLayout_2.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_34)
    self.label_36 = QtWidgets.QLabel(self.elagrpbx)
    font = QtGui.QFont()
    font.setPointSize(11)
    self.label_36.setFont(font)
    self.label_36.setObjectName("label_36")
    self.formLayout_2.setWidget(7, QtWidgets.QFormLayout.LabelRole, self.label_36)
    self.elaact = QtWidgets.QLineEdit(self.elagrpbx)
    self.elaact.setMaximumSize(QtCore.QSize(78, 20))
    self.elaact.setObjectName("elaact")
    self.formLayout_2.setWidget(7, QtWidgets.QFormLayout.FieldRole, self.elaact)
    self.formLayout_3.setLayout(0, QtWidgets.QFormLayout.LabelRole, self.formLayout_2)
    self.elatable = QtWidgets.QTableWidget(self.elagrpbx)
    self.elatable.setMinimumSize(QtCore.QSize(729, 600))
    self.elatable.setMaximumSize(QtCore.QSize(729, 619))
    self.elatable.setObjectName("elatable")
    self.elatable.setColumnCount(4)
    self.elatable.setRowCount(0)
    item = QtWidgets.QTableWidgetItem()
    item.setTextAlignment(QtCore.Qt.AlignCenter)
    self.elatable.setHorizontalHeaderItem(0, item)
    item = QtWidgets.QTableWidgetItem()
    item.setTextAlignment(QtCore.Qt.AlignCenter)
    self.elatable.setHorizontalHeaderItem(1, item)
    item = QtWidgets.QTableWidgetItem()
    item.setTextAlignment(QtCore.Qt.AlignCenter)
    self.elatable.setHorizontalHeaderItem(2, item)
    item = QtWidgets.QTableWidgetItem()
    item.setTextAlignment(QtCore.Qt.AlignCenter)
    self.elatable.setHorizontalHeaderItem(3, item)
    self.elatable.horizontalHeader().setDefaultSectionSize(175)
    self.elatable.verticalHeader().setCascadingSectionResizes(False)
    self.elatable.verticalHeader().setDefaultSectionSize(46)
    self.formLayout_3.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.elatable)

由于

1 个答案:

答案 0 :(得分:0)

由于r / learnpython subreddit上的u / Thomasedv,答案是预期的一个简单修复。解决方案包括:

self.ratio_list=[] 

__init__课程中添加

self.ratio_list.append(elaratio)

在elaaddrow。

这解决了这个问题。