专栏首页钱塘小甲子的博客pyqt中QTableWidget里的下拉列表

pyqt中QTableWidget里的下拉列表

有时候我们希望在QTableWidget的单元格中进行下拉列表的选择,就像excel里面这样。那么怎么设置呢?怎么实现读和写呢?特别是在pyqt中,在c++中,网上已经有很多例子了。

1、写

 for row in range(len(index_list)):
                for col in range(len(col_list)):
                    if row in [2, 3, 4]:
                        table.setItem(row, col, QTableWidgetItem(
                            str(df.loc[df.index[row], df.columns[col]])))
                    elif row == 0:
                        comBox_direction = QComboBox()
                        comBox_direction.addItems(["买", "卖"])
                        comBox_direction.setStyleSheet("QComboBox{margin:3px};")

                        if df.loc[df.index[row], df.columns[col]] == "买":
                            comBox_direction.setCurrentIndex(0)
                        elif df.loc[df.index[row], df.columns[col]] == "卖":
                            comBox_direction.setCurrentIndex(1)
                        table.setCellWidget(row, col, comBox_direction)
                    elif row == 1:
                        comBox_call_put = QComboBox()
                        comBox_call_put.addItems(["看涨", "看跌"])
                        comBox_call_put.setStyleSheet("QComboBox{margin:3px};")
                        if df.loc[df.index[row], df.columns[col]] == "看涨":
                            comBox_call_put.setCurrentIndex(0)
                        elif df.loc[df.index[row], df.columns[col]] == "看跌":
                            comBox_call_put.setCurrentIndex(1)
                        table.setCellWidget(row, col, comBox_call_put)

我们先来看上面这段代码。这段代码是用来刷新QtableWidget的,把table的值和dataframe的值保持一致。一般的赋值很简单:

table.setItem(row, col, QTableWidgetItem(
                            str(df.loc[df.index[row], df.columns[col]])))

那么如果希望赋值为一个QComboBox呢?也很简单,先实例化一个QComboBox对象:

comBox_direction = QComboBox()
comBox_direction.addItems(["买", "卖"])
comBox_direction.setStyleSheet("QComboBox{margin:3px};")

然后,绑定到表格上:

table.setCellWidget(row, col, comBox_direction)

我们先来看上面这段代码。这段代码是用来刷新QtableWidget的,把table的值和dataframe的值保持一致。一般的赋值很简单:

2、读

那么,当我们想要读取table中的QComBox,怎么做呢?

combox_context_llist = [table.cellWidget(i, col).currentText() for i in range(0, 1)]

当我们获取combox中的内容时候,就是和写的时候反过来,用cellWidget,而不是用item。

好了,结束,用python的同学也可以是实现table和combox的结合了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • LeetCode 557:反转字符串中的单词 III Reverse Words in a String III

    给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。

    爱写bug
  • Python 错误处理

    从以上代码可以看出,针对不同的错误类型我们可以进行不同的输出结果,在 Python 中常用的错误类型如下

    keinYe
  • Python 基础语法四-list 与 tuple

    list(列表)是有序、可变的数据集合,可以随时添加、删除和修改元素,同时也是 python 内置的一种数据类型。

    keinYe
  • LeetCode 142:环形链表 II Linked List Cycle II

    为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。

    爱写bug
  • Python 生成器

    列表生成式是 python 内置的非常强大的可以用来生成列表的生成式。在学习生成器之前先来了解一下列表生成式,者有利于我们队生成器的理解。

    keinYe
  • Python 基础语法三-字符串

    字符串是字符的有序序列,在 python 中字符串是以单引号'、双引号"或三引号'''括起来的任意文本。

    keinYe
  • Python 网络编程

    现在的社会向互联网、AI 智能大踏步的高歌猛进,无论是互联网还是 AI 智能他们的基础都指向网络连接,试想一个没有网络连接的社会,大家每人一个功能机,那么什么互...

    keinYe
  • LeetCode 151:给定一个字符串,逐个翻转字符串中的每个单词 Reverse Words in a String

    Given an input string, reverse the string word by word.

    爱写bug
  • python 之进程与线程

    从系统调度和资源分配的角度来看,进程是 CPU 资源分配的最小单位,线程是 CPU 调度的最小单位。从 CPU 执行时间的角度来看,进程是包含了上下文切换的程序...

    keinYe
  • Python 基础语法五-控制流

    在开始进行控制流之前,先要学习一下如何将程序保存到文件中。在前面的学习过程中所有的代码都是在命令行环境中运行的,输入一行代码 python 解释器输出一个结果。...

    keinYe

扫码关注云+社区

领取腾讯云代金券