Ich hab's jetzt doch geschafft, bin vorher an einer Stelle Hängen geblieben.
Code: Alles auswählen
import tkinter
import tkinter.messagebox as messagebox
import tkinter.simpledialog as simpledialog
class Map_Editor(object):
def __init__(self, x, y):
self.x = x
self.y = y
self.MAP_CHARS = {'': '1', ' ': '1', '#': '2', 'X': '2', 'K': '3', 'D': '4'}
self.editorwindow = tkinter.Tk()
self.editorwindow.title('Pacman MapEditor')
self.arrow_up = tkinter.PhotoImage(file='pfeil_rauf.gif')
self.arrow_down = tkinter.PhotoImage(file='pfeil_runter.gif')
self.entrys = {}
for y_coord in range(y):
for x_coord in range(x):
self.entrys[(x_coord,y_coord)] = tkinter.Entry(self.editorwindow, width=1)
self.entrys[(x_coord,y_coord)].grid(row=y_coord, column=x_coord)
tkinter.Button(self.editorwindow, image=self.arrow_down, command=self.generate_mapcode).grid(row=y+1, column=0, \
columnspan=x//2, rowspan=2, sticky='nesw')
tkinter.Button(self.editorwindow, image=self.arrow_up, command=self.regenerate_mapcode).grid(row=y+1, column=(x//2)+1, \
columnspan=x//2, rowspan=2, sticky='nesw')
self.mapcodeentry = tkinter.Entry(self.editorwindow)
self.mapcodeentry.grid(row=y+3, column=0, columnspan=x, sticky='nesw')
tkinter.Button(self.editorwindow, text='Löschen', command=self.delete_map).grid(row=y+4, column=0, columnspan=x, sticky='nesw')
def generate_mapcode(self):
listnumber = simpledialog.askstring('MapEditor', 'Bitte die Listen nummer eingeben:')
mapcode = '{'
for y_coord in range(self.y):
for x_coord in range(self.x):
try:
field_content = self.entrys[(x_coord,y_coord)].get().upper()
if len(field_content) != 0:
field_content = field_content[0]
mapcode += ''.join((self.MAP_CHARS[field_content], ','))
except KeyError:
mapcode += '1,'
mapcode = mapcode[:-1] #Löscht das überflüssige Komma
mapcode += ''.join(('}->List ', listnumber))
self.mapcodeentry.delete(0, 'end')
self.mapcodeentry.insert(0, mapcode)
def regenerate_mapcode(self):
pass
def delete_map(self):
for entry in self.entrys:
self.entrys[entry].delete(0, 'end')
editor = Map_Editor(21, 7)
tkinter.mainloop()
Sieht dann so aus:
(Der Löschbutton fehlt noch.)

Und das Beste, jetzt sind die Größeren Maps sogar noch schneller als vorher die kleinste. Aber leider auf kosten der Render Geschwindigkeit. Aber das kann man verschmerzen bei einem Taschenrechner...
Aber jetzt würde mich interessieren wie ihr den Style bewertet.
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.