2016-09-20 2 views
0

Я пишу приложение pyqt с меню и центральным виджетами (виджет таблицы с строками и столбцами, который похож на лист распространения). Я хочу, чтобы размер закрывающего окна был размером с виджет. Я не хочу исправлять его до определенного размера и места для отходов вокруг границы по эстетическим соображениям. Как извлечь всю ширину виджета таблицы? Я попытался использовать tabeleWidget.width(), но это дает мне ширину ячейки, которая кажется. Я использую pyqt4 и python 2.7.PyQt: Как установить размер окна в соответствии с размером виджета?

+0

Вы используете макеты? Если виджет таблицы является единственным виджемом в вашем окне, то окно должно быть того же размера, что и таблица. –

ответ

1

Я не уверен, есть ли простой способ получить размер стола, но как насчет чего-то подобного?

from PyQt4 import QtCore, QtGui 

class MainWindow(QtGui.QMainWindow): 
    def __init__(self, table_rows, table_cols, **kwargs): 
     super(MainWindow, self).__init__(**kwargs) 
     self.table = QtGui.QTableWidget(table_rows, table_cols) 
     self.table.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) 
     self.table.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) 
     self.table.verticalHeader().sectionResized.connect(self.fitToTable) 
     self.table.horizontalHeader().sectionResized.connect(self.fitToTable) 
     self.setCentralWidget(self.table) 
     self.fitToTable() 

    @QtCore.pyqtSlot() 
    def fitToTable(self): 
     x = self.table.verticalHeader().size().width() 
     for i in range(self.table.columnCount()): 
      x += self.table.columnWidth(i) 

     y = self.table.horizontalHeader().size().height() 
     for i in range(self.table.rowCount()): 
      y += self.table.rowHeight(i) 

     self.setFixedSize(x, y) 


if __name__ == '__main__': 
    app = QtGui.QApplication([]) 
    win = MainWindow(4, 5) 
    win.show() 
    app.exec_() 

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

+0

Благодарим вас за исчерпывающий ответ. – LostInTheFrequencyDomain

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