2012-07-05 6 views
1

저는 파이썬을 배우고 있고 아빠를 돕기위한 프로그램을 작성하려고합니다. 나는 그것이 탁월한 것처럼 보이기를 원합니다. 그러나 지금 당장은 좋아 보이지만 누군가 테이블을 내려다 보는 동안 tableWidget의 행 수 (열이 아닌)를 만드는 방법을 모릅니다 ... 할 수 있습니까? 그것은 QtDesigner를 사용하거나 코드를 .py 파일에 작성해야합니다. 어떤 도움에 감사드립니다 ... 미안 바보 같은 질문을하고 있다면, 나는 멍청한 놈 정말 ... 여기Qt와 PyQt 테이블 위젯 증가 행 수

+1

코드에서 수행해야합니다. -/ – jdi

답변

1

개념 증명 예 일종의 : 당신은이

class Widget(QtGui.QWidget): 
    def __init__(self): 
     super(Widget, self).__init__() 
     self.resize(600,400) 

     layout = QtGui.QVBoxLayout(self) 
     self.table = QtGui.QTableWidget(20,10) 
     self.vBar = self.table.verticalScrollBar() 
     self._vBar_lastVal = self.vBar.value() 

     layout.addWidget(self.table) 

     self.vBar.valueChanged.connect(self.scrollbarChanged) 

    def scrollbarChanged(self, val): 
     bar = self.vBar 
     minVal, maxVal = bar.minimum(), bar.maximum() 
     avg = (minVal+maxVal)/2 
     rowCount = self.table.rowCount() 

     # scrolling down 
     if val > self._vBar_lastVal and val >= avg: 
      self.table.insertRow(rowCount) 

     # scrolling up 
     elif val < self._vBar_lastVal: 
      lastRow = rowCount-1 
      empty = True 
      for col in xrange(self.table.columnCount()): 
       item = self.table.item(lastRow, col) 
       if item and item.text(): 
        empty=False 
        break 
      if empty: 
       self.table.removeRow(lastRow) 

     self._vBar_lastVal = val 

은 값을 변경하는 정보를 알리기 위해 테이블 ​​위젯의 수직 스크롤 막대를 사용합니다. 그래서 우리는 valueChanged(int) 신호를 우리의 방법에 연결합니다.

scrollbarChanged 슬롯은 스크롤바의 값을받습니다. 내가 여기서하고있는 일은 그 순간 스크롤바의 최소값과 최대 값을 확인하고 현재 위치가 적어도 중간에 있는지 확인하는 것입니다. 또한 스크롤 막대에 행만 추가하기 때문에 현재 스크롤 막대 값이 마지막 시간보다 큰지 확인합니다. 이러한 조건이 참이면 새 행을 삽입합니다.

마지막 줄을 확인하여 비어 있는지 확인하고 제거해야하는 경우에만 제거해야하기 때문에 다시 줄이면됩니다. 내 버전은 대략적인 아이디어를 제공하지만 수학 논리는 아마도 더 많은 작업이 필요할 것입니다. 하지만 마지막 행의 모든 ​​항목을 통해 None 또는 빈 값인지 확인합니다. 전체 행이 비어 있으면 제거합니다. 따라서 백업을 스크롤 할 때 감소 효과를 얻습니다.

희망 사항이 당신에게 출발점이됩니다! 어떤 부분에 대한 자세한 설명이 필요하면 코드에 대해 물어보십시오.

+0

감사합니다. jdi !!! 나는 당신의 코드를 연구하고 네세 사리 수정 작업을 수행했다. 유일한 것은 "실제"감소 효과를 원한다면 "LastRow"의 값을 20 또는 그 이상으로 올려야한다는 것입니다 ... – Antoni4040

+0

예. 내가 말했듯이, 나는 로직에 대한 테스트를 거의하지 않았다. 감속기가 거칠 거라 생각했습니다. 또한 스크롤 핸들의 크기가 100 %가되기 전에 시간을 줄이는 것이 좋습니다. 이렇게하면 항상 보이는보기를 벗어나는 추가 행이 유지됩니다. 그렇게하면 막대가 너무 커서 스크롤이 줄어들지 않아서 스크롤이 줄어들지 않습니다. – jdi