python - QTableWidget 中的 PyQt5 QComboBox

标签 python qt pyqt5 qtablewidget qcombobox

我确实尝试了一切方法来解决我的问题,但没有成功。 这是我将组合框放入表格每一行的简单代码。它实际上适用于 setItem(),我用它来将字符串放入每一行。但它不适用于 setCellWidget(),我必须使用 setCellWidget() 将组合框放入行中。就好像 setCellWdiget() 将组合框放入行后删除它,因为它最终只出现在最后一行,我不明白为什么。 如果你们中有人能帮助我,那就太好了。提前谢谢了!

这是代码:

import sys
from PyQt5 import QtWidgets, QtCore

class Window(QtWidgets.QMainWindow):

    def __init__(self):
        super(Window, self).__init__()
        self.setGeometry(50,50,500,500)
        self.setWindowTitle('PyQt Tuts')
        self.table()


    def table(self):

        comboBox = QtWidgets.QComboBox()

        self.tableWidget = QtWidgets.QTableWidget()
        self.tableWidget.setGeometry(QtCore.QRect(220, 100, 411, 392))
        self.tableWidget.setColumnCount(2)
        self.tableWidget.setRowCount(5)
        self.tableWidget.show()

        attr = ['one', 'two', 'three', 'four', 'five']
        i = 0
        for j in attr:
            self.tableWidget.setItem(i, 0, QtWidgets.QTableWidgetItem(j))
            self.tableWidget.setCellWidget(i, 1, comboBox)
            i += 1


def run():
    app = QtWidgets.QApplication(sys.argv)      
    w = Window()
    sys.exit(app.exec_())      

run()

最佳答案

您创建了一个组合框,因此当您将其放入单元格中时,它将从前一个单元格中删除。 您必须为每个单元格创建一个组合框(在 for 循环中)。

示例:

attr = ['one', 'two', 'three', 'four', 'five']
i = 0
for j in attr:
    self.tableWidget.setItem(i, 0, QtWidgets.QTableWidgetItem(j))
    comboBox = QtWidgets.QComboBox()
    self.tableWidget.setCellWidget(i, 1, comboBox)
    i += 1

关于python - QTableWidget 中的 PyQt5 QComboBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39720036/

相关文章:

python - 复制列表中的字符串并将整数后缀添加到新添加的字符串中

Python:将列表与列表的列表结合起来,同时保留列表元素

python - 如何将一个 ipynb 文件中定义的变量访问到 jupyter 笔记本中的另一个文件中?

c++ - 将字符串值转换为标准字符串

python - QtDesigner 将字体大小设置为-1

python - 使用正则表达式从 html 中提取电子邮件

c++ - 以第二种形式使用 QMediaPlayer

qt - 如何编译这个qt程序(没有任何pro文件)?

python - PyQt 从 QtDesigner 生成的 MainWindow 打开一个新的 Windowed Widget

python - QTableWidget像excel一样显示某些小数