在TableWidget Qt Designer中显示数据

Display data in TableWidget Qt Designer

提问人:Matt John 提问时间:10/13/2023 最后编辑:Matt John 更新时间:10/13/2023 访问量:44

问:

{import os
import sys
import pyodbc as odbc
import pandas as pd
from check import * # check is my ui file

class MainWindow(QMainWindow):
    def __init__(self,parent=None):
        QMainWindow.__init__(self)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.setMinimumSize(850,600)
        self.show()
        self.ui.locBtn.clicked.connect(lambda: self.display())
        
    def display(self):
        DRIVER_NAME='SQL Server'
        SERVER_NAME='DESKTOP-TF6BQMV\SQLEXPRESS01'
        DATABASE_NAME='SCM'
        connection_string= f"""
        DRIVER={{{DRIVER_NAME}}};
        SERVER={SERVER_NAME};
        DATABASE={DATABASE_NAME};
        Trust_Connection=yes;
        """
        conn=odbc.connect(connection_string)
        c=conn.cursor()
        df=pd.read_sql("select * from TK",conn)
        tenTK=self.ui.tenTK.text()
        ltk=self.ui.tkCb.currentText()
        df=df[df["LoaiTK"]==0]
        self.ui.tbTK.setRowCount(0)
        for row_number, row_data in df.iterrows():
            self.ui.tbTK.insertRow(row_number)
            for column_number, data in enumerate(row_data):
                self.ui.tbTK.setItem(row_number, column_number, QtWidgets.QTableWidgetItem(str(data)))
## EXECUTE APP
########################################################################
if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())}

如果我更改为代码:df=df[df[“LoaiTK”]==1] tablewidget 显示我的数据,但如果我保留代码:df=df[df[“LoaiTK”]==0] tablewidget 不显示任何内容。我的数据库有 2 行 LoaiTK =1 和 0。

python pyqt5 qt5 qtablewidget 过滤

评论

0赞 musicamante 10/13/2023
没有人可以为您提供有关数据结构的上下文或函数调用方式的上下文。提供一个最小的可重复示例(请仔细阅读该链接)并以文本形式提供,而不是图像!
0赞 Matt John 10/13/2023
我刚刚编辑过,你能帮我吗?我已经尝试了很多天。
0赞 musicamante 10/13/2023
这可能是由于生成的行号在过滤时跳过了一些行(打印出来,你会看到):例如,如果表是空的(没有行),并且第一个结果给出行号 1,则什么都不做,因为你只能插入 0 和总行数之间的行,任何其他值都会被忽略。在循环之前,更改为 :' 并删除该行。请注意,为了保持一致性,也应对列计数和索引执行相同的操作。row_numberinsertRow(1)self.ui.tbTK.setRowCount(len(df))for row_number, (_, row_data) in enumerate(df.iterrows())insertRow()
0赞 Matt John 10/14/2023
非常感谢你@musicamante,你帮助我解决了我挣扎了好几天的问题。

答: 暂无答案