【问题标题】:How to remove the divider between widgets when using `statusBar.addPermanentWidget()`?使用`statusBar.addPermanentWidget()`时如何删除小部件之间的分隔符?
【发布时间】:2018-03-09 17:12:49
【问题描述】:

是否可以删除使用.addPermanentWidget() 添加到状态栏的两个小部件之间的分隔线?我怀疑这是可能的,但我还没有真正找到任何关于如何进行的文献。

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QStatusBar, QLabel


class MainWindow(QMainWindow):

    def __init__(self):
        QMainWindow.__init__(self)

        statusBar = QStatusBar()
        self.setStatusBar(statusBar)
        statusBar.addPermanentWidget(QLabel("Label: "))
        statusBar.addPermanentWidget(QLabel("Data"))


app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())

【问题讨论】:

  • 并非所有小部件样式都会绘制分隔符。你在什么平台上,QApplication.style().objectName()的输出是什么?
  • 输出是windowsvista,我目前正在Windows 10下开发。
  • 如果你使用默认状态栏而不是设置一个新状态栏有什么不同吗?可能不会,但最好排除它。
  • @ekhumoro 没有使用默认状态栏进行更改。
  • stylesheet examples 建议可以将状态栏项目的边框设置为零。但我自己无法测试它,所以我不知道这是否可行。如果没有,可能需要重新实现QStatusBar 的绘制事件。

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


【解决方案1】:

为了去除两个元素之间的分隔线,您需要在 Qt Creator 或项目源中为 QStatusBar::item 设置样式表。

Qt 创建者示例:

项目源示例:

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QStatusBar, QLabel


class MainWindow(QMainWindow):

    def __init__(self):
        QMainWindow.__init__(self)

        statusBar = QStatusBar()

        statusBar.setStyleSheet('QStatusBar::item {border: None;}')

        self.setStatusBar(statusBar)
        statusBar.addPermanentWidget(QLabel("Label: "))
        statusBar.addPermanentWidget(QLabel("Data"))


app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())

【讨论】:

    【解决方案2】:

    另一种方法是将多个小部件组合成一个以对它们进行分组,类似于下面的 C++:

        QWidget *widget = new QWidget;
        QLayout* layout = new QHBoxLayout(widget);
        layout->setMargin(0);
    
        QLabel *label = new QLabel;
        label->setText("Recording status");
        layout->addWidget(label);
    
        QLabel *m_RecordingStatus = new QLabel;
        m_RecordingStatus->setFrameShape(QFrame::Shape::Box);
        m_RecordingStatus->setFixedWidth(100);
    
        layout->addWidget(m_RecordingStatus);
        ui.m_statusBar->addPermanentWidget(widget);
    

    您可以将关联的小部件组合在一起,放在分隔线之间。

    【讨论】:

      猜你喜欢
      • 2021-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-10
      • 2018-06-19
      • 1970-01-01
      • 2019-04-06
      • 1970-01-01
      相关资源
      最近更新 更多