2013-07-08 2 views
1

QListWidget 및 QStackedWidget이 있습니다. QListWidget은 QStackedWidget에 위젯의 이름을 표시합니다. QListWidget에서 끌어다 놓기를 통해 위젯의 순서를 재정렬 할 수 있습니다.pyqt에서 QStackedWidget의 색인 변경

제 질문은 어떻게 QStackedWidget에서 변경된 순서를 업데이트 할 수 있습니까?

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

import sys 
from PyQt4 import QtGui, QtCore 

class TestWidget(QtGui.QWidget): 
    def __init__(self, parent=None): 
     QtGui.QWidget.__init__(self, parent) 
     self.layout = QtGui.QHBoxLayout(self) 
     self.stack  = QtGui.QStackedWidget(self) 
     self.item_list = QtGui.QListWidget(self) 
     self.item_list.setDragEnabled(True) 
     self.item_list.setDragDropMode(QtGui.QAbstractItemView.InternalMove) 

     self.layout.addWidget(self.item_list) 
     self.layout.addWidget(self.stack) 

     for i in range(10): 
      b_name = "Button %04i" % i 
      i_name = "Item %04i" % i 
      self.stack.addWidget(QtGui.QPushButton(b_name, self)) 
      self.item_list.addItem(i_name) 

     self.item_list.currentRowChanged.connect(self.stack.setCurrentIndex) 


if __name__ == "__main__": 
    app = QtGui.QApplication(sys.argv) 
    widget = TestWidget() 

    widget.show() 
    sys.exit(app.exec_()) 

답변

1

QStackedWidget의 예를 찾고있는 동안이 질문을 찾았

는 여기에 문제를 표시 할 수있는 최소한의 예입니다. 더 이상 필요하지 않을 수도 있지만 스택 위젯에서 주문을 다시 정렬하지 않는 것이 좋습니다. 대신, 목록 이름을 키로 사용하고 값이 스택의 인덱스 인 파이썬 사전을 보관합니다. 그런 다음 목록 값이 변경되면 색인을 찾아 스택의 해당 부분으로 설정하십시오.

동적으로 스택을 수정하려고 시도하는 것보다 훨씬 적은 작업처럼 보입니다.