2017-01-31 31 views
2

Я хотел бы, чтобы удалить пустое пространство, которое есть в таблице я поставил в моем макете:PyQt: удалить пустое пространство в QTableWidget

Blank space

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

what I would obtain

Это мой код:

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) 

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

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

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

+0

большое спасибо! Вы мне очень помогли! – BossShell

2

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

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

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

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

horizontalLayout.addStretch(1) 

Установка стретч-фактор дает приоритет распорки, так что таблица будет установлена ​​на минимальном ширина. Вы можете, конечно, отрегулировать это, если хотите:

table.setMinimumWidth(400) 

 Смежные вопросы

  • Нет связанных вопросов^_^