【问题标题】:Comparing QLineEdit() and csv file values比较 QLineEdit() 和 csv 文件值
【发布时间】:2020-08-27 19:50:44
【问题描述】:

我正在使用 PyQt5,并希望将 csv 文件中的值与用户通过 QLineEdit() 估算的值进行比较。然后,如果值相同,我想将整行导入到 QTableWidget。

csv 文件包含 3 个不同的列,分别具有宽度值、高度值和厚度值。

我已经试过这个来解决第一个问题:

import csv
with open('csvTest.csv') as file:

    reader = csv.reader(file)
    for row in reader:
        if row[0] == self.widthTextbox.text() or row[1] == self.heightTextbox.text() or row[2] == self.thickTextbox.text():
            print("Found: {}".format(row))

这不起作用,我知道使用“或”是有问题的,因为我希望它像过滤器一样,所以如果用户只输入三个属性之一,他会得到一些行,如果他输入两个他会得到更少的行,如果他输入所有三个,他会得到更少。但是使用“或”允许任何符合任何条件的行都有效。

第二个问题是,如果这可行,我想使用 self.tableWidget.setRowCount('''number of rows found''') 之类的东西使表中的行数等于通过过滤器的行数。

最后,最后一个问题是使 QTableWidget 行与过滤器找到的行相同。

【问题讨论】:

    标签: python csv pyqt5 qtablewidget


    【解决方案1】:

    要解决第一个和第二个问题,这可能是一种方法:

    import csv
    from collections import Counter
    
    
    rows_finded = []
    with open('csvTest.csv') as file:
        reader = csv.reader(file)
        for row in reader:
            values = [self.widthTextbox.text(), self.heightTextbox.text(), self.thickTextbox.text()]
            if Counter(values) == Counter(row):
                rows_finded.append(row)
    
    self.tableWidget.setRowCount(len(rows_finded))
    
    

    解决最后一个问题(来源:Python - PyQt - QTable Widget - adding rows):

    for i, row in enumerate(rows_finded):
        for j, col in enumerate(row):
            item = QTableWidgetItem(col)
            self.tableWidget.setItem(i, j, item)
    

    【讨论】:

    • 我认为解决最后一个问题的代码非常聪明并且有效,但我仍然没有设法使第一部分工作。在一个单独的文件中,我设置了 values = [65, 175, 30] 之类的值,并尝试使用附加值打印列表,但即使使用我在 csv 文件中设置的值,列表始终为空。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-11
    • 2021-02-16
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    相关资源
    最近更新 更多