저는 Pyside를 사용하여 sqlite 데이터베이스에서 가져온 콤보 박스를 만듭니다. 사용자는 기존 항목 중 하나를 선택하거나 새 항목을 추가 할 수 있습니다. 사용자는 항목 이름 ("param")을 볼 수 있지만 데이터베이스에서 항목 ID에 액세스해야합니다. 따라서 두 단계가 있습니다.편집 가능한 QComboBox를 데이터베이스에 연결하는 방법
독서 환경 : 데이터베이스에서 읽을 수는 있지만 항목 뒤에는 항목 ID를 액세스하는 동안 항목 이름을 표시 할 수 없습니다.
항목 추가 : 콤보 상자의 변경 사항을 감지 한 다음 SQL 삽입 명령을 사용해야합니까? 아니면 모델이이 문제를 해결합니까?
이 코드는 데이터베이스에서 읽고 있지만 제대로 표시되지 않습니다
param_model = QSqlQueryModel()
param_model.setQuery("select id, param from partable order by param")
param_model.setHeaderData(0, Qt.Horizontal,"id")
param_model.setHeaderData(1, Qt.Horizontal,"param")
param_view = QTableView()
param_view.setColumnHidden(0,True)
self.paramfield = QComboBox()
self.paramfield.adjustSize()
self.paramfield.setEditable(True)
self.paramfield.setModel(param_model)
self.paramfield.setView(param_view)
이 설명과 예제에 감사드립니다. 내 코드를 조정하고 작동하는 경우 다시보고합니다. – davideps
코드가 아름답게 작동합니다. 제안에 따라 코드를 조정하면 새 콤보 상자 항목이 NULL ID가있는 데이터베이스에 추가되고이 오류가 발생합니다. "handleComboEdit Qt.EditRole, ID, 1, Qt.MatchExactly) [0] IndexError : list index 범위를 벗어났습니다. " 그러나 "ID = model.query(). lastInsertId()"의 결과는 정수입니다. 그래서 아직 작동하지 않을 가능성이있는 model.match입니다. 곧 다시보고 드리겠습니다. – davideps
사실, 문제는 제가 sqlite 테이블을 잘못 정의하고있는 것 같습니다. "ID INT PRIMARY KEY"는 올바르게 보이지만 올바르게 작동하지 않는 테이블을 생성합니다. "id INTEGER PRIMARY KEY"는 올바르게 작동합니다. 고맙습니다! – davideps