标签: qtablewidget

平滑滚动QTableWidget

我有一个带有自定义小部件的 QTableWidget。这些小部件很大,几乎占据了整个滚动区域的高度,因此只有一行可见。

我可以用鼠标滚轮或拖动滚动条滚动,但行总是跳跃。

有没有办法配置 QTableWidget 平滑滚动,而不跳跃?

qt scroll qtablewidget

2
推荐指数
1
解决办法
2367
查看次数

禁用编辑并将项目设置为 QTableWidget 中的多行

| Name | Math | Physics | Average grade |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |

  1. “数学”和“物理”栏供用户输入数字,“平均”栏不能输入数值,它仅用于显示用户输入“数学”和“物理”成绩后的平均值。如何禁用编辑但仍在“平均值”列中显示计算值?

  2. 我想将内容写入多行,但我的代码不起作用

    ui->tableWidget->setColumnCount(4);
    ui->tableWidget->setRowCount(8);
    ui->tableWidget->setSortingEnabled(false);
    QTableWidgetItem *newItem = new QTableWidgetItem(tr("Hello World"));
    for (int i=0; i< ui->tableWidget->rowCount(); i++)
        ui->tableWidget->setItem(i, 0, newItem);
    
    Run Code Online (Sandbox Code Playgroud)

有一条消息是这样的

QTableWidget: cannot insert an item that is already owned by another QTableWidget
Run Code Online (Sandbox Code Playgroud)

我还是不明白,因为我是QT的新手。请帮助我,非常感谢!:)

更新代码:

for (int i = 0; …
Run Code Online (Sandbox Code Playgroud)

qt qtableview qtablewidget

2
推荐指数
1
解决办法
1万
查看次数

如何控制 QTableWidget 标题的外观

如何更改QTableWidget标题的字体及其内容边距和间距?我想让“Column 0”、“Column 1”的字体变小,并且列名称和标题边缘之间没有间距。

在此输入图像描述

from PyQt4 import QtCore, QtGui
app = QtGui.QApplication([])

columns = ['Column 0', 'Column 1', 'Column 2']
items = [['Row%s Col%s'%(row,col) for col in range(len(columns))] for row in range(100)]

view = QtGui.QTableWidget()
view.setColumnCount(len(columns))
view.setHorizontalHeaderLabels(columns)
view.setRowCount(len(items))   
for row, item in enumerate(items):
    for col, column_name in enumerate(item):
        item = QtGui.QTableWidgetItem("%s"%column_name)
        view.setItem(row, col, item)            
    view.setRowHeight(row, 16)

view.show()
app.exec_()
Run Code Online (Sandbox Code Playgroud)

python pyqt qtablewidget qtablewidgetitem

2
推荐指数
1
解决办法
1万
查看次数

PyQt5中如何设置QTableWidget每一项的选择颜色

我希望在选择某个项目时有不同的选择颜色。但QTableWidget::item:selected{ background-color: }仅当仅选择一个项目时才有效,否则所有选定的项目将具有相同的选择颜色。那么有没有办法让每件物品都有单独的选择颜色呢?

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        self.MainWindow=MainWindow
        self.MainWindow.resize(300, 100)
        self.centralwidget = QtWidgets.QWidget(self.MainWindow)
        self.MainWindow.setCentralWidget(self.centralwidget)
        """table """
        self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)
        self.tableWidget.insertRow(0)
        self.tableWidget.setColumnCount(2)
        
        self.tableWidget.setItem(0,0,QtWidgets.QTableWidgetItem("red"))
        self.tableWidget.setItem(0,1,QtWidgets.QTableWidgetItem("blue"))
        self.tableWidget.itemSelectionChanged.connect(self.ChangeSelectionColor)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
    def ChangeSelectionColor(self):
        try:
            for item in self.tableWidget.selectedItems():
                col=item.column()
            self.tableWidget.setStyleSheet("QTableWidget::item:selected{ background-color: %s }"%color_list[col])
        except UnboundLocalError:
            pass
if __name__ == "__main__":
    import sys
    color_list=['red','blue']
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

在此输入图像描述

一种选择效果很好。

在此输入图像描述

多重选择只是将颜色应用于所有选定的项目。我希望左边的那个一旦被选中就变成红色。

python qt pyqt qtablewidget pyqt5

2
推荐指数
1
解决办法
6206
查看次数

我应该如何在 PyQt5 的 Table Widgets 中连接 CheckBox 单击信号?

我想将各种小部件添加到表格小部件中的各种单元格,并且我想在这些小部件的值发生更改时触发命令。我可以根据需要将小部件放入表格中,但是我在连接信号时遇到问题,因此我知道哪个小部件生成了信号。

下面是一个简单的例子来解释这个问题,只使用复选框:

屏幕截图:TableWidget、CheckBoxes

from PyQt5 import QtWidgets, QtGui, QtCore


class Main(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        # create table:
        self.table = QtWidgets.QTableWidget()
        [self.table.insertRow(i) for i in [0,1,2]]
        [self.table.insertColumn(i) for i in [0,1]]
        # set values for first column:
        self.table.setItem(0, 0, QtWidgets.QTableWidgetItem('A') )
        self.table.setItem(1, 0, QtWidgets.QTableWidgetItem('B') )
        self.table.setItem(2, 0, QtWidgets.QTableWidgetItem('C') )
        # add checkboxes to second column:
        cb0  = QtWidgets.QCheckBox( parent=self.table )
        cb1  = QtWidgets.QCheckBox( parent=self.table )
        cb2  = QtWidgets.QCheckBox( parent=self.table )
        self.table.setCellWidget(0, 1, cb0)
        self.table.setCellWidget(1, 1, cb1)
        self.table.setCellWidget(2, 1, cb2)
        # connect …
Run Code Online (Sandbox Code Playgroud)

python pyqt qtablewidget python-3.x pyqt5

2
推荐指数
1
解决办法
4969
查看次数

如何在 QTableWidget 中自定义排序行为

如何更改列排序行为,而不是像这样按字母顺序排序:

1、11.1、2、22.2、3 等

它将按数字排序,如下所示:

1、2、3、11.1、22.2 等

我需要仅更改特定列上的排序行为,而不是整个表上的排序行为,因为我想保持名称的正常字母顺序。

我还有一个包含文件大小的列。它们以 MB 和 GB 表示,我想对其进行排序,以便 800 MB 排在前面,1.4 GB 排在后面。它还存在字母排序的问题。有没有一种方法可以做到这一点?

python sorting pyqt qtablewidget pyqt5

2
推荐指数
1
解决办法
2861
查看次数

确定表格小部件中的单元格是否为空

我在使用 tablewidget 时遇到问题。

问题

我在表格小部件(5 行和 1 列)中获取用户的输入。用户不必填写所有行。例如,假设他只填写了其中的 3 个。

然后我尝试使用以下方法在 python 中读取这些行:

tableWidget.item(1,1).text()
Run Code Online (Sandbox Code Playgroud)

但是,如果我将某些行留空,则运行代码总会出现一些问题。

那么谁能告诉我如何检查单元格是否为空并且我可以跳过阅读它?

目前我正在使用以下两种可能性来检查那件事:

1) 基本逻辑

if len(tableWidget.item(4,1).text())!=0:
    print('Cell is non-empty')
Run Code Online (Sandbox Code Playgroud)

2)来自Qt文档

if tableWidget.item(4,1).text().isEmpty():
    print('Cell is empty')
Run Code Online (Sandbox Code Playgroud)

但它们都不起作用!非常感谢!

代码 (click_me)

from PyQt5 import QtCore, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)
        self.tableWidget.setGeometry(QtCore.QRect(120, 70, 256, 192))
        self.tableWidget.setRowCount(5)
        self.tableWidget.setObjectName("tableWidget")
        self.tableWidget.setColumnCount(1)
        item = QtWidgets.QTableWidgetItem()
        item.setText("Selected File")
        self.tableWidget.setHorizontalHeaderItem(0, item)
        self.pushButton_ok = QtWidgets.QPushButton("OK",self.centralwidget)
        self.pushButton_ok.setGeometry(QtCore.QRect(100, 290, 337, 23))
        self.pushButton_ok.setObjectName("pushButton_ok")
        MainWindow.setCentralWidget(self.centralwidget)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

        self.pushButton_ok.clicked.connect(lambda:self.click_me())

    def click_me(self): …
Run Code Online (Sandbox Code Playgroud)

python pyqt qtablewidget python-3.x pyqt5

2
推荐指数
1
解决办法
2597
查看次数

如何从搜索列表中突出显示 QTableWidget 中的单词

我想通过单词列表搜索 QTableWidget-Table,如果找到了它们,我希望它们突出显示。

我试图从这里修改代码,以便通过单词列表搜索表格,而不仅仅是一个单词。不幸的是,我的结果不断被覆盖。我总是只得到列表中最后一个单词的结果。

有谁知道如何修改代码,以便显示整个单词列表的结果?

这是代码:

from PyQt5 import QtCore, QtGui, QtWidgets
import random
import html

words_1 = ["Hello dseerfd", "world sdfsdf sdfgsdf sdfsdf", "Stack dasdf", "Overflow", "Hello world", """<font color="red">Hello world</font>"""]

class HTMLDelegate(QtWidgets.QStyledItemDelegate):
    def __init__(self, parent=None):
        super(HTMLDelegate, self).__init__(parent)
        self.doc = QtGui.QTextDocument(self)

    def paint(self, painter, option, index):
        substring = index.data(QtCore.Qt.UserRole)
        painter.save()
        options = QtWidgets.QStyleOptionViewItem(option)
        self.initStyleOption(options, index)
        res = ""
        color = QtGui.QColor("red")
        if substring:
            substrings = options.text.split(substring)
            res = """<font color="{}">{}</font>""".format(color.name(QtGui.QColor.HexRgb), substring).join(list(map(html.escape, substrings)))
        else:
            res = html.escape(options.text)
        self.doc.setHtml(res)

        options.text …
Run Code Online (Sandbox Code Playgroud)

python pyqt qtablewidget pyqt5

2
推荐指数
1
解决办法
711
查看次数

按钮如何删除它所在的 QTableWidget 中的一行

基本上,我在 QTableWidget 的每一行都有一个用于单击事件的删除按钮。

如何找到被点击的特定按钮的行索引?

class WidgetGallery(QDialog):
    def __init__(self, parent=None):
        super(WidgetGallery, self).__init__(parent)
        self.table = QTableWidget(10, 3)
        col_1 = QTableWidgetItem("first_col")
        col_2 = QTableWidgetItem("second_col")
        deleteButton = QPushButton("delete_this_row")
        deleteButton.clicked.connect(self.deleteClicked)
        self.table.setItem(0, 0, col_1)
        self.table.setItem(0, 1, col_2)
        self.table.setCellWidget(0, 2, deleteButton)
        self.mainLayout = QGridLayout()
        self.mainLayout.addWidget(self.table)


    def deleteClicked(self):
        sender = self.sender()
        row = sender.parent().........?
Run Code Online (Sandbox Code Playgroud)

python pyqt qtablewidget pyqt5

2
推荐指数
1
解决办法
4514
查看次数

从 PyQt 中的 QTableWidget 中删除水平网格线

我一直在谷歌上搜索这个问题并阅读 qt 文档,但我能找到的所有答案都是为 Qt for C++ 编写的

我试图了解如何从 QTableWidget 中删除所有水平网格线,就像这里的一样

QTableWidget

使表格看起来像一个包含行和列的列表

我尝试使用样式表来改变小部件的外观,但它们似乎对表格的外观没有影响

python pyqt qtablewidget

2
推荐指数
1
解决办法
3653
查看次数