PyQt: убрать пробел в QTableWidget

Я хотел бы удалить пробел, который есть в таблице, которую я поместил в свой макет:

Пустое пространство

Я хотел бы иметь что-то вроде этого:

что бы я получил

Это мой код:

import sys
from PyQt4 import QtGui
from PyQt4.QtGui import * 
from PyQt4.QtSql import * 
from PyQt4.QtCore import * 
import sys


class Example(QMainWindow):

    def __init__(self):
        super(Example, self).__init__()
        self.initUI()


    def initUI(self):


        self.resize(640, 480)
        self.center()
        self.setWindowTitle('')
        self.setWindowIcon(QtGui.QIcon('icon.ico')) 

        exitAction = QtGui.QAction(QtGui.QIcon('exit.png'), '&Exit', self)        
        exitAction.setShortcut('Ctrl+Q')
        exitAction.setStatusTip('Exit application')
        exitAction.triggered.connect(QtGui.qApp.quit)

        self.toolbar = self.addToolBar('Exit')
        self.toolbar.addAction(exitAction)



        menubar = self.menuBar()
        fileMenu = menubar.addMenu('&File')
        fileMenu.addAction(exitAction)

        table = QTableWidget()
        db = QSqlDatabase.addDatabase("")
        db.setDatabaseName('xxx.db')

        db.open()

        query = QSqlQuery ("xxxx")
        queryCount = QSqlQuery ("xxxx")
        queryCount.next()
        numberUserRow = queryCount.value(0).toInt()
        table.setColumnCount(2)
        table.setRowCount(numberUserRow[0])

        table.setHorizontalHeaderItem(0, QTableWidgetItem("Post"));
        table.setHorizontalHeaderItem(1, QTableWidgetItem("Data"));


        MSG_POST = 3
        DATA_SALVATAGGIO_POST = 4
        index=0
        while (query.next()):
            table.setItem(index,0,QTableWidgetItem(query.value(MSG_POST).toString()))
            table.setItem(index,1,QTableWidgetItem(query.value(DATA_SALVATAGGIO_POST).toString()))    
            index = index+1

        self.statusBar().showMessage('Ready')
        window = QWidget()

        mainLayout = QGridLayout()

        verticalLayout = QVBoxLayout()
        horizontalLayout = QHBoxLayout()

        horizontalLayout.addWidget(table)
        verticalLayout.addLayout(horizontalLayout)

        mainLayout.addLayout(verticalLayout,0,0)

        window.setLayout(mainLayout)


        self.setCentralWidget(window);
        self.show()


    def center(self):
        qr = self.frameGeometry()
        cp = QtGui.QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())        

def main():

    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()    

Я попытался поместить кнопку справа от моего стола, и это помогает мне изменить размер самой таблицы. Но мне не нужно использовать кнопку, так как я могу исправить ширину моего стола?

2 ответа

Решение

Наилучшим подходом для этого является использование QSpacerItem справа от стола.

    horizontalSpacer = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Expanding, QSizePolicy.Expanding)
    horizontalLayout.addWidget(table)
    # Add the widget and the spacer to the horizontal layout
    horizontalLayout.addItem(horizontalSpacer)

Кроме того, вам нужно будет установить для виджета Horizontal sizePolicy значение Minimum, чтобы избавиться от оставшегося пустого пространства в таблице. Для этого есть разные варианты, в зависимости от ваших потребностей. После этого вы можете растянуть размер до содержимого или установить фиксированный размер, который, вероятно, является наилучшим для достижения наиболее близкого результата к вашему изображению:

    table.setSizePolicy(QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Expanding)
    header = table.horizontalHeader()
    table.setMaximumWidth(header.length())
    table.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)

Результат показан здесь.

Это может быть достигнуто очень просто, как это:

    horizontalLayout.addWidget(table)
    horizontalLayout.addStretch()
    table.horizontalHeader().setResizeMode(QHeaderView.Stretch)

Это добавит расширяющуюся прокладку, которая сдвигает таблицу влево, а также заставит столбцы таблицы растягиваться, чтобы заполнить доступное пространство.

Если вы не хотите, чтобы размер таблицы изменялся при изменении размеров главного окна, сделайте следующее:

    horizontalLayout.addStretch(1)

Установка коэффициента растяжения отдает приоритет распорке, поэтому таблица будет зафиксирована на минимальной ширине. Конечно, вы можете изменить это, если хотите:

    table.setMinimumWidth(400)
Другие вопросы по тегам