Tkinter Label aus Schleife anzeigen Schachfiguren
Verfasst: Samstag 1. Mai 2021, 09:19
Hallo zusammen,
ich möchte gerne auf einem kleinen 3,5"-Display ein Schachbrett mit Figuren anzeigen.
Mit pygame klappt es, ich möchte aber gerne tkinter verwenden.
Ich habe Probleme damit, dass nur im mainloop Label aktualsiert etc. werden
After finde ich bei meinem Problem "unschön".
Es wird nur das Label aus dem letzten Durchlauf angezeigt.
Klar, die anderen Labelanweisungen "landen" ja nicht im mainloop.
Was kann ich tun? Geht da was ausser "after"?
from tkinter import *
from PIL import ImageTk, Image
import os.path
class CHESS:
PIECES = ({}, {})
for i, ptype in enumerate(["k", "q", "b", "n", "r", "p"]):
for side, ctype in enumerate(["w", "b"]):
PIECES[side][ptype] = Image.open(os.path.join("img", ctype+ptype+".png"))
def initBoardVars():
side = False
board = [
[
[1, 5, "p"], [2, 7, "p"], [3, 7, "p"], [4, 7, "p"],
[5, 7, "p"], [6, 7, "p"], [7, 7, "p"], [8, 7, "p"],
[1, 8, "r"], [2, 8, "n"], [3, 8, "b"], [4, 8, "q"],
[5, 8, "k"], [6, 8, "b"], [7, 8, "n"], [8, 8, "r"],
], [
[1, 2, "p"], [2, 2, "p"], [3, 2, "p"], [4, 2, "p"],
[5, 2, "p"], [6, 2, "p"], [7, 2, "p"], [8, 2, "p"],
[1, 1, "r"], [2, 1, "n"], [3, 1, "b"], [4, 1, "q"],
[5, 1, "k"], [6, 1, "b"], [7, 1, "n"], [8, 1, "r"],
]
]
flags = [[True for _ in range(4)], None]
return side, board, flags
# ermittelt Pixelposition x
def posx(x):
return (-4 + ((x-1) * 40))
# ermittelt Pixelposition y
def posy(y):
return (-4 + ((y-1) * 40))
fenster = Tk()
fenster.geometry('320x480')
side, board, flags = initBoardVars()
q = 0
label = { }
for side in range(2):
for x, y, ptype in board[side]:
image1 = ImageTk.PhotoImage(CHESS.PIECES[side][ptype])
label[q] = Label(image=image1)
label[q].place(x=posx(x),y=posy(y))
q = q + 1
fenster.mainloop()
ich möchte gerne auf einem kleinen 3,5"-Display ein Schachbrett mit Figuren anzeigen.
Mit pygame klappt es, ich möchte aber gerne tkinter verwenden.
Ich habe Probleme damit, dass nur im mainloop Label aktualsiert etc. werden
After finde ich bei meinem Problem "unschön".
Es wird nur das Label aus dem letzten Durchlauf angezeigt.
Klar, die anderen Labelanweisungen "landen" ja nicht im mainloop.
Was kann ich tun? Geht da was ausser "after"?
from tkinter import *
from PIL import ImageTk, Image
import os.path
class CHESS:
PIECES = ({}, {})
for i, ptype in enumerate(["k", "q", "b", "n", "r", "p"]):
for side, ctype in enumerate(["w", "b"]):
PIECES[side][ptype] = Image.open(os.path.join("img", ctype+ptype+".png"))
def initBoardVars():
side = False
board = [
[
[1, 5, "p"], [2, 7, "p"], [3, 7, "p"], [4, 7, "p"],
[5, 7, "p"], [6, 7, "p"], [7, 7, "p"], [8, 7, "p"],
[1, 8, "r"], [2, 8, "n"], [3, 8, "b"], [4, 8, "q"],
[5, 8, "k"], [6, 8, "b"], [7, 8, "n"], [8, 8, "r"],
], [
[1, 2, "p"], [2, 2, "p"], [3, 2, "p"], [4, 2, "p"],
[5, 2, "p"], [6, 2, "p"], [7, 2, "p"], [8, 2, "p"],
[1, 1, "r"], [2, 1, "n"], [3, 1, "b"], [4, 1, "q"],
[5, 1, "k"], [6, 1, "b"], [7, 1, "n"], [8, 1, "r"],
]
]
flags = [[True for _ in range(4)], None]
return side, board, flags
# ermittelt Pixelposition x
def posx(x):
return (-4 + ((x-1) * 40))
# ermittelt Pixelposition y
def posy(y):
return (-4 + ((y-1) * 40))
fenster = Tk()
fenster.geometry('320x480')
side, board, flags = initBoardVars()
q = 0
label = { }
for side in range(2):
for x, y, ptype in board[side]:
image1 = ImageTk.PhotoImage(CHESS.PIECES[side][ptype])
label[q] = Label(image=image1)
label[q].place(x=posx(x),y=posy(y))
q = q + 1
fenster.mainloop()