Beispiel #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)
Beispiel #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))
Beispiel #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)
Beispiel #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)
Beispiel #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_())
Beispiel #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()
Beispiel #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)
Beispiel #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
Beispiel #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)
Beispiel #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)
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
Beispiel #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
Beispiel #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()))
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)
Beispiel #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)
Beispiel #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)
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()
Beispiel #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