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('', 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('', 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()