class CastWindow(QWidget): def __init__(self, parent, mode='normal'): super().__init__() self.parent = parent self.mode = mode if self.mode == 'wide': self.MAX_CAST_NUM = 12 self.num_col = 6 self.num_row = 2 self.cast_num = 12 elif self.mode == 'long': self.MAX_CAST_NUM = 12 self.cast_num = 12 else: self.MAX_CAST_NUM = 10 self.cast_num = 10 self.cast_labels = [CastLabel(self) for i in range(self.MAX_CAST_NUM)] print('init Cast Window.') self.initUI() def initUI(self): if self.mode == 'wide': self.layout = QGridLayout() for i in range(self.num_col): self.layout.setColumnStretch(i, 1) for i in range(self.num_row): self.layout.setRowStretch(i, 1) positions = [(i, j) for i in range(self.num_row) for j in range(self.num_col)] for i in range(self.cast_num): if i < self.MAX_CAST_NUM: self.layout.addWidget(self.cast_labels[i], *positions[i]) else: self.layout = QVBoxLayout() for i in range(self.cast_num): self.layout.addWidget(self.cast_labels[i]) self.setLayout(self.layout) def update_cast(self, cast_list): self.cast_num = len(cast_list) for i in range(self.cast_num): self.cast_labels[i].reset_pixmp(cast_list[i]) self.cast_labels[i].seltectable = True for i in range(self.cast_num, self.MAX_CAST_NUM): self.cast_labels[i].reset_pixmp() self.cast_labels[i].seltectable = False self.update() def seletected_changed(self): self.parent.cast_selected_changed() def clean_seltected(self): for i in range(self.cast_num): self.cast_labels[i].isSelected = False self.update() def set_selected_idx(self, idx): if idx < self.cast_num and idx >= 0: self.cast_labels[idx].isSelected = True else: self.clean_seltected() self.update() def get_seletectd_idx(self): sidx = -1 for i in range(self.cast_num): if self.cast_labels[i].isSelected: sidx = i return sidx