From f0a249ad4b38b16b45295fc68e99d006d77cb413 Mon Sep 17 00:00:00 2001 From: "Collin A. Schmitz" <caschmitz@aps.anl.gov> Date: Wed, 15 Mar 2017 21:06:33 +0000 Subject: [PATCH] Converting to PyQt and adding startup tab --- .../dm/aps_beamline_tools/gui/daqsTab.py | 9 ++-- .../dm/aps_beamline_tools/gui/dmStationUi.py | 47 +++++++++++-------- .../aps_beamline_tools/gui/experimentsTab.py | 13 ++--- .../dm/aps_beamline_tools/gui/initialTab.py | 41 ++++++++++++++++ .../dm/aps_beamline_tools/gui/uploadsTab.py | 10 ++-- 5 files changed, 83 insertions(+), 37 deletions(-) create mode 100644 src/python/dm/aps_beamline_tools/gui/initialTab.py diff --git a/src/python/dm/aps_beamline_tools/gui/daqsTab.py b/src/python/dm/aps_beamline_tools/gui/daqsTab.py index 29e5e4ff..7d824749 100644 --- a/src/python/dm/aps_beamline_tools/gui/daqsTab.py +++ b/src/python/dm/aps_beamline_tools/gui/daqsTab.py @@ -1,12 +1,13 @@ #!/usr/bin/env python -import wx +from PyQt4.QtGui import * +from PyQt4.QtCore import * from dmApiFactory import DmApiFactory # Define the DAQs tab content: -class DaqsTab(wx.ListCtrl): +class DaqsTab(QObject): def __init__(self, stationName, parent, id=-1): - wx.ListCtrl.__init__(self, parent, id, style=wx.LC_REPORT) + super(DaqsTab, self).__init__(parent) self.stationName = stationName self.experimentDaqApi = DmApiFactory.getInstance().getExperimentDaqApi() @@ -32,5 +33,5 @@ class DaqsTab(wx.ListCtrl): self.SetItemBackgroundColour(i, '#e6f1f5') i += 1 - + diff --git a/src/python/dm/aps_beamline_tools/gui/dmStationUi.py b/src/python/dm/aps_beamline_tools/gui/dmStationUi.py index bd2926cc..dc53a71b 100755 --- a/src/python/dm/aps_beamline_tools/gui/dmStationUi.py +++ b/src/python/dm/aps_beamline_tools/gui/dmStationUi.py @@ -1,7 +1,8 @@ #!/usr/bin/env python import sys -import wx +from PyQt4.QtCore import * +from PyQt4.QtGui import QMainWindow, QStackedLayout, QApplication, QWidget from dm.common.constants import dmStatus from dm.common.exceptions.dmException import DmException @@ -12,31 +13,37 @@ from dm.common.utility.configurationManager import ConfigurationManager from experimentsTab import ExperimentsTab from daqsTab import DaqsTab from uploadsTab import UploadsTab - -class DmStationUi(wx.Frame): +from initialTab import InitialTab + + +class DmStationUi(QMainWindow): def __init__(self): self.__configure() self.logger.debug('Starting UI for DM Station: %s' % self.stationName) - wx.Frame.__init__(self, None, title='DM Station: %s' % self.stationName, size=(900,500)) + super(DmStationUi, self).__init__() + + self.setWindowTitle('DM Station: %s' % self.stationName) + self.setGeometry(0, 0, 800, 400) - # Create a panel and notebook (tabs holder) - p = wx.Panel(self) - nb = wx.Notebook(p) + # Create a stacked layout to connect the various pages + self.stackedLayout = QStackedLayout() # Create the tab windows - experimentsTab = ExperimentsTab(self.stationName, nb) - daqsTab = DaqsTab(self.stationName, nb) - uploadsTab = UploadsTab(self.stationName, nb) - - # Add the windows to tabs and name them. - nb.AddPage(experimentsTab, "Experiments") - nb.AddPage(daqsTab, "Real Time DAQs") - nb.AddPage(uploadsTab, "Data Uploads") + initialTab = InitialTab(self.stationName, self.stackedLayout) + experimentsTab = ExperimentsTab(self.stationName, self.stackedLayout) + #daqsTab = DaqsTab(self.stationName, self.stackedLayout) + #uploadsTab = UploadsTab(self.stationName, self.stackedLayout) - # Set noteboook in a sizer to create the layout - sizer = wx.BoxSizer() - sizer.Add(nb, 1, wx.EXPAND) - p.SetSizer(sizer) + # Add the windows to the stack. + self.stackedLayout.addWidget(initialTab) + self.stackedLayout.addWidget(experimentsTab) + #self.stackedLayout.addWidget(daqsTab) + #self.stackedLayout.addWidget(uploadsTab) + + # Set a central widget to hold everything + self.centralWidget = QWidget() + self.centralWidget.setLayout(self.stackedLayout) + self.setCentralWidget(self.centralWidget) def __configure(self): self.logger = LoggingManager.getInstance().getLogger(self.__class__.__name__) @@ -47,7 +54,7 @@ class DmStationUi(wx.Frame): if __name__ == "__main__": try: - app = wx.App() + app = QApplication(sys.argv) DmStationUi().Show() app.MainLoop() except DmException, ex: diff --git a/src/python/dm/aps_beamline_tools/gui/experimentsTab.py b/src/python/dm/aps_beamline_tools/gui/experimentsTab.py index a4b28474..d925fbc4 100644 --- a/src/python/dm/aps_beamline_tools/gui/experimentsTab.py +++ b/src/python/dm/aps_beamline_tools/gui/experimentsTab.py @@ -1,22 +1,17 @@ #!/usr/bin/env python -import wx +from PyQt4.QtGui import * +from PyQt4.QtCore import QObject from dmApiFactory import DmApiFactory # Define the experiments tab content: -class ExperimentsTab(wx.ListCtrl): +class ExperimentsTab(QObject): def __init__(self, stationName, parent, id=-1): - wx.ListCtrl.__init__(self, parent, id, style=wx.LC_REPORT) + super(ExperimentsTab, self).__init__(parent) self.stationName = stationName self.experimentDsApi = DmApiFactory.getInstance().getExperimentDsApi() - self.InsertColumn(0, 'Name') - self.InsertColumn(1, 'Description') - self.InsertColumn(2, 'Start Date') - self.SetColumnWidth(0, 150) - self.SetColumnWidth(1, 500) - self.SetColumnWidth(2, 250) self.updateList() diff --git a/src/python/dm/aps_beamline_tools/gui/initialTab.py b/src/python/dm/aps_beamline_tools/gui/initialTab.py new file mode 100644 index 00000000..7fca1d8f --- /dev/null +++ b/src/python/dm/aps_beamline_tools/gui/initialTab.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python + +from PyQt4.QtGui import QGridLayout, QSpacerItem, QSizePolicy, QPushButton, QWidget, QFont, QLabel +from PyQt4.QtCore import QObject, Qt + + +# Define the experiments tab content: +class InitialTab(QObject): + def __init__(self, stationName, parent, id=-1): + super(InitialTab, self).__init__(parent) + self.stationName = stationName + self.parent = parent + + def initialTabLayout(self): + grid = QGridLayout() + + labelFont = QFont("Arial", 18, QFont.Bold) + lbl = QLabel(self.stationName + " DM Tool", self) + lbl.setAlignment(Qt.AlignCenter) + lbl.setFont(labelFont) + grid.addWidget(lbl, 1, 1, 1, 3) + + grid.addItem(QSpacerItem(20, 130, QSizePolicy.Expanding), 2, 1) + + grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 3, 1) + manageBtn = QPushButton("Manage Experiments", self) + manageBtn.clicked.connect(self.setTab(1)) + grid.addWidget(manageBtn, 3, 2) + grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 3, 3) + viewBtn = QPushButton("View Experiments", self) + viewBtn.clicked.connect(self.setTab(2)) + grid.addWidget(viewBtn, 3, 4) + grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 3, 5) + + grid.addItem(QSpacerItem(20, 130, QSizePolicy.Expanding), 4, 1) + + self.initialTabWidget = QWidget() + self.initialTabWidget.setLayout(grid) + + def setTab(self, tab): + self.parent.setCurrentIndex(tab) diff --git a/src/python/dm/aps_beamline_tools/gui/uploadsTab.py b/src/python/dm/aps_beamline_tools/gui/uploadsTab.py index 1ed425d1..a5654bac 100644 --- a/src/python/dm/aps_beamline_tools/gui/uploadsTab.py +++ b/src/python/dm/aps_beamline_tools/gui/uploadsTab.py @@ -1,12 +1,13 @@ #!/usr/bin/env python -import wx +from PyQt4.QtGui import * +from PyQt4.QtCore import * from dmApiFactory import DmApiFactory # Define the experiments tab content: -class UploadsTab(wx.ListCtrl): +class UploadsTab(QObject): def __init__(self, stationName, parent, id=-1): - wx.ListCtrl.__init__(self, parent, id, style=wx.LC_REPORT) + super(UploadsTab, self).__init__(parent) self.stationName = stationName self.experimentDaqApi = DmApiFactory.getInstance().getExperimentDaqApi() @@ -31,5 +32,6 @@ class UploadsTab(wx.ListCtrl): if (i % 2) == 0: self.SetItemBackgroundColour(i, '#e6f1f5') i += 1 - + + -- GitLab