2016-12-06 140 views
2

我已經搜索了一下,但我無法找到解決我的問題的方法。調整列寬以適應QTableWidget pyqt

我有一個QTableWidget有2列,我想要做的是讓它們可見整個小部件沒有水平滾動條出現。

與圖片應該都清楚:

enter image description here

我用的Qt Designer創建用戶界面和一些代碼來填寫所有的部件和其他的東西。

所以,首先我調整TH2 2列的內容與:

self.statTable.resizeColumnToContents(0) 
self.statTable.resizeColumnToContents(1) 

和它的作品,但隨後的窗口小部件沒有調整到2列的寬度。

+0

您是否嘗試過我在答案中給出的解決方案?我很想知道他們是否解決了你的問題(解決這個問題非常棘手,我不確定是否涵蓋了所有的角落案例)。 – ekhumoro

+0

嗨,對不起,沒有響應了..通過他的方式,我解決了上述兩行後添加此行:''self.statTable.setFixedWidth(self.statTable.columnWidth(0)+ self.statTable.columnWidth 1)) – matteo

回答

6

這在PyQt5中有一個非常簡單的解決方案。在初始化UI時,您需要在桌面上執行set the size adjust policy,並且會自動調整大小以適應內容。這可以在Qt Designer中進行,或以編程方式,就像這樣:

self.statTable.setSizeAdjustPolicy(
     QtWidgets.QAbstractScrollArea.AdjustToContents) 

然後你只需要做:

self.statTable.resizeColumnsToContents() 

每當表被重新填充。

對於PyQt4,一切都必須手動計算,並且還需要一些黑客來獲得完全一致的結果。下面的演示腳本對我來說工作正常,但YMMV:

import random 
from PyQt4 import QtCore, QtGui 

class Window(QtGui.QWidget): 
    def __init__(self): 
     super(Window, self).__init__() 
     self.table = QtGui.QTableWidget(5, 2, self) 
     self.button = QtGui.QPushButton('Populate', self) 
     self.button.clicked.connect(self.populate) 
     layout = QtGui.QGridLayout(self) 
     layout.addWidget(self.table, 0, 0) 
     layout.addWidget(self.button, 1, 0) 
     layout.setColumnStretch(1, 1) 

    def populate(self): 
     words = 'Red Green Blue Yellow Black White Purple'.split() 
     length = random.randint(2, len(words)) 
     self.table.setRowCount(random.randint(3, 30)) 
     for column in range(self.table.columnCount()): 
      for row in range(self.table.rowCount()): 
       item = QtGui.QTableWidgetItem(' '.join(
        random.sample(words, random.randint(1, length)))) 
       self.table.setItem(row, column, item) 

     self.table.setVisible(False) 
     self.table.verticalScrollBar().setValue(0) 
     self.table.resizeColumnsToContents() 
     self.table.setVisible(True) 
     self.setTableWidth() 

    def setTableWidth(self): 
     width = self.table.verticalHeader().width() 
     width += self.table.horizontalHeader().length() 
     if self.table.verticalScrollBar().isVisible(): 
      width += self.table.verticalScrollBar().width() 
     width += self.table.frameWidth() * 2 
     self.table.setFixedWidth(width) 

    def resizeEvent(self, event): 
     self.setTableWidth() 
     super(Window, self).resizeEvent(event) 

if __name__ == '__main__': 

    import sys 
    app = QtGui.QApplication(sys.argv) 
    window = Window() 
    window.setGeometry(700, 150, 800, 400) 
    window.show() 
    sys.exit(app.exec_()) 
+0

我正在使用pyQt5,所以我可以在QT設計器上找到它?因爲我沒有在任何地方看到它,並輸入代碼無效! @ekhumoro –

+2

@MohammedAminAIMEUR。它在屬性編輯器中('QAbstractScrollArea'部分)。 – ekhumoro