前提・実現したいこと
PyQtでシナリオ編集ツールを作っています。
コンボボックスを配列にして複数作成して、シグナルの関数にIDを渡す仕様にしようとしています。
「コンボボックスに選択されているものが変更されたときに、値によって画像を変更する」という関数を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
Traceback(most recent call last): File "c:ファイル名", line 326 , in <lambda> self.charaselectbox[id].currentIndexChanged.connect(lambda ID=id: self.charachange(ID)) File "c:ファイル名", line 393 , in charachange currentindex = self.charaselectbox[ID].currentIndex() IndexError: list index out of range
該当のソースコード
Python
#!/usr/bin/env python # -*- coding:utf-8 -*- import sys import openpyxl from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import * #メインウィンドウクラス内(QMainWindow) #キャラクター配列:奇数にキャラ名、偶数に画像png self.charalist = ['','', 'chara1','chara1.png', 'chara2','chara2.png', 'chara3','chara3.png' ] self.charaselectbox =[200] self.charaimage = [200] self.charaimagepix = [200] id = 0 #テキストしゃべるキャラクター chara1 配列から選択可能 コンボボックス self.charaselectbox[id] = QComboBox(self) print(len(self.charalist)) print(int(len(self.charalist)/2)) for a in range(int(len(self.charalist)/2)): self.charaselectbox[id].addItems([self.charalist[a*2]]) #コンボボックス変更したら 現在のインデックスがユーザーまたはプログラムによって変更されたとき self.charaselectbox[id].currentIndexChanged.connect(lambda ID=id: self.charachange(ID)) #キャラクターによって対応した画像入れる self.charaimage[id] =QLabel(self) self.charaimagepix[id] = QPixmap() self.charaimage[id].setPixmap(self.charaimagepix[id]) self.charaimage[id].setScaledContents(True) def charachange(self,ID:int): currentindex = self.charaselectbox[ID].currentIndex() #ここでエラー self.charaimagepi = QPixmap('画像が入っているフォルダ'+self.charalist[currentindex*2+1]) self.charaimage[ID].setPixmap(self.charaimagepi)
試したこと
コンボボックスの選択している値によってIDが変わってしまうようです。なんとかして複数のコンボボックスを作りたいです。少しでも有力な情報があれは、教えていただきたいです。
補足情報(FW/ツールのバージョンなど)
PyQt5です。
エラーメッセージはその前の部分に重要なメッセージが含まれているので、省略せずにすべて載せてください。
まだ回答がついていません
会員登録して回答してみよう