from textual.app import App, ComposeResult from textual.events import Event from textual.widgets import ( Collapsible, Header, Footer, Markdown, ListView, ListItem, Label, Static, Button, ) from textual.containers import Container, Horizontal, Center from textual.screen import Screen from textual.widget import Widget import uuid from typing import Tuple, Dict import heurams.kernel.particles as pt import heurams.kernel.puzzles as pz import re import random import copy class DrawCard(Composition): def __init__(self, screen: Screen, reactor, atom: Tuple[pt.Electron, pt.Nucleon, Dict], extra = {}): super().__init__(screen, reactor, atom) self.inputlist = [] self.hashtable = {} self._work() def _work(self): self.puzzle = pz.SelectionPuzzle(self.atom[1]["keyword_note"], [], 2, "选择正确词义: ") # type: ignore self.puzzle.refresh() def compose(self): yield Label(self.atom[1].content.replace("/",""), id=self.regid("sentence")) yield Label(self.puzzle.wording[len(self.inputlist)], id=self.regid("puzzle")) yield Label(f"当前输入: {self.inputlist}", id=self.regid("inputpreview")) for i in self.puzzle.options[len(self.inputlist)]: self.hashtable[str(hash(i))] = i yield Button(i, id=self.regid(f"select{hash(i)}")) yield Button("退格", id=self.regid(f"delete")) def handler(self, event, type_): if type_ == "button": if self.recid(event.button.id) == "delete": if len(self.inputlist) > 0: self.inputlist.pop() else: return 1 else: self.inputlist.append(self.hashtable[self.recid(event.button.id)[6:]]) if len(self.inputlist) < len(self.puzzle.answer): return 1 else: if self.inputlist == self.puzzle.answer: self.reactor.report(self.atom, 4) return 0 else: self.inputlist = [] self.reactor.report(self.atom, 2) return 2