@sea-live: IMHO viel zu viele "magische" Zahlen, die man durch verständlich benannte Konstanten bzw. Berechnungen ersetzen sollte.
Ausserdem sieht der Code nicht gut durchdacht aus. Setz zum Beispiel mal `plaezebelegt` (sic!) auf 1, dann fliegt einem ein `NameError` um die Ohren, weil dann im ersten Durchlauf in keiner der ``if``-Verzweigungen `color` an einen Wert gebunden wird. Bei den Werten in den Abfragen scheinen mir die 90 und die 92 auch komisch. Wo liegt denn die Grenze? Das wäre vielleicht mit einer Liste mit den Grenzen und einer Schleife besser lösbar. Wobei: Hängen die Farben eigentlich wirklich von der aktuellen Platzzahl ab, oder nicht vielleicht doch von der Sitzreihe? So sieht jedenfalls die Grafik aus, die Du erzeugst, und dann wäre es einfacher und verständlicher nach der Sitzreihe zu färben.
Das Verhältnis von `count` zu `plaezebelegt` taucht auch in jedem der 4 ``if``\s als Bestandteil auf, da würde es Sinn machen, dass in eine übergeordnete Entscheidung heraus zu ziehen.
Mal eine Variante, die sich in der Grösse den Daten und den Vorgaben anpasst:
Code: Alles auswählen
#!/usr/bin/env python
# coding: utf-8
import Tkinter as tk
def main():
master = tk.Tk()
seats_per_row = [12, 12, 15, 15, 18, 18, 21, 21, 24]
seats_total = sum(seats_per_row)
row_count = len(seats_per_row)
plaetzebelegt = 142 # Von einer datenbank übergeben.
assert plaetzebelegt <= seats_total
# Grösse eines Sitzes.
seat_size = 16
# Platz zwischen den Sitzen.
seat_padding = 4
# Platz zwischen Rand und den Sitzen.
margin = 20
width = (seat_size + seat_padding) * row_count + 2 * margin
height = (seat_size + seat_padding) * max(seats_per_row) + 2 * margin
w = tk.Canvas(master, width=width, height=height)
w.pack()
w.create_rectangle(0, 0, width, height, fill='blue')
colors = ['red', 'yellow', 'green', 'white']
count = 1
for i, row in enumerate(seats_per_row):
for k in xrange(row):
if count < plaetzebelegt:
for color, limit in enumerate([39, 90, seats_total]):
if count <= limit:
break
else:
color = 3
size = seat_size + seat_padding
x = width - size * (i + 1) - margin
y = margin + size * k + (size / 2) * (row_count - 1 - i)
w.create_rectangle(x,
y,
x + seat_size,
y + seat_size,
fill=colors[color])
w.create_text(x + seat_size / 2,
y + seat_size / 2,
text=str(k + 1),
fill='black',
font=('Arial', '10'))
count += 1
tk.mainloop()
if __name__ == '__main__':
main()