首页 > 解决方案 > 删除 QTableWidget 单元格中的空间

问题描述

我想把一个QLineEdit和放在QLable同一个单元格中QTableWidget。这个单元格小部件创建了下面我从互联网修改的代码。

class HiddenLabel(QLabel):
    '''
    QLable hide when mouse pressed
    '''
    def __init__(self, buddy, taskline, parent = None):
        super(HiddenLabel, self).__init__(parent)
        self.setFixedHeight(30)
        self.buddy = buddy
        self.taskline = taskline

    # When it's clicked, hide itself and show its buddy
    def mousePressEvent(self, event):
        # left click to edit 
        if event.button() == QtCore.Qt.LeftButton:
            self.hide()
            self.buddy.setText(self.taskline.plain_text)
            self.buddy.show()
            self.buddy.setFocus() # Set focus on buddy so user doesn't have to click again



class EditableCell(QWidget):
    '''
    QLineEdit show when HiddenLabel is hidden
    '''
    def __init__(self, taskline, parent = None):
        super(EditableCell, self).__init__(parent)
        self.taskline = taskline
        # Create ui
        self.myEdit = QLineEdit()
        self.myEdit.setFixedHeight(30)
        self.myEdit.hide() # Hide line edit
        self.myEdit.editingFinished.connect(self.textEdited)
        # Create our custom label, and assign myEdit as its buddy
        self.myLabel = HiddenLabel(self.myEdit, self.taskline) 
        self.myLabel.setText(self.taskline.enrich_text())
        # Change vertical size policy so they both match and you don't get popping when switching
        #self.myLabel.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) 

        # Put them under a layout together
        hLayout = QHBoxLayout()
        hLayout.addWidget(self.myLabel)
        hLayout.addWidget(self.myEdit)
        self.setLayout(hLayout)

    def textEdited(self):
        # If the input is left empty, revert back to the label showing
        print('edit finished')
        print(self.myEdit.text())
        taskline = TaskLine()
        taskline.parser(self.myEdit.text())
        self.taskline = taskline
        self.myLabel.setText(taskline.enrich_text())
        self.myEdit.hide()
        self.myLabel.show()

通过左键单击 ,单元格将在QLineEdit和之间更改。 如屏幕截图所示,我想删除单元格边框和单元格小部件之间的空白区域。QLabel在此处输入图像描述

我认为可以通过样式设置进行调整,但是我没有找到任何有关Qt样式设置的有用文档。我希望有人可以提供一些用处

标签: pythonpython-3.xpyqtpyqt5qtablewidget

解决方案


您必须将布局边距设置为 0:

hLayout.setContentsMargins(0, 0, 0, 0)

因为正如文档指出的那样,它们取决于样式和平台:

void QLayout::setContentsMargins(int left, int top, int right, int bottom)

设置要在布局周围使用的左、上、右和下边距。

默认情况下,QLayout 使用样式提供的值。在大多数平台上,所有方向的边距都是 11 像素。


推荐阅读