160 lines
5.6 KiB
Python
160 lines
5.6 KiB
Python
import tkinter as tk
|
|
import color
|
|
import main as quadraLudi
|
|
import importlib
|
|
|
|
class Lobby:
|
|
def __init__(self):
|
|
# Win
|
|
win = tk.Tk()
|
|
win.title('QuadraLudi - Lobby')
|
|
win.geometry('800x640')
|
|
win['bg'] = color.LEVEL_1
|
|
# win.resizable(False, False)
|
|
self.win = win
|
|
|
|
# Frame
|
|
self.frame = None
|
|
|
|
# Variables
|
|
self.pseudo = tk.StringVar(win, "")
|
|
self.message = tk.StringVar(win, "")
|
|
|
|
# First
|
|
self.nameDisplay()
|
|
|
|
def resetFrame(self):
|
|
if self.frame != None:
|
|
self.frame.destroy()
|
|
|
|
frame = tk.Frame(self.win, bg = color.LEVEL_1)
|
|
frame.pack(fill = tk.BOTH, expand = True, padx = 5, pady = 5)
|
|
self.frame = frame
|
|
|
|
def nameDisplay(self):
|
|
self.resetFrame()
|
|
|
|
# Place
|
|
pseudoFrame = tk.LabelFrame(self.frame, text = 'Pseudo', bg = color.LEVEL_1, fg = color.PURPLE)
|
|
pseudoFrame.place(relx = 0.5, rely = 0.5, width = 200, height = 50, anchor = 'center')
|
|
|
|
entry = tk.Entry(pseudoFrame, textvariable = self.pseudo, bg = color.LEVEL_2, fg = color.GHOST)
|
|
entry.bind('<Return>', lambda e: self.nameConfirm())
|
|
entry.pack(side = tk.LEFT, expand = True)
|
|
entry.focus()
|
|
tk.Button(
|
|
pseudoFrame, text = 'Valider', bg = color.PURPLE, fg = color.LEVEL_1,
|
|
command = lambda: self.nameConfirm()
|
|
).pack(side = tk.LEFT, expand = True)
|
|
|
|
def lobbyDisplay(self):
|
|
self.resetFrame()
|
|
|
|
# Configure layout
|
|
mainFrame = self.frame
|
|
mainFrame.columnconfigure(0, weight = 1)
|
|
mainFrame.columnconfigure(1, weight = 4)
|
|
mainFrame.rowconfigure(0, weight = 1)
|
|
|
|
# Score
|
|
scoreFrame = tk.LabelFrame(mainFrame, text = 'Score', bg = color.LEVEL_1, fg = color.PURPLE, font = (None, 12))
|
|
scoreFrame.grid(column = 0, row = 0, sticky = 'NSEW', padx = 5)
|
|
self.scoreFrame = scoreFrame
|
|
self.addScoreEntry(1, 'Eveldee', 2354)
|
|
self.addScoreEntry(2, 'Fetyrix', 42)
|
|
|
|
# Chat
|
|
chatFrame = tk.LabelFrame(mainFrame, text = 'Chat', bg = color.LEVEL_1, fg = color.PURPLE, font = (None, 12))
|
|
chatFrame.grid(column = 1, row = 0, sticky = 'NSEW', padx = 5)
|
|
self.chatFrame = chatFrame
|
|
self.addChatEntry('16:45', 'Eveldee', 'Hello')
|
|
self.addChatEntry('16:46', 'Fetyrix', 'Je suis un très long text text text text text text text text text text text text text text text text')
|
|
|
|
bottomFrame = tk.Frame(chatFrame, bg = color.LEVEL_5)
|
|
bottomFrame.pack(side = tk.BOTTOM, fill = tk.X)
|
|
entry = tk.Entry(bottomFrame, textvariable = self.message, bg = color.LEVEL_1, fg = color.GHOST, font = (None, 11))
|
|
entry.bind('<Return>', lambda e: self.sendMessage())
|
|
entry.pack(side = tk.LEFT, fill = tk.BOTH, expand = True, padx = 5, pady = 5)
|
|
entry.focus()
|
|
self.chatEntry = entry
|
|
tk.Button(
|
|
bottomFrame, text = 'Envoyer', bg = color.PURPLE, fg = color.LEVEL_1,
|
|
command = lambda: self.sendMessage()
|
|
).pack(side = tk.LEFT, padx = 5, pady = 5)
|
|
|
|
# Play
|
|
tk.Button(
|
|
mainFrame, text = 'Jouer', bg = color.PURPLE, fg = color.LEVEL_1,
|
|
command = lambda: self.play()
|
|
).grid(column = 0, row = 1, columnspan = 2, sticky = 'NSEW', padx = 5, pady = 5)
|
|
|
|
def nameConfirm(self):
|
|
pseudo = self.pseudo.get()
|
|
|
|
if pseudo == '':
|
|
return
|
|
|
|
self.lobbyDisplay()
|
|
|
|
def sendMessage(self):
|
|
# Check empty
|
|
message = self.message.get()
|
|
if message == '':
|
|
return
|
|
|
|
# Send
|
|
|
|
|
|
# Clear
|
|
self.message.set('')
|
|
|
|
def sendScore(self, score):
|
|
pass
|
|
|
|
def play(self):
|
|
# Reload
|
|
importlib.reload(quadraLudi)
|
|
|
|
# Minimize
|
|
self.win.iconify()
|
|
|
|
# Display
|
|
quadraLudi.main(self.win, lambda score: self.playEnd(score))
|
|
|
|
def playEnd(self, score):
|
|
# Display window, focus
|
|
self.win.deiconify()
|
|
self.win.focus_force()
|
|
self.chatEntry.focus()
|
|
|
|
# Send score
|
|
self.sendScore(score)
|
|
|
|
def addScoreEntry(self, rank, pseudo, score):
|
|
frame = tk.Frame(self.scoreFrame)
|
|
frame.pack(anchor = tk.W)
|
|
font = (None, 11)
|
|
tk.Label(frame, text = f'{rank}', bg = color.LEVEL_1, fg = color.PURPLE, font = font).pack(side = tk.LEFT)
|
|
tk.Label(frame, text = f'>', bg = color.LEVEL_1, fg = color.BLUE, font = font).pack(side = tk.LEFT)
|
|
tk.Label(frame, text = f'{pseudo}', bg = color.LEVEL_1, fg = color.GREEN, font = font).pack(side = tk.LEFT)
|
|
tk.Label(frame, text = f':', bg = color.LEVEL_1, fg = color.YELLOW, font = font).pack(side = tk.LEFT)
|
|
tk.Label(frame, text = f'{score}', bg = color.LEVEL_1, fg = color.PINK, font = font).pack(side = tk.LEFT)
|
|
|
|
def addChatEntry(self, time, pseudo, message):
|
|
frame = tk.Frame(self.chatFrame, bg = color.LEVEL_1)
|
|
frame.pack(anchor = tk.W)
|
|
font = (None, 10)
|
|
tk.Label(frame, text = f'[{time}]', bg = color.LEVEL_1, fg = color.PURPLE, font = font).pack(side = tk.LEFT)
|
|
tk.Label(frame, text = f'({pseudo})', bg = color.LEVEL_1, fg = color.GREEN, font = font).pack(side = tk.LEFT)
|
|
tk.Label(frame, text = f':', bg = color.LEVEL_1, fg = color.YELLOW, font = font).pack(side = tk.LEFT)
|
|
tk.Label(frame, text = f'{message}', bg = color.LEVEL_1, fg = color.PINK, font = font, wraplength = 450, justify = tk.LEFT).pack(side = tk.LEFT)
|
|
|
|
def show(self):
|
|
self.win.mainloop()
|
|
|
|
def main():
|
|
lobby = Lobby()
|
|
lobby.show()
|
|
|
|
if __name__ == "__main__":
|
|
main() |