2013-06-28 11 views
0

QtableWidget을 QScrollArea (단 하나의 위젯)에 넣으려고하면 가로 및 세로로 스크롤 할 수 있습니다 (Qtablewidget에서 스크롤 막대를 사용하지 않는 이유가 있음). 그러나 tableWidget이 창 내부에 들어 가지 않아서 스크롤 바가 나타나지 않아 QtCore.Qt.ScrollBarAlwaysOn을 설정했지만 이제는 그곳에 있지만 회색이며 여전히 스크롤 할 수 없습니다. 내가 PyQt는에 초심자이고 정말 레이아웃과 컨테이너를 이해하지 못하는, 그래서 내가 잘못 뭘하는지 알아낼 수 없습니다QScrollArea가 스크롤되지 않습니다.

class Table(QtGui.QDialog): 
    def __init__(self, parent=None): 
     super(Table, self).__init__(parent) 
     layout = QtGui.QGridLayout() 
     tableWidget = QtGui.QTableWidget() 
     #.... set up and populate tableWidget here 1000rows-10col .... 
     myScrollArea = QtGui.QScrollArea() 
     myScrollArea.setWidgetResizable(True) 
     myScrollArea.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn) 
     myScrollArea.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn) 
     myScrollArea.setWidget(tableWidget) 
     layout.addWidget(myScrollArea) 
     self.setLayout(layout) 
     self.setMinimumSize(1000, 700) 

:

여기 내 코드입니다. 올바른 방향으로 나를 가리켜 주시면 감사하겠습니다.

답변

0

나는 마침내 그것을 얻을 : 나는 열/테이블의 행이 데이터에 적응하기 위해 resizeColumnsToContents()resizeRowsToContents()를 사용했습니다 - 텍스트,하지만 테이블 자체와 같은 일을하지 않습니다 - 테이블 높이와 너비는 동일하게 유지됩니다.

self.table.resizeRowsToContents() 
self.table.resizeColumnsToContents() 
self.table.setFixedSize(self.table.horizontalHeader().length(), self.table.verticalHeader().length()) 

을 지금은 전체 테이블을 통해 QScrollArea의 스크롤바로 스크롤 할 수 있습니다 : 그래서 테이블을 만들기 위해 내가 이것을 사용했습니다 행과 열 주위에 크기합니다.

1

기본적으로 QtScrollBar에는 가로 및 세로 scrollBar가 있습니다. 기본적으로 tablewidget에는 가로 및 세로 scrollBar가 있습니다. 그래서 나는 그것을 만들었다. resize 이벤트를 사용하여 tablewidget의 너비와 높이의 크기를 조정했습니다.

class MainWin(QtGui.QDialog): 
def __init__(self,parent=None): 
    QtGui.QDialog.__init__(self,parent) 

    self.table =QtGui.QTableWidget(100,4) 
    self.table.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) 
    self.table.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) 

    lay = QtGui.QGridLayout() 
    self.sc = QtGui.QScrollArea() 
    self.sc.setWidget(self.table) 
    lay.addWidget(self.sc,0,0) 
    self.setLayout(lay) 


def resizeEvent(self,event): 
    self.table.resize(self.sc.width(),self.sc.height()) 




def main(): 
    app=QtGui.QApplication(sys.argv) 
    win=MainWin() 
    win.show() 
    sys.exit(app.exec_()) 

main() 
+0

답변 해 주셔서 감사합니다. 나는 당신 같은 테이블에 대해서도'ScrollBarAlwaysOff'를했습니다. 코드를 실행할 때 QScrollArea의 스크롤 막대와 5 개의 행을 볼 수 있지만 한 번만 더 아래로 스크롤하면 스크롤 할 수 있습니다. PyQt4와 Python 2.6을 사용하고 있습니다. 코드를 사용하여 100 개의 행으로 모두 스크롤 할 수 있습니까? 제발 두통을 좀 도와주세요. – Aleksandar

+0

아, 표가 채워진 후에'self.table.resizeRowsToContents()'와'self.table.resizeColumnsToContents()'를 사용해야한다는 것을 잊어 버렸습니다. – Aleksandar