class RuntimeSettingsView(Tkinter.Tk):
    def __init__(self, parent):
        Tkinter.Tk.__init__(self, parent)
        self.parent = parent
        self.initialize()

    # Align the window
    def align(self):
        self.update_idletasks()
        w = self.winfo_screenwidth()
        h = self.winfo_screenheight()
        size = tuple(int(_) for _ in self.geometry().split("+")[0].split("x"))
        x = w / 2 - size[0] / 2
        y = h / 2 - size[1] / 2
        x = x * (1.0 / WINDOW_ALIGN_TO_LEFT_FACTOR)
        y = y * (1.0 / WINDOW_ALIGN_TO_TOP_FACTOR)
        self.geometry("%dx%d+%d+%d" % (size + (x, y)))

    # Create label
    def createLabel(self, text, row):
        paddingLeft = WINDOW_BORDER
        paddingTop = WINDOW_BORDER if (row == 0) else 0

        labelFont = tkFont.nametofont("TkDefaultFont")

        text = text + ":"
        label = Tkinter.Label(self, anchor="e", fg="black", text=text, width=WINDOW_LABEL_WIDTH, font=labelFont)
        label.grid(
            column=0, row=row, sticky="NE", padx=(paddingLeft, WINDOW_SPACING), pady=(paddingTop, WINDOW_SPACING)
        )

    def createHeader(self, text, row):
        paddingLeft = WINDOW_BORDER
        paddingTop = WINDOW_BORDER if (row == 0) else 0

        labelFont = tkFont.nametofont("TkDefaultFont")
        labelFont = labelFont.copy()
        labelFont.config(weight="bold")

        text = text + ":"
        label = Tkinter.Label(self, anchor="e", fg="black", text=text, width=WINDOW_LABEL_WIDTH, font=labelFont)
        label.grid(
            column=0, row=row, sticky="NE", padx=(paddingLeft, WINDOW_SPACING), pady=(paddingTop, WINDOW_SPACING)
        )

    # Create textbox
    # Returns a StringVar to access the input
    def createTextbox(self, row):
        paddingRight = WINDOW_BORDER
        paddingTop = WINDOW_BORDER if (row == 0) else 0

        textboxVariable = Tkinter.StringVar()
        textbox = Tkinter.Entry(self, textvariable=textboxVariable, width=WINDOW_TEXTBOX_WIDTH)
        textbox.grid(
            column=1, row=row, sticky="NW", padx=(WINDOW_SPACING, paddingRight), pady=(paddingTop, WINDOW_SPACING)
        )
        textboxVariable.set("")
        return textboxVariable

    def createDropDown(self, row, values):
        paddingRight = WINDOW_BORDER
        paddingTop = WINDOW_BORDER if (row == 0) else 0

        textboxVariable = Tkinter.StringVar()
        textbox = Tkinter.OptionMenu(self, textboxVariable, *values)
        textbox.grid(
            column=1, row=row, sticky="ew", padx=(WINDOW_SPACING, paddingRight), pady=(paddingTop, WINDOW_SPACING)
        )
        textboxVariable.set(values[0])
        return textboxVariable

    def createCheckBox(self, row):
        paddingRight = WINDOW_BORDER
        paddingTop = WINDOW_BORDER if (row == 0) else 0

        textboxVariable = Tkinter.StringVar()
        textbox = Tkinter.Checkbutton(self, variable=textboxVariable, onvalue="True", offvalue="False")
        textbox.grid(
            column=1,
            row=row,
            sticky="NW",
            padx=(WINDOW_TEXTBOX_WIDTH * 3, paddingRight),
            pady=(paddingTop, WINDOW_SPACING),
        )
        textboxVariable.set("False")
        return textboxVariable

    def finishRow(self):
        self.nextRow = self.nextRow + 1

    def getLayoutValues(self):
        values = []
        for layout in glob.glob("layouts/*.lay"):
            values.append(layout.replace("layouts", "")[1:].replace(".lay", ""))

        return values

    def getPacmanValues(self):
        values = []
        files = glob.glob("*Agents.py")
        for filename in files:
            if "ghost" in filename.lower():
                continue

            with open(filename) as file:
                content = file.readlines()
                for line in content:
                    if ("class" in line) and ("agent" in line.lower()):
                        match = re.search("class (.*?)\(", line)
                        values.append(match.group(1).strip())

        return values

    # Initialize the window
    def initialize(self):
        self.nextRow = 0
        self.grid()

        # Labels and textboxes for different attributes
        self.createHeader("Sarsa-Lambda-Parameter", self.nextRow)
        self.finishRow()

        self.createLabel("Groesse des Ringpuffers", self.nextRow)
        self.stepsVar = self.createTextbox(self.nextRow)
        self.finishRow()

        self.createLabel("Alpha", self.nextRow)
        self.alphaVar = self.createTextbox(self.nextRow)
        self.finishRow()

        self.createLabel("Gamma", self.nextRow)
        self.gammaVar = self.createTextbox(self.nextRow)
        self.finishRow()

        self.createLabel("Epsilon", self.nextRow)
        self.epsilonVar = self.createTextbox(self.nextRow)
        self.finishRow()

        self.createLabel("Lambda", self.nextRow)
        self.lambdaVar = self.createTextbox(self.nextRow)
        self.finishRow()

        # Button to apply default settings
        defaultSettingsButton = Tkinter.Button(
            self, text=u"Standard-Einstellungen laden", command=self.OnDefaultSettingsButtonClick
        )
        defaultSettingsButton.grid(
            column=0,
            row=self.nextRow,
            sticky="NE",
            padx=(WINDOW_BORDER, WINDOW_SPACING),
            pady=(WINDOW_SPACING, WINDOW_SPACING),
        )

        saveSettingsButton = Tkinter.Button(
            self, text=u"   Einstellungen speichern   ", command=self.OnSaveSettingsButtonClick
        )
        saveSettingsButton.grid(
            column=1,
            row=self.nextRow,
            sticky="NW",
            padx=(WINDOW_TEXTBOX_WIDTH * 0.7, WINDOW_BORDER),
            pady=(WINDOW_SPACING, WINDOW_SPACING),
        )
        self.finishRow()

        loadSettingsButton = Tkinter.Button(
            self, text=u"         Einstellungen laden        ", command=self.OnLoadSettingsButtonClick
        )
        loadSettingsButton.grid(
            column=0,
            row=self.nextRow,
            sticky="NE",
            padx=(WINDOW_BORDER, WINDOW_SPACING),
            pady=(WINDOW_SPACING, WINDOW_SPACING),
        )

        boldFont = tkFont.nametofont("TkDefaultFont")
        boldFont = boldFont.copy()
        boldFont.config(weight="bold")

        # Exit button
        exitButton = Tkinter.Button(self, text=u" Beenden ", command=self.OnExitButtonClick)
        exitButton.grid(
            column=1,
            row=self.nextRow,
            sticky="NW",
            padx=(WINDOW_TEXTBOX_WIDTH * 0.7, WINDOW_SPACING),
            pady=(WINDOW_SPACING, WINDOW_BORDER),
        )

        # Start button
        startButton = Tkinter.Button(self, text=u" Anwenden ", command=self.OnStartButtonClick)
        startButton.grid(
            column=1,
            row=self.nextRow,
            sticky="NE",
            padx=(WINDOW_SPACING, WINDOW_TEXTBOX_WIDTH * 0.7),
            pady=(WINDOW_SPACING, WINDOW_BORDER),
        )

        # Disable resizing
        self.resizable(False, False)

        # Align the window
        self.align()

        # Create controller
        self.runtimeSettingsController = RuntimeSettingsController(self)  # TODO: ADD ATTRIBUTES

        # Load settings
        self.runtimeSettingsController.loadSettingsFromConfigFile()

    # Button events
    def OnExitButtonClick(self):
        self.quit()
        self.destroy()

    def OnStartButtonClick(self):
        if self.runtimeSettingsController is not None:
            self.runtimeSettingsController.apply()

    def OnDefaultSettingsButtonClick(self):
        if self.runtimeSettingsController is not None:
            self.runtimeSettingsController.loadDefaultSettings()

    def OnLoadSettingsButtonClick(self):
        if self.runtimeSettingsController is not None:
            self.runtimeSettingsController.loadSettingsFromConfigFile()

    def OnSaveSettingsButtonClick(self):
        if self.runtimeSettingsController is not None:
            self.runtimeSettingsController.saveSettingsToConfigFile()
Exemplo n.º 2
0
class RuntimeSettingsView(Tkinter.Tk):
    def __init__(self, parent):
        Tkinter.Tk.__init__(self, parent)
        self.parent = parent
        self.initialize()

    # Align the window
    def align(self):
        self.update_idletasks()
        w = self.winfo_screenwidth()
        h = self.winfo_screenheight()
        size = tuple(int(_) for _ in self.geometry().split('+')[0].split('x'))
        x = w / 2 - size[0] / 2
        y = h / 2 - size[1] / 2
        x = x * (1.0 / WINDOW_ALIGN_TO_LEFT_FACTOR)
        y = y * (1.0 / WINDOW_ALIGN_TO_TOP_FACTOR)
        self.geometry("%dx%d+%d+%d" % (size + (x, y)))

    # Create label
    def createLabel(self, text, row):
        paddingLeft = WINDOW_BORDER
        paddingTop = WINDOW_BORDER if (row == 0) else 0

        labelFont = tkFont.nametofont("TkDefaultFont")

        text = text + ":"
        label = Tkinter.Label(self,
                              anchor="e",
                              fg="black",
                              text=text,
                              width=WINDOW_LABEL_WIDTH,
                              font=labelFont)
        label.grid(column=0,
                   row=row,
                   sticky='NE',
                   padx=(paddingLeft, WINDOW_SPACING),
                   pady=(paddingTop, WINDOW_SPACING))

    def createHeader(self, text, row):
        paddingLeft = WINDOW_BORDER
        paddingTop = WINDOW_BORDER if (row == 0) else 0

        labelFont = tkFont.nametofont("TkDefaultFont")
        labelFont = labelFont.copy()
        labelFont.config(weight='bold')

        text = text + ":"
        label = Tkinter.Label(self,
                              anchor="e",
                              fg="black",
                              text=text,
                              width=WINDOW_LABEL_WIDTH,
                              font=labelFont)
        label.grid(column=0,
                   row=row,
                   sticky='NE',
                   padx=(paddingLeft, WINDOW_SPACING),
                   pady=(paddingTop, WINDOW_SPACING))

    # Create textbox
    # Returns a StringVar to access the input
    def createTextbox(self, row):
        paddingRight = WINDOW_BORDER
        paddingTop = WINDOW_BORDER if (row == 0) else 0

        textboxVariable = Tkinter.StringVar()
        textbox = Tkinter.Entry(self,
                                textvariable=textboxVariable,
                                width=WINDOW_TEXTBOX_WIDTH)
        textbox.grid(column=1,
                     row=row,
                     sticky='NW',
                     padx=(WINDOW_SPACING, paddingRight),
                     pady=(paddingTop, WINDOW_SPACING))
        textboxVariable.set("")
        return textboxVariable

    def createDropDown(self, row, values):
        paddingRight = WINDOW_BORDER
        paddingTop = WINDOW_BORDER if (row == 0) else 0

        textboxVariable = Tkinter.StringVar()
        textbox = Tkinter.OptionMenu(self, textboxVariable, *values)
        textbox.grid(column=1,
                     row=row,
                     sticky="ew",
                     padx=(WINDOW_SPACING, paddingRight),
                     pady=(paddingTop, WINDOW_SPACING))
        textboxVariable.set(values[0])
        return textboxVariable

    def createCheckBox(self, row):
        paddingRight = WINDOW_BORDER
        paddingTop = WINDOW_BORDER if (row == 0) else 0

        textboxVariable = Tkinter.StringVar()
        textbox = Tkinter.Checkbutton(self,
                                      variable=textboxVariable,
                                      onvalue="True",
                                      offvalue="False")
        textbox.grid(column=1,
                     row=row,
                     sticky='NW',
                     padx=(WINDOW_TEXTBOX_WIDTH * 3, paddingRight),
                     pady=(paddingTop, WINDOW_SPACING))
        textboxVariable.set("False")
        return textboxVariable

    def finishRow(self):
        self.nextRow = self.nextRow + 1

    def getLayoutValues(self):
        values = []
        for layout in glob.glob("layouts/*.lay"):
            values.append(
                layout.replace("layouts", "")[1:].replace(".lay", ""))

        return values

    def getPacmanValues(self):
        values = []
        files = glob.glob("*Agents.py")
        for filename in files:
            if ("ghost" in filename.lower()):
                continue

            with open(filename) as file:
                content = file.readlines()
                for line in content:
                    if (("class" in line) and ("agent" in line.lower())):
                        match = re.search('class (.*?)\(', line)
                        values.append(match.group(1).strip())

        return values

    # Initialize the window
    def initialize(self):
        self.nextRow = 0
        self.grid()

        # Labels and textboxes for different attributes
        self.createHeader("Sarsa-Lambda-Parameter", self.nextRow)
        self.finishRow()

        self.createLabel("Groesse des Ringpuffers", self.nextRow)
        self.stepsVar = self.createTextbox(self.nextRow)
        self.finishRow()

        self.createLabel("Alpha", self.nextRow)
        self.alphaVar = self.createTextbox(self.nextRow)
        self.finishRow()

        self.createLabel("Gamma", self.nextRow)
        self.gammaVar = self.createTextbox(self.nextRow)
        self.finishRow()

        self.createLabel("Epsilon", self.nextRow)
        self.epsilonVar = self.createTextbox(self.nextRow)
        self.finishRow()

        self.createLabel("Lambda", self.nextRow)
        self.lambdaVar = self.createTextbox(self.nextRow)
        self.finishRow()

        # Button to apply default settings
        defaultSettingsButton = Tkinter.Button(
            self,
            text=u"Standard-Einstellungen laden",
            command=self.OnDefaultSettingsButtonClick)
        defaultSettingsButton.grid(column=0,
                                   row=self.nextRow,
                                   sticky='NE',
                                   padx=(WINDOW_BORDER, WINDOW_SPACING),
                                   pady=(WINDOW_SPACING, WINDOW_SPACING))

        saveSettingsButton = Tkinter.Button(
            self,
            text=u"   Einstellungen speichern   ",
            command=self.OnSaveSettingsButtonClick)
        saveSettingsButton.grid(column=1,
                                row=self.nextRow,
                                sticky='NW',
                                padx=(WINDOW_TEXTBOX_WIDTH * 0.7,
                                      WINDOW_BORDER),
                                pady=(WINDOW_SPACING, WINDOW_SPACING))
        self.finishRow()

        loadSettingsButton = Tkinter.Button(
            self,
            text=u"         Einstellungen laden        ",
            command=self.OnLoadSettingsButtonClick)
        loadSettingsButton.grid(column=0,
                                row=self.nextRow,
                                sticky='NE',
                                padx=(WINDOW_BORDER, WINDOW_SPACING),
                                pady=(WINDOW_SPACING, WINDOW_SPACING))

        boldFont = tkFont.nametofont("TkDefaultFont")
        boldFont = boldFont.copy()
        boldFont.config(weight='bold')

        # Exit button
        exitButton = Tkinter.Button(self,
                                    text=u" Beenden ",
                                    command=self.OnExitButtonClick)
        exitButton.grid(column=1,
                        row=self.nextRow,
                        sticky='NW',
                        padx=(WINDOW_TEXTBOX_WIDTH * 0.7, WINDOW_SPACING),
                        pady=(WINDOW_SPACING, WINDOW_BORDER))

        # Start button
        startButton = Tkinter.Button(self,
                                     text=u" Anwenden ",
                                     command=self.OnStartButtonClick)
        startButton.grid(column=1,
                         row=self.nextRow,
                         sticky='NE',
                         padx=(WINDOW_SPACING, WINDOW_TEXTBOX_WIDTH * 0.7),
                         pady=(WINDOW_SPACING, WINDOW_BORDER))

        # Disable resizing
        self.resizable(False, False)

        # Align the window
        self.align()

        # Create controller
        self.runtimeSettingsController = RuntimeSettingsController(
            self)  #TODO: ADD ATTRIBUTES

        # Load settings
        self.runtimeSettingsController.loadSettingsFromConfigFile()

    # Button events
    def OnExitButtonClick(self):
        self.quit()
        self.destroy()

    def OnStartButtonClick(self):
        if (self.runtimeSettingsController is not None):
            self.runtimeSettingsController.apply()

    def OnDefaultSettingsButtonClick(self):
        if (self.runtimeSettingsController is not None):
            self.runtimeSettingsController.loadDefaultSettings()

    def OnLoadSettingsButtonClick(self):
        if (self.runtimeSettingsController is not None):
            self.runtimeSettingsController.loadSettingsFromConfigFile()

    def OnSaveSettingsButtonClick(self):
        if (self.runtimeSettingsController is not None):
            self.runtimeSettingsController.saveSettingsToConfigFile()
    def initialize(self):
        self.nextRow = 0
        self.grid()

        # Labels and textboxes for different attributes
        self.createHeader("Sarsa-Lambda-Parameter", self.nextRow)
        self.finishRow()

        self.createLabel("Groesse des Ringpuffers", self.nextRow)
        self.stepsVar = self.createTextbox(self.nextRow)
        self.finishRow()

        self.createLabel("Alpha", self.nextRow)
        self.alphaVar = self.createTextbox(self.nextRow)
        self.finishRow()

        self.createLabel("Gamma", self.nextRow)
        self.gammaVar = self.createTextbox(self.nextRow)
        self.finishRow()

        self.createLabel("Epsilon", self.nextRow)
        self.epsilonVar = self.createTextbox(self.nextRow)
        self.finishRow()

        self.createLabel("Lambda", self.nextRow)
        self.lambdaVar = self.createTextbox(self.nextRow)
        self.finishRow()

        # Button to apply default settings
        defaultSettingsButton = Tkinter.Button(
            self, text=u"Standard-Einstellungen laden", command=self.OnDefaultSettingsButtonClick
        )
        defaultSettingsButton.grid(
            column=0,
            row=self.nextRow,
            sticky="NE",
            padx=(WINDOW_BORDER, WINDOW_SPACING),
            pady=(WINDOW_SPACING, WINDOW_SPACING),
        )

        saveSettingsButton = Tkinter.Button(
            self, text=u"   Einstellungen speichern   ", command=self.OnSaveSettingsButtonClick
        )
        saveSettingsButton.grid(
            column=1,
            row=self.nextRow,
            sticky="NW",
            padx=(WINDOW_TEXTBOX_WIDTH * 0.7, WINDOW_BORDER),
            pady=(WINDOW_SPACING, WINDOW_SPACING),
        )
        self.finishRow()

        loadSettingsButton = Tkinter.Button(
            self, text=u"         Einstellungen laden        ", command=self.OnLoadSettingsButtonClick
        )
        loadSettingsButton.grid(
            column=0,
            row=self.nextRow,
            sticky="NE",
            padx=(WINDOW_BORDER, WINDOW_SPACING),
            pady=(WINDOW_SPACING, WINDOW_SPACING),
        )

        boldFont = tkFont.nametofont("TkDefaultFont")
        boldFont = boldFont.copy()
        boldFont.config(weight="bold")

        # Exit button
        exitButton = Tkinter.Button(self, text=u" Beenden ", command=self.OnExitButtonClick)
        exitButton.grid(
            column=1,
            row=self.nextRow,
            sticky="NW",
            padx=(WINDOW_TEXTBOX_WIDTH * 0.7, WINDOW_SPACING),
            pady=(WINDOW_SPACING, WINDOW_BORDER),
        )

        # Start button
        startButton = Tkinter.Button(self, text=u" Anwenden ", command=self.OnStartButtonClick)
        startButton.grid(
            column=1,
            row=self.nextRow,
            sticky="NE",
            padx=(WINDOW_SPACING, WINDOW_TEXTBOX_WIDTH * 0.7),
            pady=(WINDOW_SPACING, WINDOW_BORDER),
        )

        # Disable resizing
        self.resizable(False, False)

        # Align the window
        self.align()

        # Create controller
        self.runtimeSettingsController = RuntimeSettingsController(self)  # TODO: ADD ATTRIBUTES

        # Load settings
        self.runtimeSettingsController.loadSettingsFromConfigFile()
Exemplo n.º 4
0
    def initialize(self):
        self.nextRow = 0
        self.grid()

        # Labels and textboxes for different attributes
        self.createHeader("Sarsa-Lambda-Parameter", self.nextRow)
        self.finishRow()

        self.createLabel("Groesse des Ringpuffers", self.nextRow)
        self.stepsVar = self.createTextbox(self.nextRow)
        self.finishRow()

        self.createLabel("Alpha", self.nextRow)
        self.alphaVar = self.createTextbox(self.nextRow)
        self.finishRow()

        self.createLabel("Gamma", self.nextRow)
        self.gammaVar = self.createTextbox(self.nextRow)
        self.finishRow()

        self.createLabel("Epsilon", self.nextRow)
        self.epsilonVar = self.createTextbox(self.nextRow)
        self.finishRow()

        self.createLabel("Lambda", self.nextRow)
        self.lambdaVar = self.createTextbox(self.nextRow)
        self.finishRow()

        # Button to apply default settings
        defaultSettingsButton = Tkinter.Button(
            self,
            text=u"Standard-Einstellungen laden",
            command=self.OnDefaultSettingsButtonClick)
        defaultSettingsButton.grid(column=0,
                                   row=self.nextRow,
                                   sticky='NE',
                                   padx=(WINDOW_BORDER, WINDOW_SPACING),
                                   pady=(WINDOW_SPACING, WINDOW_SPACING))

        saveSettingsButton = Tkinter.Button(
            self,
            text=u"   Einstellungen speichern   ",
            command=self.OnSaveSettingsButtonClick)
        saveSettingsButton.grid(column=1,
                                row=self.nextRow,
                                sticky='NW',
                                padx=(WINDOW_TEXTBOX_WIDTH * 0.7,
                                      WINDOW_BORDER),
                                pady=(WINDOW_SPACING, WINDOW_SPACING))
        self.finishRow()

        loadSettingsButton = Tkinter.Button(
            self,
            text=u"         Einstellungen laden        ",
            command=self.OnLoadSettingsButtonClick)
        loadSettingsButton.grid(column=0,
                                row=self.nextRow,
                                sticky='NE',
                                padx=(WINDOW_BORDER, WINDOW_SPACING),
                                pady=(WINDOW_SPACING, WINDOW_SPACING))

        boldFont = tkFont.nametofont("TkDefaultFont")
        boldFont = boldFont.copy()
        boldFont.config(weight='bold')

        # Exit button
        exitButton = Tkinter.Button(self,
                                    text=u" Beenden ",
                                    command=self.OnExitButtonClick)
        exitButton.grid(column=1,
                        row=self.nextRow,
                        sticky='NW',
                        padx=(WINDOW_TEXTBOX_WIDTH * 0.7, WINDOW_SPACING),
                        pady=(WINDOW_SPACING, WINDOW_BORDER))

        # Start button
        startButton = Tkinter.Button(self,
                                     text=u" Anwenden ",
                                     command=self.OnStartButtonClick)
        startButton.grid(column=1,
                         row=self.nextRow,
                         sticky='NE',
                         padx=(WINDOW_SPACING, WINDOW_TEXTBOX_WIDTH * 0.7),
                         pady=(WINDOW_SPACING, WINDOW_BORDER))

        # Disable resizing
        self.resizable(False, False)

        # Align the window
        self.align()

        # Create controller
        self.runtimeSettingsController = RuntimeSettingsController(
            self)  #TODO: ADD ATTRIBUTES

        # Load settings
        self.runtimeSettingsController.loadSettingsFromConfigFile()