为每行Pyqt5添加一个Qcombobox

发布于 2025-02-03 06:38:59 字数 1722 浏览 0 评论 0原文

我有一个从SQL获取数据的QT表小部件,我想将一个组合框放在第4、5、6和7列(现在让我们只为第四列进行操作)。我做到了,但是当我执行代码时,我的qcombobox仅在最后一行中显示,这是因为我有一个循环在表中插入行,并且我将self.table.setcellwidget(行,列,commobox)放入这个循环,因此每次执行时,它都会将ComboBox移至最后一行,我该如何为每行组合一个组合框?这是我的代码

 def datitabella(self):    
    delegate = MyDelegate(self)
    tablerow = 0 
    conteggio = c.execute('SELECT COUNT(ID) FROM Viaggi').fetchone()[0]
    combo = QComboBox()
    for p in c.execute("SELECT Customer_code FROM Customers "):
        combo.addItem(str(p))         
    for row in c.execute("SELECT * FROM Viaggi "):
        righe = 0 
        self.tabella_registrazioni.setRowCount(conteggio)
        self.tabella_registrazioni.setItem(tablerow, 0, QtWidgets.QTableWidgetItem(str(row[0])))
        self.tabella_registrazioni.setItem(tablerow, 1, QtWidgets.QTableWidgetItem(row[1]))
        self.tabella_registrazioni.setItem(tablerow, 2, QtWidgets.QTableWidgetItem(row[2]))
        self.tabella_registrazioni.setItem(tablerow, 3, QtWidgets.QTableWidgetItem(row[3]))
        self.tabella_registrazioni.setItem(tablerow, 4, QtWidgets.QTableWidgetItem(row[4]))
        self.tabella_registrazioni.setItem(tablerow, 5, QtWidgets.QTableWidgetItem(row[5]))
        self.tabella_registrazioni.setItem(tablerow, 6, QtWidgets.QTableWidgetItem(row[6]))
        self.tabella_registrazioni.setItem(tablerow, 7, QtWidgets.QTableWidgetItem(row[7]))
        self.tabella_registrazioni.setItem(tablerow, 19, QtWidgets.QTableWidgetItem(str(row[19])))
        self.tabella_registrazioni.setCellWidget(tablerow, 4, combo)
        tablerow+= 1           
    self.tabella_registrazioni.itemChanged.connect(self.changeIcon) 
    self.tabella_registrazioni.setItemDelegateForColumn(0, delegate)

I have a QT Table Widget where I get data from sql, I wanted to put a combo box to the column 4, 5, 6 and 7 (for now let's do it only for the 4th column). I did it but when I execute the the code my QComboBox is shown only in the last row, this because I have a for cycle that inserts rows in the table and I put the self.table.setCellWidget(row, column, combobox) in this loop, so everytime it's executed it moves the combobox to the last row, how can I have a combo box for each row? Here's my code

 def datitabella(self):    
    delegate = MyDelegate(self)
    tablerow = 0 
    conteggio = c.execute('SELECT COUNT(ID) FROM Viaggi').fetchone()[0]
    combo = QComboBox()
    for p in c.execute("SELECT Customer_code FROM Customers "):
        combo.addItem(str(p))         
    for row in c.execute("SELECT * FROM Viaggi "):
        righe = 0 
        self.tabella_registrazioni.setRowCount(conteggio)
        self.tabella_registrazioni.setItem(tablerow, 0, QtWidgets.QTableWidgetItem(str(row[0])))
        self.tabella_registrazioni.setItem(tablerow, 1, QtWidgets.QTableWidgetItem(row[1]))
        self.tabella_registrazioni.setItem(tablerow, 2, QtWidgets.QTableWidgetItem(row[2]))
        self.tabella_registrazioni.setItem(tablerow, 3, QtWidgets.QTableWidgetItem(row[3]))
        self.tabella_registrazioni.setItem(tablerow, 4, QtWidgets.QTableWidgetItem(row[4]))
        self.tabella_registrazioni.setItem(tablerow, 5, QtWidgets.QTableWidgetItem(row[5]))
        self.tabella_registrazioni.setItem(tablerow, 6, QtWidgets.QTableWidgetItem(row[6]))
        self.tabella_registrazioni.setItem(tablerow, 7, QtWidgets.QTableWidgetItem(row[7]))
        self.tabella_registrazioni.setItem(tablerow, 19, QtWidgets.QTableWidgetItem(str(row[19])))
        self.tabella_registrazioni.setCellWidget(tablerow, 4, combo)
        tablerow+= 1           
    self.tabella_registrazioni.itemChanged.connect(self.changeIcon) 
    self.tabella_registrazioni.setItemDelegateForColumn(0, delegate)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

陪我终i 2025-02-10 06:38:59

您必须为每一行创建一个新的Qcombobox:

def datitabella(self):    
    delegate = MyDelegate(self)
    tablerow = 0
    conteggio = c.execute('SELECT COUNT(ID) FROM Viaggi').fetchone()[0]
    items = []
    for p in c.execute("SELECT Customer_code FROM Customers "):
        items.append(p[0])         
    for row in c.execute("SELECT * FROM Viaggi "):
        combo = QComboBox()
        combo.addItems(items)
        # ...
        self.tabella_registrazioni.setCellWidget(tablerow, 4, combo)

You have to create a new QComboBox for each row:

def datitabella(self):    
    delegate = MyDelegate(self)
    tablerow = 0
    conteggio = c.execute('SELECT COUNT(ID) FROM Viaggi').fetchone()[0]
    items = []
    for p in c.execute("SELECT Customer_code FROM Customers "):
        items.append(p[0])         
    for row in c.execute("SELECT * FROM Viaggi "):
        combo = QComboBox()
        combo.addItems(items)
        # ...
        self.tabella_registrazioni.setCellWidget(tablerow, 4, combo)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文