首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在QLabels中均匀分布QStatusBar

如何在QLabels中均匀分布QStatusBar
EN

Stack Overflow用户
提问于 2018-03-24 18:03:41
回答 1查看 391关注 0票数 0

我试图以与QTableView中的列相同的方式均匀地分配QTableView(按列宽度排列)。

因此,我想将QLabels中的字符串(QLabels()索引)替换为"count: CountofRows“,用于表示不能求和的列,将"sum: SumofRows”替换为“sum:SumofRows”。如果可能的话,无论何时使用过滤器(QSortFilterProxyModel),都应该更新它。

我读过这样的文章:post1post2,但仍然没有成功。

下面是我的代码,在这个阶段,它只填充了QLabels中的QStatusBar:

代码语言:javascript
复制
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from pandas import *
import sys


class TBWindow(QMainWindow):
    def __init__(self, parent=None):
        super(TBWindow, self).__init__(parent)

        fList = [['Ajvi', 'Ostatní textil', 'Holesovice', 1, 2],
                 ['Ajvi', 'Sukně', 'Holesovice', 2, 5],
                 ['Ajvi', 'Šaty', 'Holesovice', 2, 0],
                 ['Belusi', 'Brože', 'Fler', 0, 1],
                 ['Belusi', 'Brože', 'Holesovice', 0, 5],
                 ['PP', 'Sukně', 'E-shop', 25, 10],
                 ['PP', 'Sukně', 'Fler', 7, 6],
                 ['PP', 'Sukně', 'Holesovice', 15, 13],
                 ['PP', 'Sukně', 'Other', 6, 2],
                 ['PP', 'Sukně', 'Sashe', 6, 2],
                 ['PP', 'Tašky', 'E-shop', 2, 1],
                 ['PP', 'Tašky', 'Holesovice', 3, 1],
                 ['PP', 'Šaty', 'E-shop', 1, 0]]

        data = DataFrame(fList, columns = ['Seller', 'Section', 'Store', 'Total_pieces: 2017', 'Total_pieces: 2018'])

        self.setWindowTitle('Window')
        self.centralwidget  = QWidget(self)
        self.lineEdit       = QLineEdit(self.centralwidget)
        self.view           = QTableView(self.centralwidget)
        self.comboBox       = QComboBox(self.centralwidget)
        self.label          = QLabel(self.centralwidget)

        self.gridLayout = QGridLayout(self.centralwidget)
        self.gridLayout.addWidget(self.lineEdit, 0, 1, 1, 1)
        self.gridLayout.addWidget(self.view, 1, 0, 1, 3)
        self.gridLayout.addWidget(self.comboBox, 0, 2, 1, 1)
        self.gridLayout.addWidget(self.label, 0, 0, 1, 1)

        self.setCentralWidget(self.centralwidget)
        self.label.setText("Filter")

        self.model = PandasModel(data)
        self.proxy = QSortFilterProxyModel(self)
        self.proxy.setSourceModel(self.model)
        self.view.setModel(self.proxy)

        for column in range(self.view.horizontalHeader().count()):
            self.view.horizontalHeader().setSectionResizeMode(column, QHeaderView.Stretch)

        self.comboBox.addItems(list(data.columns.values))
        self.lineEdit.textChanged.connect(self.on_lineEdit_textChanged)
        self.comboBox.currentIndexChanged.connect(self.on_comboBox_currentIndexChanged)

##        mWdg = QWidget()
##        mWdg.setLayout(QHBoxLayout())
##        for index, element in enumerate(data.columns.values):
##            mWdg.layout().addWidget(QLabel(data.columns.values.tolist()[index]))
##        self.statusBar().addPermanentWidget(mWdg)

        for index, element in enumerate(data.columns.values):
            self.statusBar().addWidget(QLabel(data.columns.values.tolist()[index]), index)

    @pyqtSlot(str)
    def on_lineEdit_textChanged(self, text):
        search = QRegExp(text, Qt.CaseInsensitive, QRegExp.RegExp)
        self.proxy.setFilterRegExp(search)

    @pyqtSlot(int)
    def on_comboBox_currentIndexChanged(self, index):
        self.proxy.setFilterKeyColumn(index)

class PandasModel(QAbstractTableModel):
    def __init__(self, data, parent=None):
        QAbstractTableModel.__init__(self, parent)
        self._data = data

    def rowCount(self, parent=None):
        return self._data.shape[0]

    def columnCount(self, parent=None):
        return self._data.shape[1]

    def data(self, index, role=Qt.DisplayRole):
        if index.isValid():
            if role == Qt.DisplayRole:
                return str(self._data.iloc[index.row(), index.column()])
        return None

    def headerData(self, col, orientation, role):
        if orientation == Qt.Horizontal and role == Qt.DisplayRole:
            return self._data.columns[col]
        return None

if __name__ == '__main__':

    app = QApplication(sys.argv)
    main = TBWindow()
    main.showMaximized()
    sys.exit(app.exec_())

有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-24 19:41:56

QStatusBar.addPermanentWidget(小部件,stretch=0)

参数:小部件- QWidget拉伸- QtCore.int

将给定的小部件永久添加到此状态栏,如果小部件不是此QStatusBar对象的子部件,则对其进行修复。拉伸参数用于在状态栏增长和缩小时计算给定小部件的适当大小。默认的拉伸因子是0,即给小部件一个最小的空间。

代码语言:javascript
复制
    mWdg = QWidget()
    mWdg.setLayout(QHBoxLayout())
    for index, element in enumerate(data.columns.values):
        mWdg.layout().addWidget(QLabel(data.columns.values.tolist()[index]))
    self.statusBar().addPermanentWidget(mWdg, 1)   # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    #for index, element in enumerate(data.columns.values):
    #    self.statusBar().addWidget(QLabel(data.columns.values.tolist()[index]), index)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49468071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档