【问题标题】:How to remove label from dynamically generated check box in PyQt5?如何从 PyQt5 中动态生成的复选框中删除标签?
【发布时间】:2019-09-29 19:36:16
【问题描述】:

所以我有一个表格,其中有几个使用这些代码行动态生成的复选框:

chkBoxItem = QTableWidgetItem()
chkBoxItem.setTextAlignment(Qt.AlignHCenter)
chkBoxItem.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled)
chkBoxItem.setCheckState(QtCore.Qt.Unchecked) 
ui.columnTable.cellChanged.connect(self.checkColumnDataCheckbox)
ui.columnTable.setItem(i , 0, chkBoxItem)

我已尝试将其调整为一个较小的值,但它不起作用:

chkBoxItem.setSizeHint(QSize(10,10))

似乎没有超出某个最小宽度和高度。
这是它的样子:

基本上,我想删除此文本标签,以便复选框可以定位在单元格的中心

【问题讨论】:

    标签: python pyqt pyqt5 qt-designer


    【解决方案1】:

    void QTableWidget::setCellWidget(int row, int column, QWidget *widget)

    将给定的小部件设置为显示在给定行和列的单元格中,将小部件的所有权传递给表格。

    import sys
    from PyQt5.QtGui     import *
    from PyQt5.QtWidgets import *
    from PyQt5.QtCore    import *
    
    class Window(QWidget):
        def __init__(self, rows, columns):
            super().__init__()
            
            self.table = QTableWidget(rows, columns, self)
            
            for row in range(rows):
                widget   = QWidget()
                checkbox = QCheckBox()
                checkbox.setCheckState(Qt.Unchecked)
                layoutH = QHBoxLayout(widget)
                layoutH.addWidget(checkbox)
                layoutH.setAlignment(Qt.AlignCenter)
                layoutH.setContentsMargins(0, 0, 0, 0)
                
                self.table.setCellWidget(row, 0, widget)                  # <----
                self.table.setItem(row, 1, QTableWidgetItem(str(row)))
                
            self.button = QPushButton("Control selected QCheckBox")
            self.button.clicked.connect(self.ButtonClicked)
            
            layoutV     = QVBoxLayout(self)
            layoutV.addWidget(self.table)
            layoutV.addWidget(self.button)
    
    
        def ButtonClicked(self):
            checked_list = []
            for i in range(self.table.rowCount()):
                if self.table.cellWidget(i, 0).findChild(type(QCheckBox())).isChecked():
                    checked_list.append(self.table.item(i, 1).text())
            print(checked_list)
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        window = Window(3, 3)
        window.resize(350, 300)
        window.show()
        sys.exit(app.exec_())
    

    【讨论】:

      猜你喜欢
      • 2021-04-27
      • 1970-01-01
      • 1970-01-01
      • 2021-12-21
      • 1970-01-01
      • 1970-01-01
      • 2018-06-25
      • 2019-02-06
      • 2019-09-23
      相关资源
      最近更新 更多