permet de faire des boite de textes, assez customisables. Utilisé dans mon rpg.py
from math import * from kandinsky import * from ion_plus import * def getLines(text,limit): words = iter(text.split()) lines, current = [], next(words) for word in words: if len(current) + 1 + len(word) > limit: lines.append(current) current = word else: current += " " + word lines.append(current) return "\n".join(lines) class DialogBox: def __init__(self,p1,p2,**kwargs): self.x = p1[0] self.xSide = p2[0]-p1[0] self.y = p1[1] self.ySide = p2[1]-p1[1] self.sx = p1[2] self.sxSide = p2[2]-p1[2] self.sy = p1[3] self.sySide = p2[3]-p1[3] self.textXSize = (p1[2]-14)//10 self.textXSizeSide = ((p2[2]-14)//10)-((p1[2]-14)//10) self.textYSize = (p1[3]-12)//18 self.textYSizeSide = ((p2[3]-12)//18)-((p1[3]-12)//18) self.initfunc = lambda x: 1 self.drwfunc = lambda x: 1 self.hidefunc = lambda x: 1 for key,value in kwargs.items(): setattr(self,key,value) def init(s,side): s.initfunc(side) fill_rect(s.x+s.xSide*side,s.y+s.ySide*side,s.sx+s.sxSide*side,s.sy+s.sySide*side,(0,)*3) def drw(s,text,side): s.drwfunc(side) fill_rect(s.x+s.xSide*side+3,s.y+s.ySide*side+3,s.sx+s.sxSide*side-6,s.sy+s.sySide*side-6,(255,)*3) bttrTxt = getLines(text,s.textXSize+s.textXSizeSide*side).split("\n") textIndex = 0 for i in range(min(s.textYSize+s.textYSizeSide*side,len(bttrTxt))): for j in range(len(bttrTxt[i])): draw_string(bttrTxt[i+textIndex][0:j+1],s.x+s.xSide*side+6,s.y+s.ySide*side+i*18+6) sleep(0.01) if len(bttrTxt)<s.textYSize+s.textYSizeSide*side: while not keyinput(4): pass return for k in range(len(bttrTxt)-s.textYSize-s.textYSizeSide*side+1): for j in range(len(bttrTxt[textIndex+s.textYSize+s.textYSizeSide*side-1])): draw_string(bttrTxt[min(s.textYSize+s.textYSizeSide*side,len(bttrTxt))-1+textIndex][0:j+1],s.x+s.xSide*side+6,s.y+s.ySide*side+(s.textYSize+s.textYSizeSide*side-1)*18+6) sleep(0.01) while not keyinput(4): pass if textIndex == len(bttrTxt)-s.textYSize-s.textYSizeSide*side: break textIndex += 1 fill_rect(s.x+s.xSide*side+6,s.y+s.ySide*side+6,s.sx+s.sySide*side-12,18,(255,)*3) for i in range(3): fill_rect(s.x+s.xSide*side+3,s.y+s.ySide*side+3,s.sx+s.sxSide*side-6,s.sy+s.sySide*side-6,(255,)*3) for j in range(s.textYSize+s.textYSizeSide*side-1): draw_string(bttrTxt[j+textIndex],s.x+s.xSide*side+6,s.y+s.ySide*side+j*18+6+(2-i)*6) sleep(0.05) def hide(s,side): fill_rect(s.x+s.xSide*side,s.y+s.ySide*side,s.sx+s.sxSide*side,s.sy+s.sySide*side,(255,)*3) s.hidefunc(side) """ a = DialogBox((10,10,120,80),(30,30,120,120)) a.init(0) a.drw("Hello hhhhhhhh hhhhhh hhhhhh hhhhh hhhhh aaaaa",0) a.hide(0) """