Example #1
0
    def __init__(self, parent, back=None):
        """
        Arguments:
            parent -- The parent tkinter object for this screen
            back -- None if there is no menu to go back to. Otherwise
            the menu that the back button should lead to.
        """
        super().__init__()
        self.parent = parent

        # If we need a back button, load the icon and create the button.
        if back is not None:
            self.backImage = tk.PhotoImage(
                file=getResourcePath("assets/settings/back.png"))
            self.backButton = tk.Button(
                self,
                image=self.backImage,
                command=lambda: parent.changeMenu(back),
                borderwidth=0)
            self.backButton.grid(row=0, column=0, sticky="NW", pady=5, padx=5)

        # Create the exit button after loading the icon.
        self.exitImage = tk.PhotoImage(
            file=getResourcePath("assets/settings/exit.png"))
        self.exitButton = tk.Button(self,
                                    image=self.exitImage,
                                    command=self.exitMenu,
                                    borderwidth=0)
        self.exitButton.grid(row=0, column=0, sticky="NE", pady=5, padx=5)
Example #2
0
    def loadGUI(self):
        """
        Method used to load the GUI aspects of the homescreen.
        Arguments:
            NONE
        """
        self.titleImage = tk.PhotoImage(
            file=getResourcePath("assets/home/title.png"))
        self.title = ttk.Label(self,
                               image=self.titleImage,
                               text="Path Finding Thing",
                               style="Title.TLabel")
        self.title.grid(row=0, column=0, pady=50)

        self.settingsImage = tk.PhotoImage(
            file=getResourcePath("assets/home/settings.png"))
        self.settingsButton = tk.Button(
            self,
            image=self.settingsImage,
            command=lambda: self.parent.changeMenu(MenuList),
            borderwidth=0)
        self.settingsButton.grid(row=0, column=0, sticky="NE", pady=5, padx=5)

        self.helpImage = tk.PhotoImage(
            file=getResourcePath("assets/home/help.png"))
        self.helpButton = tk.Button(self,
                                    image=self.helpImage,
                                    command=self.showHelp,
                                    borderwidth=0)
        self.helpButton.grid(row=0, column=0, sticky="NW", pady=5, padx=5)

        self.generateImage = tk.PhotoImage(
            file=getResourcePath("assets/home/generate.png"))
        self.generateButton = tk.Button(self,
                                        image=self.generateImage,
                                        command=self.generateMaze,
                                        borderwidth=0)
        self.generateButton.grid(row=1, column=0, pady=30)

        self.loadImage = tk.PhotoImage(
            file=getResourcePath("assets/home/load.png"))
        self.loadButton = tk.Button(self,
                                    image=self.loadImage,
                                    command=self.parent.loadMazeFile,
                                    borderwidth=0)
        self.loadButton.grid(row=2, column=0, pady=30)

        self.grid_rowconfigure(10, weight=100)

        self.footer = ttk.Label(self,
                                text="Created By Felix J. Randle",
                                style="Footer.TLabel")
        self.footer.grid(row=10, column=0, sticky="S", pady=(80, 0))
Example #3
0
 def createWidgets(self):
     self.backImage = tk.PhotoImage(
         file=getResourcePath("assets/help/back.png")).subsample(13, 13)
     tk.Button(self,
               image=self.backImage,
               borderwidth=0,
               command=self.previousPage).grid(row=0, column=0)
     self.nextImage = tk.PhotoImage(
         file=getResourcePath("assets/help/next.png")).subsample(13, 13)
     tk.Button(self,
               image=self.nextImage,
               borderwidth=0,
               command=self.nextPage).grid(row=0, column=2)
Example #4
0
    def __init__(self, parent):
        """
        Arguments:
            parent -- The parent tkinter object for this screen.
        """
        super().__init__(parent, MenuList)

        self.loadTitle(getResourcePath("assets/settings/solverTitle.png"))

        solvers = ("Recursive Backtracker", "Dijkstra's Algorithm", "A*")

        self.solverChoice = ttk.Combobox(self,
                                         values=solvers,
                                         state="readonly",
                                         width=20,
                                         font=("arial", 14))
        self.solverChoice.set(solvers[2])
        self.solverChoice.grid(row=2, column=0, pady=20)

        self.autoStepEnabled = True
        self.autoStepButton = ttk.Button(self,
                                         text="Disable AutoStep",
                                         style="Settings.TButton",
                                         command=self.toggleAutoStep)
        self.autoStepButton.grid(row=3, column=0, pady=20)

        self.speedsFrame = tk.Frame(self)
        self.speedsFrame.grid(row=4, column=0, pady=20)

        self.speedDisplay = ttk.Label(self.speedsFrame,
                                      text="Current Speed: X1",
                                      style="Subheading.TLabel")
        self.speedDisplay.grid(row=0, column=0, columnspan=1000)

        self.speeds = [1, 2, 5, 10, 50, 100]
        self.speedItems = {}

        for speed in self.speeds:
            image = tk.PhotoImage(
                file=getResourcePath("assets/speeds/X{}.png".format(speed)))
            button = tk.Button(self.speedsFrame,
                               image=image,
                               command=lambda x=speed: self.setSpeed(x),
                               borderwidth=0)
            button.grid(row=1, column=speed)

            self.speedItems.update({speed: {"image": image, "button": button}})

        self.speed = tk.DoubleVar()
        self.speed.set(1)
        self.speed.trace("w", self.updateLabel)
Example #5
0
def main():
    qApp = QtWidgets.QApplication(sys.argv)
    backend = Backend()
    configLoader = ConfigLoader()
    window = uis.MainWindow(backend, configLoader)

    backend.register_instrument(vna.Config, vna.Driver)
    configLoader.registerInstrument(vna.Config)
    window.registerInsturmentType(
        "Vna", vna.DataWindow, vna.ConfigWindow,
        QIcon(getResourcePath('images/networkAnalyser.png')),
        vna.Config({
            'model': 'simulated',
            'segments': {
                'TM010': {
                    'type': 'Electric',
                    'f0': 2500700000.0,
                    'span': 1000000.0,
                    'points': 201,
                    'ifbw': 1000.0,
                    'power': 0.0
                }
            }
        }))
    backend.register_instrument(visaScript.Config, visaScript.Driver)
    configLoader.registerInstrument(visaScript.Config)
    window.registerInsturmentType(
        "visaScript", visaScript.DataWindow, visaScript.ConfigWindow,
        QIcon(getResourcePath('images/dcSupply.png')),
        visaScript.Config({'script': 'record_wait()\nlog("Record start")'}))

    backend.register_instrument(datalogger.Config, datalogger.Driver)
    configLoader.registerInstrument(datalogger.Config)
    window.registerInsturmentType(
        "Data Logger", datalogger.DataWindow, datalogger.ConfigWindow,
        QIcon(getResourcePath('images/dcSupply.png')),
        datalogger.Config({'model': '1365'}))
    window.show()

    if (len(sys.argv) > 1):
        window.openConfig(sys.argv[1])

    sys.exit(qApp.exec_())
Example #6
0
    def __init__(self, parent):
        """
        Arguments:
            parent -- The parent tkinter object for this screen.
        """
        super().__init__(parent, MenuList)
        self.parent = parent

        self.loadTitle(getResourcePath("assets/settings/colourTitle.png"))

        self.loadWidgets()
Example #7
0
    def loadWidgets(self):
        """
        Method for creating all the pages widgets
        """
        self.exitImage = tk.PhotoImage(
            file=getResourcePath("assets/settings/exit.png"))
        self.exitButton = tk.Button(
            self,
            image=self.exitImage,
            command=lambda: self.parent.changeMenu(None),
            borderwidth=0)
        self.exitButton.grid(row=0, column=0, sticky="NE", pady=5, padx=5)

        self.ColourSettingsIcon = tk.PhotoImage(
            file=getResourcePath("assets/settings/colourTitle.png"))
        tk.Button(self,
                  image=self.ColourSettingsIcon,
                  borderwidth=0,
                  command=lambda: self.parent.changeMenu(ColourSettings)).grid(
                      row=0, column=0, pady=70, padx=40)

        self.SolverSettingsIcon = tk.PhotoImage(
            file=getResourcePath("assets/settings/solverTitle.png"))
        tk.Button(self,
                  image=self.SolverSettingsIcon,
                  borderwidth=0,
                  command=lambda: self.parent.changeMenu(SolverSettings)).grid(
                      row=5, column=0, pady=70, padx=40)

        self.GenerationSettingsIcon = tk.PhotoImage(
            file=getResourcePath("assets/settings/generationTitle.png"))
        tk.Button(
            self,
            image=self.GenerationSettingsIcon,
            borderwidth=0,
            command=lambda: self.parent.changeMenu(GenerationSettings)).grid(
                row=10, column=0, pady=70, padx=40)
Example #8
0
    def __init__(self, parent):
        super().__init__(parent)

        self.loadTitle(getResourcePath("assets/settings/solverTitle.png"))

        ttk.Label(self, text="Current Tile:",
                  style="Header.TLabel").grid(row=1, column=0)

        self.currentTileLabel = ttk.Label(self,
                                          text="None",
                                          style="Subheading.TLabel")
        self.currentTileLabel.grid(row=2, column=0, pady=5)

        self.currentTile = tk.Button(self, width=2, height=1, bg="grey")
        self.currentTile.grid(row=3, column=0, pady=5)

        ttk.Label(self,
                  text="Please click on a tile to select it",
                  style="Subheading.TLabel").grid(row=5, column=0)

        availableTiles = ["WALL", "PATH", "START", "END"]

        currentRow = 10

        firstItem = True

        for key, item in maze.tileColours.items():
            if key.name in availableTiles:
                if firstItem:
                    self.changeTile(key, key.name.title(), item)

                    firstItem = False
                ttk.Label(self,
                          text=key.name.title(),
                          style="Subheading.TLabel").grid(row=currentRow,
                                                          column=0,
                                                          pady=5)
                tk.Button(
                    self,
                    width=2,
                    height=1,
                    bg=item[1],
                    highlightbackground=item[0],
                    command=lambda key=key, name=key.name.title(
                    ), colours=item: self.changeTile(key, name, colours)).grid(
                        row=currentRow + 1, column=0, pady=5)

                currentRow += 5
Example #9
0
    def __init__(self, parent):
        """
        Arguments:
            parent -- The parent tkinter object for this screen.
        """
        super().__init__(parent, MenuList)
        self.parent = parent

        # Load a Title button with the given file
        self.loadTitle(getResourcePath("assets/settings/generationTitle.png"))

        self.container = tk.Frame(self)
        self.container.grid(row=10, column=0, sticky="S")

        ttk.Label(self.container,
                  text="Generation Algorithm",
                  style="Header.TLabel").grid(row=1, column=0, pady=20)

        generators = ("Flood Fill", "Subchamber Division",
                      "Kruskals Algorithm", "Blank Maze")

        self.algorithmChoice = ttk.Combobox(self.container,
                                            values=generators,
                                            state="readonly",
                                            width=20,
                                            font=("arial", 14))
        self.algorithmChoice.current(2)
        self.algorithmChoice.grid(row=2, column=0, pady=20)

        ttk.Label(self.container, text="Maze Size",
                  style="Header.TLabel").grid(row=3, column=0, pady=20)

        self.mazeSize = ttk.Scale(self.container,
                                  from_=21,
                                  to=75,
                                  orient=tk.HORIZONTAL,
                                  value=37,
                                  command=self.oddOnly,
                                  length=200)
        self.mazeSize.grid(row=4, column=0, pady=20)

        self.mazeSizeLabel = ttk.Label(self.container,
                                       text=51,
                                       style="Header.TLabel")
        self.mazeSizeLabel.grid(row=5, column=0, pady=20)
Example #10
0
from PyQt5.QtCore import Qt, QVariant, QTime
from PyQt5.QtWidgets import QTableWidgetItem
from PyQt5.uic import loadUiType
import pyqtgraph as pg
import numpy as np
import array
from utils import float_to_si, getResourcePath
from .driver import lorentz_fn

DataWindowUi, DataWindowBase = loadUiType(
    getResourcePath('ui/vnaDataWindow.ui'))


class DataWindow(
        DataWindowBase, DataWindowUi):
    def __init__(self, instrument, parent=None):
        DataWindowBase.__init__(self, parent)
        self.setupUi(self)

        self.instrument = instrument

        # Create plots
        self.frequencyPlot = pg.PlotItem(title="Frequency")
        self.frequencyPlot.setLabel("left", "change in Frequency", "Hz")
        self.frequencyPlot.setLabel("bottom", "Time (s)", "")

        self.qFactorPlot = pg.PlotItem(title="Q factor")
        self.qFactorPlot.setLabel("left", "change in Q factor")
        self.qFactorPlot.setLabel("bottom", "Time (s)", "")

        self.graph.addItem(self.frequencyPlot, 0, 0)
Example #11
0
from utils import getResourcePath
from PyQt5.QtCore import Qt, QAbstractProxyModel, QModelIndex
from PyQt5.QtWidgets import QListWidgetItem
from PyQt5.uic import loadUiType

ConfigWindowUi, ConfigWindowBase = loadUiType(
    getResourcePath('ui/dataloggerConfigWindow.ui'))


class ConfigWindow(ConfigWindowBase, ConfigWindowUi):
    def __init__(self, dataloggerConfig, parent=None):
        ConfigWindowBase.__init__(self, parent)
        self.setupUi(self)

        self.config = dataloggerConfig.clone()

        self.serialPort.textEdited.connect(self.serialPortTextEdited)
        self.deviceType.currentIndexChanged[str].connect(
            self.deviceTypeCurrentIndexChanged)

        self.serialPort.setText(self.config.serialPort)
        self.deviceType.setCurrentText(str(self.config.model))

    def keyPressEvent(self, event):
        event.ignore()

    def serialPortTextEdited(self, text):
        self.config.serialPort = text

    def deviceTypeCurrentIndexChanged(self, text):
        self.config.model = text
Example #12
0
from PyQt5.QtCore import Qt, QVariant, QTime
from PyQt5.QtWidgets import QTableWidgetItem
from PyQt5.uic import loadUiType
from utils import float_to_si, getResourcePath

DataWindowUi, DataWindowBase = loadUiType(
    getResourcePath('ui/visaScriptDataWindow.ui'))


class DataWindow(
        DataWindowBase, DataWindowUi):
    def __init__(self, instrument, parent=None):
        DataWindowBase.__init__(self, parent)
        self.setupUi(self)

        self.instrument = instrument

    def addSample(self, elapsed, timestamp, sample):
        text = "{}: {}".format(timestamp.isoformat(), sample)
        self.logOutput.appendPlainText(text)

    def refresh(self):
        pass
Example #13
0
 def addPhoto(self, path):
     self.image = tk.PhotoImage(file=getResourcePath(path)).zoom(
         2, 2).subsample(5, 5)
     self.imageShown = tk.Label(self, image=self.image)
     self.imageShown.grid(row=0, column=0, pady=10)
from utils import getResourcePath
from PyQt5.uic import loadUiType
from PyQt5.QtCore import QAbstractProxyModel, Qt
from PyQt5.QtWidgets import QDialog, QListWidgetItem, QFileDialog
import os

from patch import useNativeDialog

EditInstrumentsDialogUI, EditInstrumentsDialogBase = loadUiType(
    getResourcePath('ui/editInstrumentsDialog.ui'))


class EditInstrumentsDialog(EditInstrumentsDialogBase,
                            EditInstrumentsDialogUI):
    def __init__(self,
                 instrumentConfig,
                 instrumentInfo,
                 configPath,
                 parent=None):
        EditInstrumentsDialogBase.__init__(self, parent)
        self.setupUi(self)

        self.config = instrumentConfig.clone()
        self.instrumentInfo = instrumentInfo
        self.configPath = configPath

        self.loadInstrumentIcons()

        self.instrumentType.addItems(
            list(value.name for value in self.instrumentInfo.values()))
Example #15
0
from utils import getResourcePath
from PyQt5.QtCore import Qt, QAbstractProxyModel, QModelIndex
from PyQt5.QtWidgets import QListWidgetItem
from PyQt5.uic import loadUiType
from .config import Segment

ConfigWindowUi, ConfigWindowBase = loadUiType(getResourcePath('ui/vnaConfigWindow.ui'))


class ConfigWindow(
        ConfigWindowBase, ConfigWindowUi):
    def __init__(self, vnaConfig, parent=None):
        ConfigWindowBase.__init__(self, parent)
        self._selectedSegment = None
        
        self.setupUi(self)

        
        self.config = vnaConfig.clone()
        self.segments.addItems(self.config.segments.keys())
        for i in range(self.segments.count()):
            self.segments.item(i).setFlags(Qt.ItemIsSelectable | Qt.ItemIsEditable | Qt.ItemIsEnabled)

        self.segments.currentRowChanged.connect(self.segmentsRowChanged)
        self.segments.itemChanged.connect(self.segmentsItemChanged)
        self.addSegment.clicked.connect(self.addSegmentClicked)
        self.removeSegment.clicked.connect(self.removeSegmentClicked)
        if len(self.config.segments):
            self.segments.setCurrentRow(0)
            self.segmentsRowChanged(0)
Example #16
0
    def __init__(self, parent):
        super().__init__(parent)

        self.loadTitle(getResourcePath("assets/settings/solverTitle.png"))

        self.autoStepControls = tk.Frame(self)
        self.autoStepControls.grid(row=1, column=0)

        self.play = tk.PhotoImage(
            file=getResourcePath("assets/solving/playButton.png"))
        self.playButton = tk.Button(self.autoStepControls,
                                    image=self.play,
                                    command=self.startAutoStep,
                                    borderwidth=0)
        self.playButton.grid(row=0, column=0)

        self.pause = tk.PhotoImage(
            file=getResourcePath("assets/solving/pauseButton.png"))
        self.pauseButton = tk.Button(self.autoStepControls,
                                     image=self.pause,
                                     command=self.stopAutoStep,
                                     borderwidth=0)
        self.pauseButton.grid(row=0, column=1)

        self.stop = tk.PhotoImage(
            file=getResourcePath("assets/solving/stopButton.png"))
        self.stopButton = tk.Button(self.autoStepControls,
                                    image=self.stop,
                                    command=self.stopSolve,
                                    borderwidth=0)
        self.stopButton.grid(row=0, column=2)

        self.speedsFrame = tk.Frame(self)
        self.speedsFrame.grid(row=4, column=0, pady=20)

        self.speedDisplay = ttk.Label(self.speedsFrame,
                                      text="Current Speed: X1",
                                      style="Subheading.TLabel")
        self.speedDisplay.grid(row=0, column=0, columnspan=1000)

        self.speeds = [1, 2, 5, 10, 50, 100]
        self.speedItems = {}

        for speed in self.speeds:
            image = tk.PhotoImage(
                file=getResourcePath("assets/speeds/X{}.png".format(speed)))
            button = tk.Button(
                self.speedsFrame,
                image=image,
                command=lambda x=speed: self.parent.solver.setSpeed(x),
                borderwidth=0)
            button.grid(row=1, column=speed)

            self.speedItems.update({speed: {"image": image, "button": button}})

        self.stepButton = tk.Button(self,
                                    width=10,
                                    height=2,
                                    text="Step",
                                    command=self.step)
        self.stepButton.grid(row=10, column=0, pady=5)

        self.advancedInfo = tk.IntVar()
        self.advancedInfoButton = ttk.Checkbutton(
            self,
            text="Show Advanced Information?",
            variable=self.advancedInfo)
        self.advancedInfoButton.grid(row=11, column=0, pady=5)
        self.advancedInformationFrame = tk.Frame(self)
        self.advancedInformationFrame.grid(row=15, column=0, pady=10)

        self.advancedInformation = ttk.Label(
            self.advancedInformationFrame,
            text="Advanced Solver Information",
            style="Subheading.TLabel")
        self.advancedInformation.grid(row=0, column=0, pady=10)

        self.stepCount = tk.Label(self.advancedInformationFrame,
                                  text="Steps: 0",
                                  font=("Helvetica", 12, "bold italic"))
        self.stepCount.grid(row=1, column=0)
Example #17
0
    def __init__(self, *args, **kwargs):
        """Initialise Application class."""
        super().__init__()

        # Set the Title and icon of our application.
        self.title("PathFinding")
        self.Title = "PathFinding"

        # Set default background and foreground colours for all widgets.
        self.tk_setPalette(background="#D9D9D9", foreground="#000000")

        # Set our programs icon for the top left.
        self.iconbitmap(getResourcePath("assets/maze.ico"))

        # Load in Database
        dirPath = os.path.join(os.environ['APPDATA'], 'PathFinding')
        if not os.path.exists(dirPath):
            os.makedirs(dirPath)
        filePath = os.path.join(dirPath, "userData.db")
        self.db = Database(filePath, maze.tileColours)

        # Add current user
        self.userID, colours = self.db.loginUser(os.getlogin())

        # Stop the user from resizing the screen.
        self.screenSize = 750
        # Take away 5 to account for border of screen so maze fits properly
        self.minsize(width=self.screenSize - 5, height=self.screenSize - 5)

        self.resizable(False, False)

        # Create all styles to be used for our GUI.
        self.loadStyles()

        # Ensure all placed items are centered.
        self.grid_columnconfigure(0, weight=1)

        # Create a dictionary for the screen tabs and populate it.
        self.frames = dict()

        # Load in all tabs and put them in our dictionary.
        self.frames[HomeScreen] = HomeScreen(self)
        self.frames[MazeScreen] = MazeScreen(self)

        # Load the homescreen
        self.changeFrame(HomeScreen)

        # Create a dictionary for the side menus and populate it.
        self.menus = dict()

        # Load in all menus and put them in our dictionary.
        self.menus[MenuList] = MenuList(self)
        self.menus[ColourSettings] = ColourSettings(self)
        self.menus[SolverSettings] = SolverSettings(self)
        self.menus[GenerationSettings] = GenerationSettings(self)
        self.menus[SolverMenu] = SolverMenu(self)
        self.menus[EditMenu] = EditMenu(self)

        # Load Maze
        self.loadMaze()

        # Load in Top Menu
        self.loadTopMenu()

        # Bind for Easter Egg
        self.EESequence = [38, 38, 40, 40, 37, 39, 37, 39, 66, 65]
        self.EEPos = 0
        self.bind("<Key>", self.keyPress)
Example #18
0
from utils import getResourcePath
from PyQt5.QtCore import Qt, QAbstractProxyModel, QModelIndex
from PyQt5.QtWidgets import QListWidgetItem
from PyQt5.uic import loadUiType

ConfigWindowUi, ConfigWindowBase = loadUiType(
    getResourcePath('ui/visaScriptConfigWindow.ui'))


class ConfigWindow(ConfigWindowBase, ConfigWindowUi):
    def __init__(self, visaScriptConfig, parent=None):
        ConfigWindowBase.__init__(self, parent)
        self.setupUi(self)

        self.config = visaScriptConfig.clone()

        self.resourceId.textEdited.connect(self.resourceIdTextEdited)
        self.script.textChanged.connect(self.scriptTextChanged)

        self.resourceId.setText(self.config.resource)
        self.script.setPlainText(self.config.script)

    def keyPressEvent(self, event):
        event.ignore()

    def resourceIdTextEdited(self, text):
        self.config.resource = text

    def scriptTextChanged(self):
        self.config.script = self.script.toPlainText()
Example #19
0
from PyQt5.QtCore import Qt, QVariant, QTime
from PyQt5.uic import loadUiType
import pyqtgraph as pg
import numpy as np
import array
from utils import float_to_si, getResourcePath

DataWindowUi, DataWindowBase = loadUiType(
    getResourcePath('ui/dataloggerDataWindow.ui'))


class DataWindow(DataWindowBase, DataWindowUi):
    def __init__(self, instrument, parent=None):
        DataWindowBase.__init__(self, parent)
        self.setupUi(self)

        self.instrument = instrument

    def addSample(self, elapsed, timestamp, sample):
        ch0 = sample[0]
        ch1 = sample[1]
        if self.instrument.config.model == '1316':
            self.raw0.setText("Tempearture 1: {:4.1f} Celcius".format(ch0))
            self.raw1.setText("Tempearture 2: {:4.1f} Celcius".format(ch1))
        else:
            self.raw0.setText("Tempearture: {:4.1f} Celcius".format(ch0))
            self.raw1.setText("Relative humidity: {:4.1f}%".format(ch1))

    def refresh(self):
        pass