QCheckBox 自动换行

问题描述 投票:0回答:5

有没有一种方法可以像使用 QLabel 一样在 QCheckBox 中换行文本?

label = QLabel( QString.fromUtf8('long text in here'))
label.setWordWrap(True)

我尝试了

\n
这将添加换行符,但如果我调整窗口大小,这不是动态的。

qt pyqt
5个回答
9
投票

似乎有一个功能请求,位于 https://bugreports.qt.io/browse/QTBUG-5370

该问题尚未解决,因此该功能可能尚未实现。这意味着目前无法向 QCheckBox 添加自动换行。

您可以尝试各种解决方法,例如在右侧添加一个空文本 QCheckBox 和一个 QLabel,或者尝试为复选框放置较短的文本,并在其下方添加一个带有长解释的标签。


3
投票

您可以为 QtDesigner 开发自定义小部件以图形方式(或不)使用此功能。

CheckBoxWordWrap
(调整大小时动态):

在 QtDesigner 中


如果行为不完全是您想要的,您还可以使用该类并修改它。


0
投票

“这是我的替身 行复选框”。现在你有双行复选框


0
投票

不幸的是,对此没有简短的解决方案。我们必须自己实现这一点。

LineWrappedRadioButton
类的完整实现已在相关答案中提供。您可以通过简单地从
LineWrappedCheckBox
而不是从那里的
QCheckBox
派生来轻松将此代码转换为
QRadioButton
类。

像这样使用它:

int main(int argc, char **argv) {
    QApplication app(argc, argv);
    LineWrappedCheckBox checkBox("Lorem ipsum dolor sit amet, consectetur adipisici elit, sed eiusmod tempor incidunt ut labore et dolore magna aliqua.");
    checkBox.show();
    return app.exec();
}

这将产生以下结果:


0
投票

10 年后回答,但我使用自定义小部件解决了这个问题

class custom_checkbox(QCheckBox):
    def __init__(self, text):
        super().__init__()

        layout = QHBoxLayout()

        text_label = QLabel()
        text_label.setText(text)
        text_label.setWordWrap(True)
    
        layout.addWidget(text_label)
  
        self.setLayout(layout)

        self.mouse_inside = False
    def enterEvent(self, event):
        self.mouse_inside = True
    def leaveEvent(self, event):
        self.mouse_inside = True
    def mousePressEvent(self, event):
        if self.mouse_inside:
            self.setChecked(not self.isChecked())

您必须为自己创建的 checkbow 小部件设置自定义 css,否则它会看起来有问题

这是我用于名为 checkbox_widget 的复选框小部件的 css

checkbox_widget.setStyleSheet(f"""
                        QCheckBox {{
                        background-color: {color};
                        color: white;
                        padding: 30px;
                        border-radius: 5px;
                        border : none
                        }}  
                        QCheckBox::indicator {{
                        image: none;
                        }}
                        QCheckBox::indicator:checked {{
                        image: none;
                        }}
                        QLabel {{
                        background-color : {color};
                        padding: 20px;
                        font-size: 20px
                        }}
                        """)

如果您想要指示器,请删除该 css 并将标签的 padding-left 值更改为大约 40px,它应该可以正常工作

checkbox_widget.setStyleSheet(f"""
                       QCheckBox {{
                       background-color: {color};
                       color: white;
                       padding: 30px;
                       border-radius: 5px;
                       }}  
                       QCheckBox::indicator {{
                       subcontrol-position:left;
                       background-color: {color_for_unchecked_indicator};
                       border-radius: 4px;
                       }}
                       QCheckBox::indicator:checked {{
                       background-color: {color_for_checked_indicator};
                       }}
                       QLabel {{
                       padding-left: 40px;
                       }}
                       """)
© www.soinside.com 2019 - 2024. All rights reserved.