def handler(): cur_time = ui.video_canvas.media.currentTime() row = len(items) ui.table_captions.setRowCount(row + 1) dt = total_time - cur_time new_item = Item("Enter text here...", cur_time, (1000 if dt > 1000 else dt), 0, 0) items.append(new_item) f = QtGui.QFont() f.setPointSize(20) scene_item = ui.video_canvas.scene.addText(new_item.text, f) scene_item.setPos(new_item.x, new_item.y) scene_item.setDefaultTextColor(QtGui.QColor(255, 255, 255)) def handle_size_change(): new_item.x = scene_item.x() new_item.y = scene_item.y() on_tablewidget_cell_changed(ui)(row, 3) on_tablewidget_cell_changed(ui)(row, 4) scene_item.xChanged.connect(handle_size_change) scene_item.yChanged.connect(handle_size_change) for i, prop in enumerate(Item.properties()): tw_item = QtGui.QTableWidgetItem(getattr(new_item, prop)) if prop not in ("x", "y"): tw_item.setFlags(Qt.Qt.ItemIsEditable | Qt.Qt.ItemIsEnabled | Qt.Qt.ItemIsSelectable) else: tw_item.setFlags(Qt.Qt.ItemIsEnabled | Qt.Qt.ItemIsSelectable) ui.table_captions.setItem(row, i, tw_item)
def handler(row, col): prop = Item.properties()[col] item = items[row] tw_item = ui.table_captions.item(row, col) scene_item = ui.video_canvas.scene.item_at(row) if prop == "x" or prop == "y": tw_item.setText(str(getattr(item, prop))) elif prop == "text": setattr(item, prop, tw_item.text()) scene_item.setPlainText(item.text) else: try: time_in_msec = str_to_msec(tw_item.text()) if (prop == "start_time" and time_in_msec < total_time) \ or (prop == "duration" and item._start_time + time_in_msec < total_time): setattr(item, prop, tw_item.text()) on_video_tick(ui)(ui.video_canvas.media.currentTime()) else: tw_item.setText(str(getattr(item, prop))) except Exception: tw_item.setText(str(getattr(item, prop)))