【问题标题】:remove space in QTableWidget cell删除 QTableWidget 单元格中的空间
【发布时间】:2020-01-05 05:19:01
【问题描述】:

我想将QLineEditQLable 放在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()

左键单击单元格将在QLineEditQLabel 之间切换。
如屏幕截图所示,我想删除单元格边框和单元格小部件之间的空白区域。

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

【问题讨论】:

    标签: python python-3.x pyqt pyqt5 qtablewidget


    【解决方案1】:

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

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

    因为the docs 指出它们取决于样式和平台:

    void QLayout::setContentsMargins(int left, int top, int right, int 底部)

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

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

    【讨论】:

      猜你喜欢
      • 2017-06-17
      • 1970-01-01
      • 1970-01-01
      • 2019-12-03
      • 1970-01-01
      • 2015-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多