Python Tkinter Tutorial | 2D Grid-Based Map Part 2

preview_player
Показать описание
We continue working on our 2D grid-based map in this video by drawing the map tiles and '@' symbol for the player!

2D Grid-Based Map | Full Playlist

Python Tkinter | Project Tutorials

Python Tkinter | Widget Tutorials

TkDocs

TkDocs | Canvas
Рекомендации по теме
Комментарии
Автор

FINAL CODE

from tkinter import *

class Root(Tk):
def __init__(self):
super().__init__()
self.title("2D Grid Map")
self.state("zoomed")

#Player Coords
self.player_x = 3
self.player_y = 7

#Control Frame
self.control_fr = Frame(self)
self.control_fr.pack(side=LEFT, fill=Y)

#Control - Title
self.control_lbl = Label(self.control_fr, text="Controls")
self.control_lbl.grid(row=0, column=0, columnspan=2)

#Control - World Size
self.world_size_lbl = Label(self.control_fr, text="World Size:")
self.world_size_lbl.grid(row=1, column=0)

self.world_size_var = StringVar()

self.world_size_var.trace_add("write", self.trace)

self.world_size_ent = Entry(self.control_fr,
self.world_size_ent.grid(row=1, column=1)

#Control - Update
self.update_btn = Button(self.control_fr, text="Update", command=self.update_map)
self.update_btn.grid(row=2, column=0, columnspan=2)

#Map Frame
self.map_fr = Frame(self)
self.map_fr.pack(side=LEFT, fill=BOTH, expand=1)

#Map - Location Label
self.loc_var = StringVar()
self.loc_var.set("Location: ")

self.loc_lbl = Label(self.map_fr, textvariable=self.loc_var)
self.loc_lbl.pack()

#Map - Canvas
self.map_can = Canvas(self.map_fr, bg="gray")
self.map_can.pack(fill=BOTH, expand=1)

self.trace()

def trace(self, *args):
try:
world_size =

if world_size < 1:
raise ValueError

else:


except ValueError:


def update_map(self):
self.update_loc()

#Draw Tiles
can = self.map_can
can.delete("all")

world_size =

can_w = can.winfo_width()
can_h = can.winfo_height()

tile_w = can_w / world_size
tile_h = can_h / world_size

for row in range(0, world_size):
for col in range(0, world_size):
x = col * tile_w
y = row * tile_h

x1 = x + tile_w
y1 = y + tile_h

can.create_rectangle(x, y, x1, y1)

if row == self.player_x and col == self.player_y:
y, x1, y1)

def update_loc(self):
px = str(self.player_x)
py = str(self.player_y)

self.loc_var.set("Location: {}, {}".format(px, py))

def draw_player(self, x, y, x1, y1):
#Calc Midpoint
mx = (x + x1) / 2
my = (y + y1) / 2

self.map_can.create_text(mx, my, text='@')

if ___name___ == "__main__":
root = Root()

root.mainloop()

CodeQuest
visit shbcf.ru