You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyQt5中如何将列判断的OR逻辑替换为AND逻辑?

问题说明

我有如下数据结构:

123456789101112name_x141516name_y
CDCDCDCDCDCDCDCDCDCDCDCDBrakCDCDCDBrak
CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDBrak

当前代码的判断逻辑是检查列13(name_x)或列17(name_y)中是否包含"Brak"字符串,这会导致后续功能无法执行。我需要改写代码,实现任意行中列13和列17同时包含"Brak"字符串的判断逻辑。我使用的是QTableWidget和Sqlite数据库,现有代码如下:

self.connection = sqlite3.connect(r'Baza Danych/zestawienie.db')
self.c = self.connection.cursor()

query = "SELECT  * FROM Zestawienie"
result = self.connection.execute(query)

self.ui.zestawienie_analiza_tab_2.setRowCount(0)
for row_number, row_data in enumerate(result):
    self.ui.zestawienie_analiza_tab_2.insertRow(row_number)
    for column_number, data in enumerate(row_data):
        self.ui.zestawienie_analiza_tab_2.setItem(row_number, column_number,QTableWidgetItem(str(data)))

        if column_number in(13,17) :

                if  "Brak"  in data:

                    break
            
                else:
                    for i in range(self.ui.zestawienie_analiza_tab_2.columnCount()):
                        for j in range(self.ui.zestawienie_analiza_tab_2.rowCount()):


                            self.ui.zestawienie_analiza_tab_2.layout = QtWidgets.QHBoxLayout()

                            img = r"IKONY\letter_k.png"
                            img2 = r"IKONY\warning.png"

                            lb = CustomWidget(str(i)+str(j), img)
                            self.ui.zestawienie_analiza_tab_2.layout.addStretch(1)
                            lb2 = CustomWidget(str(i)+str(j), img2)



                            self.ui.zestawienie_analiza_tab_2.layout.addWidget(lb)
                            self.ui.zestawienie_analiza_tab_2.layout.addWidget(lb2)

                            self.ui.zestawienie_analiza_tab_2.cellWidget = QtWidgets.QWidget()
                            self.ui.zestawienie_analiza_tab_2.cellWidget.setLayout(self.ui.zestawienie_analiza_tab_2.layout)
                            self.ui.zestawienie_analiza_tab_2.layout.setContentsMargins(0,0,0,0)
                            self.ui.zestawienie_analiza_tab_2.layout.setSpacing(0)
                            
                            self.ui.zestawienie_analiza_tab_2.setCellWidget(row_number, 1,  self.ui.zestawienie_analiza_tab_2.cellWidget)
修改后的代码
self.connection = sqlite3.connect(r'Baza Danych/zestawienie.db')
self.c = self.connection.cursor()

query = "SELECT  * FROM Zestawienie"
result = self.connection.execute(query)

self.ui.zestawienie_analiza_tab_2.setRowCount(0)
for row_number, row_data in enumerate(result):
    self.ui.zestawienie_analiza_tab_2.insertRow(row_number)
    # 先完成整行数据的表格填充
    for column_number, data in enumerate(row_data):
        self.ui.zestawienie_analiza_tab_2.setItem(row_number, column_number, QTableWidgetItem(str(data)))
    
    # 检查目标列是否同时包含"Brak"(注意Python索引从0开始,列13对应索引12,列17对应索引16)
    name_x = row_data[12]
    name_y = row_data[16]
    if "Brak" in name_x and "Brak" in name_y:
        # 创建并设置单元格控件
        layout = QtWidgets.QHBoxLayout()
        img = r"IKONY\letter_k.png"
        img2 = r"IKONY\warning.png"

        lb = CustomWidget(f"{row_number}_col1", img)
        layout.addStretch(1)
        lb2 = CustomWidget(f"{row_number}_col1", img2)

        layout.addWidget(lb)
        layout.addWidget(lb2)

        cell_widget = QtWidgets.QWidget()
        cell_widget.setLayout(layout)
        layout.setContentsMargins(0, 0, 0, 0)
        layout.setSpacing(0)
        
        self.ui.zestawienie_analiza_tab_2.setCellWidget(row_number, 1, cell_widget)
修改要点
  1. 调整判断逻辑:将原有的"或"判断改为"且"判断,并且移到整行数据填充完成后执行,避免中途break打断后续操作。
  2. 修正索引对应:原代码列号是1开始计数,Python列表索引从0开始,所以列13对应索引12,列17对应索引16。
  3. 简化冗余操作:去掉原代码中不必要的全行列遍历,只针对当前符合条件的行创建控件,避免重复执行。
  4. 规范变量使用:避免直接给QTableWidget实例绑定layout、cellWidget属性,改用局部变量,防止污染控件实例的内置属性。

内容的提问来源于stack exchange,提问作者Sebastian Kasperski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 03:15:58