simple player ranking
This commit is contained in:
parent
7680436bb7
commit
8b453a14bd
2 changed files with 76 additions and 1 deletions
|
|
@ -3,4 +3,4 @@ from random import randint
|
||||||
class Player:
|
class Player:
|
||||||
def __init__(self, name: str):
|
def __init__(self, name: str):
|
||||||
self.name = name
|
self.name = name
|
||||||
self.id = randint(0, 10**100)
|
self.score = randint(0, 100) * 0
|
||||||
|
|
@ -5,8 +5,83 @@ from tkinter import ttk
|
||||||
from player import Player
|
from player import Player
|
||||||
from game import Game
|
from game import Game
|
||||||
|
|
||||||
|
PLAYERS: list[Player] = []
|
||||||
|
|
||||||
|
# init tkinter
|
||||||
root = Tk()
|
root = Tk()
|
||||||
frm = ttk.Frame(root, padding=10)
|
frm = ttk.Frame(root, padding=10)
|
||||||
frm.grid()
|
frm.grid()
|
||||||
|
|
||||||
|
# init ui
|
||||||
|
|
||||||
|
# players
|
||||||
|
ttk.Label(frm, text="Rank").grid(column=0, row=0)
|
||||||
|
ttk.Label(frm, text="Player").grid(column=1, row=0)
|
||||||
|
ttk.Label(frm, text="Score").grid(column=2, row=0)
|
||||||
|
|
||||||
|
entry_player_name = ttk.Entry(frm, width=30)
|
||||||
|
entry_player_name.grid(column=1, row=len(PLAYERS) + 1)
|
||||||
|
|
||||||
|
# adding player
|
||||||
|
def addPlayer(entry: Entry):
|
||||||
|
txt = entry.get()
|
||||||
|
if txt:
|
||||||
|
PLAYERS.append(Player(txt))
|
||||||
|
entry.delete(0, END)
|
||||||
|
refreshUi()
|
||||||
|
|
||||||
|
btn_player_name = ttk.Button(frm, text="Add", command=lambda : addPlayer(entry_player_name))
|
||||||
|
btn_player_name.grid(column=2, row=1 + len(PLAYERS))
|
||||||
|
|
||||||
|
# tables
|
||||||
|
# TODO
|
||||||
|
|
||||||
|
# table history
|
||||||
|
# TODO
|
||||||
|
|
||||||
|
# refresh ui
|
||||||
|
def refreshUi():
|
||||||
|
# remove old labels
|
||||||
|
for widget in frm.winfo_children():
|
||||||
|
if widget not in [entry_player_name, btn_player_name]:
|
||||||
|
info = widget.grid_info()
|
||||||
|
if info.get('row', 0) > 0 and info.get('row', 0) < 100:
|
||||||
|
widget.destroy()
|
||||||
|
|
||||||
|
# show players
|
||||||
|
PLAYERS.sort(key=lambda p : p.score, reverse=True)
|
||||||
|
for i in range(len(PLAYERS)):
|
||||||
|
ttk.Label(frm, text=f"{i+1}").grid(column=0, row=i+1)
|
||||||
|
playerLabel = ttk.Label(frm, text=PLAYERS[i].name)
|
||||||
|
playerLabel.grid(column=1, row=i+1)
|
||||||
|
ttk.Label(frm, text=f"{PLAYERS[i].score}").grid(column=2, row=i+1)
|
||||||
|
|
||||||
|
# change player name
|
||||||
|
def onClick(event, player=PLAYERS[i]):
|
||||||
|
popup = Toplevel(root)
|
||||||
|
|
||||||
|
entry = ttk.Entry(popup, width=30)
|
||||||
|
entry.insert(0, player.name)
|
||||||
|
entry.grid(column=0, row=0)
|
||||||
|
|
||||||
|
def changeName():
|
||||||
|
name = entry.get()
|
||||||
|
if name and not name in [p.name for p in PLAYERS]:
|
||||||
|
player.name = name
|
||||||
|
entry.delete(0, END)
|
||||||
|
cancelTopLevel(popup)
|
||||||
|
|
||||||
|
ttk.Button(popup, text="Change", command=changeName).grid(column=1, row=0)
|
||||||
|
ttk.Button(popup, text="Cancel", command=lambda : cancelTopLevel(popup)).grid(column=2, row=0)
|
||||||
|
|
||||||
|
playerLabel.bind("<Button-1>", onClick)
|
||||||
|
|
||||||
|
# adding player
|
||||||
|
entry_player_name.grid(column=1, row=len(PLAYERS) + 1)
|
||||||
|
btn_player_name.grid(column=2, row=1 + len(PLAYERS))
|
||||||
|
|
||||||
|
def cancelTopLevel(tl: Toplevel):
|
||||||
|
tl.destroy()
|
||||||
|
refreshUi()
|
||||||
|
|
||||||
root.mainloop()
|
root.mainloop()
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue