前提・実現したいこと
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
1#!/usr/bin/env python 2# -*- coding:utf-8 -*- 3 4import sys 5import openpyxl 6from PyQt5.QtWidgets import * 7from PyQt5.QtCore import * 8from PyQt5.QtGui import * 9#メインウィンドウクラス内(QMainWindow) 10#キャラクター配列:奇数にキャラ名、偶数に画像png 11 self.charalist = ['','', 12 'chara1','chara1.png', 13 'chara2','chara2.png', 14 'chara3','chara3.png' 15 ] 16 self.charaselectbox =[200] 17 self.charaimage = [200] 18 self.charaimagepix = [200] 19 20 id = 0 21 #テキストしゃべるキャラクター chara1 配列から選択可能 コンボボックス 22 self.charaselectbox[id] = QComboBox(self) 23 print(len(self.charalist)) 24 print(int(len(self.charalist)/2)) 25 for a in range(int(len(self.charalist)/2)): 26 self.charaselectbox[id].addItems([self.charalist[a*2]]) 27 28 29 #コンボボックス変更したら 現在のインデックスがユーザーまたはプログラムによって変更されたとき 30 self.charaselectbox[id].currentIndexChanged.connect(lambda ID=id: self.charachange(ID)) 31 #キャラクターによって対応した画像入れる 32 self.charaimage[id] =QLabel(self) 33 self.charaimagepix[id] = QPixmap() 34 self.charaimage[id].setPixmap(self.charaimagepix[id]) 35 self.charaimage[id].setScaledContents(True) 36 37 def charachange(self,ID:int): 38 currentindex = self.charaselectbox[ID].currentIndex() #ここでエラー 39 self.charaimagepi = QPixmap('画像が入っているフォルダ'+self.charalist[currentindex*2+1]) 40 self.charaimage[ID].setPixmap(self.charaimagepi)
試したこと
コンボボックスの選択している値によってIDが変わってしまうようです。なんとかして複数のコンボボックスを作りたいです。少しでも有力な情報があれは、教えていただきたいです。
補足情報(FW/ツールのバージョンなど)
PyQt5です。
エラーメッセージはその前の部分に重要なメッセージが含まれているので、省略せずにすべて載せてください。
回答1件
あなたの回答
tips
プレビュー