Textformatierungsprogramm hat eine unheimliche Endlosschleife
Verfasst: Montag 3. Oktober 2016, 14:12
Ich möchte mit pygame png-Bilder inklusive formatiertem Text aus anderen png-Bildern und nicht formatiertem Text erstellen. Damit bin ich fast fertig, allerdings habe ich noch Probleme mit der Funktion zum Formatieren.
Die Funktion soll mit einer gegeben Breite die Positionen der Wörter so berechnen, dass sich eine Blocksatzformatierung ergibt. Allerdings hat die Funktion eine Endlosschleife, deren Existenz ich mir nicht erklären kann. Ich habe bei meinen Untersuchungen herausgefunden, dass die Variable n, die für das Ende der while-Schleife ja maßgeblich ist, immer wieder 0 wird. Außerdem habe ich print-Statements eingebaut um den Verlauf zu verfolgen, dabei wurde ein print-Statement, das in der Funktion ÜBER der while-Schleife ist, regelmäßig wieder aufgerufen, NACHDEM schon Code in der while-Schleife ausgeführt wurde. Auch das ist mir unerklärlich.
Das ist die Funktion, dabei ist textblock[1] der zu formatierende String.
Vielen Dank schon mal für jede Hilfe.
Die Funktion soll mit einer gegeben Breite die Positionen der Wörter so berechnen, dass sich eine Blocksatzformatierung ergibt. Allerdings hat die Funktion eine Endlosschleife, deren Existenz ich mir nicht erklären kann. Ich habe bei meinen Untersuchungen herausgefunden, dass die Variable n, die für das Ende der while-Schleife ja maßgeblich ist, immer wieder 0 wird. Außerdem habe ich print-Statements eingebaut um den Verlauf zu verfolgen, dabei wurde ein print-Statement, das in der Funktion ÜBER der while-Schleife ist, regelmäßig wieder aufgerufen, NACHDEM schon Code in der while-Schleife ausgeführt wurde. Auch das ist mir unerklärlich.
Das ist die Funktion, dabei ist textblock[1] der zu formatierende String.
Code: Alles auswählen
def formattextblock(self, textblock, y0, size):
x = self.vtext[3]
y = y0
n = 0
w = 0
shortstring = ""
longstring = ""
textfont = pygame.font.SysFont("georgia", size)
wordlist = textblock[1].split(" ")
lines = []
length = len(wordlist)
while n < length:
longstring = shortstring + wordlist[n]
testlong = textfont.render(longstring, True, (0,0,0))
if (testlong.get_width() + self.vtext[8]*(w-1) <= self.vtext[2]) and n < length - 1:
shortstring = longstring
w += 1
n += 1
else:
if n == length - 1:
w += 1
testshort = textfont.render(shortstring, True, (0,0,0))
if w > 1:
actualinter = (self.vtext[2]-testshort.get_width())/(w-1)
else:
actualinter = 0
line = []
nstart = n - w
while nstart < n:
word = [x, y, wordlist[nstart]]
line.append(word)
testword = textfont.render(wordlist[nstart], True, (0,0,0))
x += (testword.get_width() + actualinter)
nstart += 1
lines.append(line)
x = self.vtext[3]
if n < length - 1:
y += (size + self.vtext[5])
else:
y += (size + self.vtext[9])
longstring = ""
shortstring = ""
w = 0
return lines, y