##May 2010 ##csc323 ##gui for the Join a networked game import sys from tkinter import * from ButtonCreator import * sys.path.append('../model') sys.path.append('../network') from BoardSetup import * import Menu import client def run(event = None): """Creates a text entry box for hostname and port""" root = Tk() menu = ButtonContainer(root) root.mainloop() class ButtonContainer: """Creates a frame to hold the entry fields""" def __init__(self, parent, width = 2000, bg = "darkblue"): self.container = Frame(parent, width = width, bg = "darkblue") self.container.pack(side = TOP, fill = BOTH, expand = YES) self.parent = parent self.addHostname() self.addPort() self.addLowerButtons() def addHostname(self): """Adds an entry box for the Hostname""" self.hostnameContainer = Frame(self.container, width=10, bg="darkblue") self.hostnameLabel = Label(self.hostnameContainer, text="Enter a hostname: ",\ bg = "darkblue", fg = "white") self.hostnameLabel.pack(fill=Y, side=LEFT) self.hostnameEntry = Entry(self.hostnameContainer) #default value is the instruction to enter a hostname self.hostnameEntry.insert(0,"Enter a hostname") self.hostnameEntry.pack(fill=Y, side=LEFT) self.hostnameContainer.pack(pady = 30) def addPort(self): """Adds an entry box for the Port""" self.portContainer = Frame(self.container, width=10, bg="darkblue") portLabel = Label(self.portContainer, text="Enter a port number: ",\ bg = "darkblue", fg = "white") portLabel.pack(fill=Y, side=LEFT) self.portEntry = Entry(self.portContainer) #Default port is 32333 self.portEntry.insert(0,"32333") self.portEntry.pack(fill=Y, side=LEFT) self.portContainer.pack() def addLowerButtons(self): """Add Buttons to the container""" self.lowerButtonFrame = Frame(self.container, bg="darkblue") joinGameButton = ButtonCreator(self.lowerButtonFrame, "Join",\ self.joinGame, packOption = RIGHT) mainMenuButton = ButtonCreator(self.lowerButtonFrame, "Main Menu",\ self.spawnMenu,packOption = LEFT) self.lowerButtonFrame.pack(side=BOTTOM, fill = BOTH) def spawnMenu(self, event = None): self.parent.destroy() Menu.run(event) def joinGame(self, event): host = self.hostnameEntry.get() port = int(self.portEntry.get()) lw = client.WorldClient() try: lw.connect(host, port) self.parent.destroy() BoardScreen.run(lw.ws.x, lw.ws.y, lw.ws.default, lw.ws.default.color, lw) except socket.error as e: print("Socket error:" , e)