Skip to content
Snippets Groups Projects
Commit 856aa2aa authored by Collin A. Schmitz's avatar Collin A. Schmitz
Browse files

Converted to pyqt and began layout structure. Implemented table column...

Converted to pyqt and began layout structure.  Implemented table column resizing based on window resize event.
parent f0a249ad
No related branches found
No related tags found
No related merge requests found
#!/usr/bin/env python
from PyQt4.QtGui import QGridLayout, QSpacerItem, QSizePolicy, QPushButton, QWidget, \
QFont, QLabel, QTableWidget, QTableWidgetItem, QColor, QAbstractItemView
from PyQt4.QtCore import Qt
from dmApiFactory import DmApiFactory
# Define the experiments tab content:
class AddExperimentTab(QWidget):
def __init__(self, stationName, parent, id=-1):
super(AddExperimentTab, self).__init__(parent)
self.stationName = stationName
self.parent = parent
self.experimentDsApi = DmApiFactory.getInstance().getExperimentDsApi()
self.addExperimentsTabLayout()
# Sets up the tab's layout, each block is a row
def addExperimentsTabLayout(self):
grid = QGridLayout()
\ No newline at end of file
#!/usr/bin/env python #!/usr/bin/env python
from PyQt4.QtGui import * from PyQt4.QtGui import QGridLayout, QSpacerItem, QSizePolicy, QPushButton, QWidget, \
from PyQt4.QtCore import * QFont, QLabel, QTableWidget, QTableWidgetItem, QColor, QAbstractItemView
from PyQt4.QtCore import Qt
from dmApiFactory import DmApiFactory from dmApiFactory import DmApiFactory
# Define the DAQs tab content: # Define the DAQs tab content:
class DaqsTab(QObject): class DaqsTab(QWidget):
def __init__(self, stationName, parent, id=-1): def __init__(self, stationName, parent, id=-1):
super(DaqsTab, self).__init__(parent) super(DaqsTab, self).__init__(parent)
self.stationName = stationName self.stationName = stationName
self.parent = parent
self.experimentDaqApi = DmApiFactory.getInstance().getExperimentDaqApi() self.experimentDaqApi = DmApiFactory.getInstance().getExperimentDaqApi()
self.daqsTabLayout()
self.InsertColumn(0, 'Id') def daqsTabLayout(self):
self.InsertColumn(2, 'Data Directory') grid = QGridLayout()
self.InsertColumn(3, '# Files')
self.SetColumnWidth(0, 150) labelFont = QFont('Arial', 18, QFont.Bold)
self.SetColumnWidth(1, 350) lbl = QLabel(self.stationName + ' DAQs List', self)
self.SetColumnWidth(2, 250) lbl.setAlignment(Qt.AlignCenter)
lbl.setFont(labelFont)
grid.addWidget(lbl, 1, 1, 1, 3)
# lambda allows the passing of variables
backBtn = QPushButton('Back', self)
backBtn.clicked.connect(lambda: self.setTab(0))
backBtn.setMaximumWidth(100)
grid.addWidget(backBtn, 2, 3)
grid.addItem(QSpacerItem(20, 30, QSizePolicy.Expanding), 3, 1)
grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 4, 1)
self.tableWidget = QTableWidget()
self.tableWidget.setFixedWidth(600)
self.updateList() self.updateList()
grid.addWidget(self.tableWidget, 4, 2)
grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 4, 3)
addBtn = QPushButton('Start New', self)
addBtn.clicked.connect(lambda: self.setTab(0))
addBtn.setFixedWidth(250)
grid.addWidget(addBtn, 5, 2, Qt.AlignLeft)
modBtn = QPushButton('Stop Selected', self)
modBtn.clicked.connect(lambda: self.setTab(0))
modBtn.setFixedWidth(250)
grid.addWidget(modBtn, 5, 2, Qt.AlignRight)
grid.addItem(QSpacerItem(20, 40, QSizePolicy.Expanding), 6, 1)
self.daqsTabWidget = QWidget()
self.daqsTabWidget.setLayout(grid)
def updateList(self): def updateList(self):
self.daqList = self.experimentDaqApi.listDaqs() self.daqList = self.experimentDaqApi.listDaqs()
self.tableWidget.setRowCount(len(self.daqList))
self.tableWidget.setColumnCount(3)
self.tableWidget.setColumnWidth(1, 348)
self.tableWidget.setColumnWidth(2, 150)
self.tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
self.tableWidget.setHorizontalHeaderLabels('ID;Data Directory;Number of Files;'.split(';'))
self.tableWidget.cellDoubleClicked.connect(self.expandRow)
i = 0 i = 0
for daq in self.daqList: for daq in self.daqList:
self.InsertStringItem(i, daq.get('id')) rowID = QTableWidgetItem(daq.get('id'))
self.SetStringItem(i, 1, daq.get('dataDirectory', '')) rowDataDir = QTableWidgetItem(daq.get('dataDirectory', ''))
self.SetStringItem(i, 2, str(daq.get('nFiles', '0'))) rowNumFiles = QTableWidgetItem(str(daq.get('nFiles', '')))
self.tableWidget.setItem(i, 0, rowID)
self.tableWidget.setItem(i, 1, rowDataDir)
self.tableWidget.setItem(i, 2, rowNumFiles)
if (i % 2) == 0: if (i % 2) == 0:
self.SetItemBackgroundColour(i, '#e6f1f5') rowID.setBackground(QColor.fromRgb(230, 241, 245))
rowDataDir.setBackground(QColor.fromRgb(230, 241, 245))
rowNumFiles.setBackground(QColor.fromRgb(230, 241, 245))
i += 1 i += 1
def setTab(self, tab):
self.parent.stackedLayout.setCurrentIndex(tab)
def expandRow(self, row, column):
self.tableWidget.resizeRowToContents(row)
...@@ -14,6 +14,7 @@ from experimentsTab import ExperimentsTab ...@@ -14,6 +14,7 @@ from experimentsTab import ExperimentsTab
from daqsTab import DaqsTab from daqsTab import DaqsTab
from uploadsTab import UploadsTab from uploadsTab import UploadsTab
from initialTab import InitialTab from initialTab import InitialTab
from addExperiment import AddExperimentTab
class DmStationUi(QMainWindow): class DmStationUi(QMainWindow):
...@@ -29,37 +30,66 @@ class DmStationUi(QMainWindow): ...@@ -29,37 +30,66 @@ class DmStationUi(QMainWindow):
self.stackedLayout = QStackedLayout() self.stackedLayout = QStackedLayout()
# Create the tab windows # Create the tab windows
initialTab = InitialTab(self.stationName, self.stackedLayout) self.initialTab = InitialTab(self.stationName, self)
experimentsTab = ExperimentsTab(self.stationName, self.stackedLayout) self.experimentsTab = ExperimentsTab(self.stationName, self)
#daqsTab = DaqsTab(self.stationName, self.stackedLayout) self.daqsTab = DaqsTab(self.stationName, self)
#uploadsTab = UploadsTab(self.stationName, self.stackedLayout) self.uploadsTab = UploadsTab(self.stationName, self)
#addExperimentTab = AddExperimentTab(self.stationName, self)
# Add the windows to the stack. # Add the windows to the stack.
self.stackedLayout.addWidget(initialTab) self.stackedLayout.addWidget(self.initialTab.initialTabWidget)
self.stackedLayout.addWidget(experimentsTab) self.stackedLayout.addWidget(self.experimentsTab.experimentsTabWidget)
#self.stackedLayout.addWidget(daqsTab) self.stackedLayout.addWidget(self.daqsTab.daqsTabWidget)
#self.stackedLayout.addWidget(uploadsTab) self.stackedLayout.addWidget(self.uploadsTab.uploadsTabWidget)
#self.stackedLayout.addWidget(addExperimentTab.addExperimentTabWidget)
# Set a central widget to hold everything # Set a central widget to hold everything
self.centralWidget = QWidget() self.centralWidget = QWidget()
self.centralWidget.setLayout(self.stackedLayout) self.centralWidget.setLayout(self.stackedLayout)
self.setCentralWidget(self.centralWidget) self.setCentralWidget(self.centralWidget)
self.stackedLayout.setCurrentIndex(0)
self.center()
self.show()
def __configure(self): def __configure(self):
self.logger = LoggingManager.getInstance().getLogger(self.__class__.__name__) self.logger = LoggingManager.getInstance().getLogger(self.__class__.__name__)
configManager = ConfigurationManager.getInstance() configManager = ConfigurationManager.getInstance()
self.stationName = configManager.getInstance().getStationName() self.stationName = configManager.getInstance().getStationName()
if not self.stationName: if not self.stationName:
raise ConfigurationError('DM_STATION_NAME environment variable is not defined.') raise ConfigurationError('DM_STATION_NAME environment variable is not defined.')
# Centers window on the screen where the mouse is detected
def center(self):
frameGeo = self.frameGeometry()
screen = QApplication.desktop().screenNumber(QApplication.desktop().cursor().pos())
screenCenter = QApplication.desktop().screenGeometry(screen).center()
frameGeo.moveCenter(screenCenter)
self.move(frameGeo.topLeft())
# Calls for the table to be resized when a resize event is called
def resizeEvent(self, event):
windowSize = event.size().width()
currentIndex = self.getTab()
if currentIndex == 0:
return
elif currentIndex == 1:
ExperimentsTab.resizeTable(self.experimentsTab, windowSize)
def getTab(self):
return self.stackedLayout.currentIndex()
if __name__ == "__main__": if __name__ == "__main__":
try: #try:
app = QApplication(sys.argv) app = QApplication(sys.argv)
DmStationUi().Show() window = DmStationUi()
app.MainLoop() window.show()
except DmException, ex: window.raise_()
print >>sys.stderr, 'ERROR: %s' % ex sys.exit(app.exec_())
raise SystemExit(ex.getErrorCode()) #except DmException, ex:
except Exception, ex: # print >>sys.stderr, 'ERROR: %s' % ex
print >>sys.stderr, '%s' % ex # raise SystemExit(ex.getErrorCode())
raise SystemExit(dmStatus.DM_ERROR) #except Exception, ex:
# print >>sys.stderr, '%s' % ex
# raise SystemExit(dmStatus.DM_ERROR)
#!/usr/bin/env python #!/usr/bin/env python
from PyQt4.QtGui import * from PyQt4.QtGui import QGridLayout, QSpacerItem, QSizePolicy, QPushButton, QWidget, \
from PyQt4.QtCore import QObject QFont, QLabel, QTableWidget, QTableWidgetItem, QColor, QAbstractItemView
from PyQt4.QtCore import Qt
from dmApiFactory import DmApiFactory from dmApiFactory import DmApiFactory
# Define the experiments tab content: # Define the experiments tab content:
class ExperimentsTab(QObject): class ExperimentsTab(QWidget):
def __init__(self, stationName, parent, id=-1): def __init__(self, stationName, parent, id=-1):
super(ExperimentsTab, self).__init__(parent) super(ExperimentsTab, self).__init__(parent)
self.stationName = stationName self.stationName = stationName
self.parent = parent
self.test = 'cat'
self.experimentDsApi = DmApiFactory.getInstance().getExperimentDsApi() self.experimentDsApi = DmApiFactory.getInstance().getExperimentDsApi()
self.experimentsTabLayout()
# Sets up the tab's layout, each block is a row
def experimentsTabLayout(self):
grid = QGridLayout()
labelFont = QFont('Arial', 18, QFont.Bold)
lbl = QLabel(self.stationName + ' DM Experiment List', self)
lbl.setAlignment(Qt.AlignCenter)
lbl.setFont(labelFont)
grid.addWidget(lbl, 0, 0, 1, 3)
backBtn = QPushButton('Back', self)
backBtn.clicked.connect(lambda: self.setTab(0))
backBtn.setMaximumWidth(100)
grid.addWidget(backBtn, 1, 2)
grid.addItem(QSpacerItem(20, 30, QSizePolicy.Expanding), 2, 0)
grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 3, 0)
self.tableWidget = QTableWidget()
self.updateList() self.updateList()
grid.addWidget(self.tableWidget, 3, 0, 1, 3)
grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 3, 2)
addBtn = QPushButton('Add Experiment', self)
addBtn.clicked.connect(lambda: self.setTab(0))
addBtn.setFixedWidth(250)
grid.addWidget(addBtn, 4, 1, Qt.AlignLeft)
modBtn = QPushButton('Modify Selected', self)
modBtn.clicked.connect(lambda: self.setTab(0))
modBtn.setFixedWidth(250)
grid.addWidget(modBtn, 4, 1, Qt.AlignRight)
grid.addItem(QSpacerItem(20, 40, QSizePolicy.Expanding), 5, 0)
self.experimentsTabWidget = QWidget()
self.experimentsTabWidget.setLayout(grid)
# Sets up the table structure and fills it with data
def updateList(self): def updateList(self):
self.experimentList = self.experimentDsApi.getExperimentsByStation(self.stationName) self.experimentList = self.experimentDsApi.getExperimentsByStation(self.stationName)
self.tableWidget.setRowCount(len(self.experimentList))
self.tableWidget.setColumnCount(3)
self.colWidths = (130, 400, 209)
for i, size in enumerate(self.colWidths):
self.tableWidget.horizontalHeader().resizeSection(i, size)
self.tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
self.tableWidget.setHorizontalHeaderLabels('Name;Description;Start Date;'.split(';'))
self.tableWidget.cellDoubleClicked.connect(self.expandRow)
i = 0 i = 0
for experiment in self.experimentList: for experiment in self.experimentList:
self.InsertStringItem(i, experiment.get('name')) rowName = QTableWidgetItem(experiment.get('name'))
self.SetStringItem(i, 1, experiment.get('description', '')) rowDescription = QTableWidgetItem(experiment.get('description', ''))
self.SetStringItem(i, 2, str(experiment.get('startDate', ''))) rowStartDate = QTableWidgetItem(str(experiment.get('startDate', '')))
self.tableWidget.setItem(i, 0, rowName)
self.tableWidget.setItem(i, 1, rowDescription)
self.tableWidget.setItem(i, 2, rowStartDate)
if (i % 2) == 0: if (i % 2) == 0:
self.SetItemBackgroundColour(i, '#e6f1f5') rowName.setBackground(QColor.fromRgb(230, 241, 245))
rowDescription.setBackground(QColor.fromRgb(230, 241, 245))
rowStartDate.setBackground(QColor.fromRgb(230, 241, 245))
i += 1 i += 1
# Used to change between tabs
def setTab(self, tab):
self.parent.stackedLayout.setCurrentIndex(tab)
# Expands the given row to fit the size of its contents
def expandRow(self, row, column):
self.tableWidget.resizeRowToContents(row)
# Resizes the horizontal headers to fit the screen
def resizeTable(self, width):
totalWidths = sum(self.colWidths)
if self.tableWidget.verticalScrollBar().isVisible():
newSize = [column * (width - 60) / totalWidths for column in self.colWidths]
else:
newSize = [column * (width - 60) / totalWidths for column in self.colWidths]
for i, column in enumerate(newSize):
self.tableWidget.horizontalHeader().resizeSection(i, column)
...@@ -5,32 +5,40 @@ from PyQt4.QtCore import QObject, Qt ...@@ -5,32 +5,40 @@ from PyQt4.QtCore import QObject, Qt
# Define the experiments tab content: # Define the experiments tab content:
class InitialTab(QObject): class InitialTab(QWidget):
def __init__(self, stationName, parent, id=-1): def __init__(self, stationName, parent, id=-1):
super(InitialTab, self).__init__(parent) super(InitialTab, self).__init__(parent)
self.stationName = stationName self.stationName = stationName
self.parent = parent self.parent = parent
self.initialTabLayout()
def initialTabLayout(self): def initialTabLayout(self):
grid = QGridLayout() grid = QGridLayout()
labelFont = QFont("Arial", 18, QFont.Bold) labelFont = QFont('Arial', 18, QFont.Bold)
lbl = QLabel(self.stationName + " DM Tool", self) lbl = QLabel(self.stationName + ' DM Tool', self)
lbl.setAlignment(Qt.AlignCenter) lbl.setAlignment(Qt.AlignCenter)
lbl.setFont(labelFont) lbl.setFont(labelFont)
grid.addWidget(lbl, 1, 1, 1, 3) grid.addWidget(lbl, 1, 1, 1, 7)
grid.addItem(QSpacerItem(20, 130, QSizePolicy.Expanding), 2, 1) grid.addItem(QSpacerItem(20, 130, QSizePolicy.Expanding), 2, 1)
grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 3, 1) grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 3, 1)
manageBtn = QPushButton("Manage Experiments", self) manageBtn = QPushButton('Manage Experiments', self)
manageBtn.clicked.connect(self.setTab(1)) manageBtn.setFixedSize(160, 160)
manageBtn.clicked.connect(lambda: self.setTab(1))
grid.addWidget(manageBtn, 3, 2) grid.addWidget(manageBtn, 3, 2)
grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 3, 3) grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 3, 3)
viewBtn = QPushButton("View Experiments", self) viewBtn = QPushButton('DAQs', self)
viewBtn.clicked.connect(self.setTab(2)) viewBtn.setFixedSize(160, 160)
viewBtn.clicked.connect(lambda: self.setTab(2))
grid.addWidget(viewBtn, 3, 4) grid.addWidget(viewBtn, 3, 4)
grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 3, 5) grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 3, 5)
viewBtn = QPushButton('Uploads', self)
viewBtn.setFixedSize(160, 160)
viewBtn.clicked.connect(lambda: self.setTab(3))
grid.addWidget(viewBtn, 3, 6)
grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 3, 7)
grid.addItem(QSpacerItem(20, 130, QSizePolicy.Expanding), 4, 1) grid.addItem(QSpacerItem(20, 130, QSizePolicy.Expanding), 4, 1)
...@@ -38,4 +46,4 @@ class InitialTab(QObject): ...@@ -38,4 +46,4 @@ class InitialTab(QObject):
self.initialTabWidget.setLayout(grid) self.initialTabWidget.setLayout(grid)
def setTab(self, tab): def setTab(self, tab):
self.parent.setCurrentIndex(tab) self.parent.stackedLayout.setCurrentIndex(tab)
#!/usr/bin/env python #!/usr/bin/env python
from PyQt4.QtGui import * from PyQt4.QtGui import QGridLayout, QSpacerItem, QSizePolicy, QPushButton, QWidget, \
from PyQt4.QtCore import * QFont, QLabel, QTableWidget, QTableWidgetItem, QColor, QAbstractItemView
from PyQt4.QtCore import Qt
from dmApiFactory import DmApiFactory from dmApiFactory import DmApiFactory
# Define the experiments tab content: # Define the experiments tab content:
class UploadsTab(QObject): class UploadsTab(QWidget):
def __init__(self, stationName, parent, id=-1): def __init__(self, stationName, parent, id=-1):
super(UploadsTab, self).__init__(parent) super(UploadsTab, self).__init__(parent)
self.stationName = stationName self.stationName = stationName
self.parent = parent
self.experimentDaqApi = DmApiFactory.getInstance().getExperimentDaqApi() self.experimentDaqApi = DmApiFactory.getInstance().getExperimentDaqApi()
self.uploadTabLayout()
self.InsertColumn(0, 'Id') def uploadTabLayout(self):
self.InsertColumn(2, 'Data Directory') grid = QGridLayout()
self.InsertColumn(3, '# Files')
self.SetColumnWidth(0, 150) labelFont = QFont('Arial', 18, QFont.Bold)
self.SetColumnWidth(1, 350) lbl = QLabel(self.stationName + ' Uploads List', self)
self.SetColumnWidth(2, 250) lbl.setAlignment(Qt.AlignCenter)
lbl.setFont(labelFont)
grid.addWidget(lbl, 1, 1, 1, 3)
# lambda allows the passing of variables
backBtn = QPushButton('Back', self)
backBtn.clicked.connect(lambda: self.setTab(0))
backBtn.setMaximumWidth(100)
grid.addWidget(backBtn, 2, 3)
grid.addItem(QSpacerItem(20, 30, QSizePolicy.Expanding), 3, 1)
grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 4, 1)
self.tableWidget = QTableWidget()
self.tableWidget.setFixedWidth(600)
self.updateList() self.updateList()
grid.addWidget(self.tableWidget, 4, 2)
grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 4, 3)
addBtn = QPushButton('Start New', self)
addBtn.clicked.connect(lambda: self.setTab(0))
addBtn.setFixedWidth(250)
grid.addWidget(addBtn, 5, 2, Qt.AlignLeft)
modBtn = QPushButton('Stop Selected', self)
modBtn.clicked.connect(lambda: self.setTab(0))
modBtn.setFixedWidth(250)
grid.addWidget(modBtn, 5, 2, Qt.AlignRight)
grid.addItem(QSpacerItem(20, 40, QSizePolicy.Expanding), 6, 1)
self.uploadsTabWidget = QWidget()
self.uploadsTabWidget.setLayout(grid)
def updateList(self): def updateList(self):
self.uploadList = self.experimentDaqApi.listUploads() self.uploadList = self.experimentDaqApi.listUploads()
self.tableWidget.setRowCount(len(self.uploadList))
self.tableWidget.setColumnCount(3)
self.tableWidget.setColumnWidth(1, 348)
self.tableWidget.setColumnWidth(2, 150)
self.tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
self.tableWidget.setHorizontalHeaderLabels('ID;Data Directory;Number of Files;'.split(';'))
self.tableWidget.cellDoubleClicked.connect(self.expandRow)
i = 0 i = 0
for upload in self.uploadList: for upload in self.uploadList:
self.InsertStringItem(i, upload.get('id')) rowID = QTableWidgetItem(upload.get('id'))
self.SetStringItem(i, 1, upload.get('dataDirectory', '')) rowDataDir = QTableWidgetItem(upload.get('dataDirectory', ''))
self.SetStringItem(i, 2, str(upload.get('nFiles', '0'))) rowNumFiles = QTableWidgetItem(str(upload.get('nFiles', '')))
self.tableWidget.setItem(i, 0, rowID)
self.tableWidget.setItem(i, 1, rowDataDir)
self.tableWidget.setItem(i, 2, rowNumFiles)
if (i % 2) == 0: if (i % 2) == 0:
self.SetItemBackgroundColour(i, '#e6f1f5') rowID.setBackground(QColor.fromRgb(230, 241, 245))
rowDataDir.setBackground(QColor.fromRgb(230, 241, 245))
rowNumFiles.setBackground(QColor.fromRgb(230, 241, 245))
i += 1 i += 1
def setTab(self, tab):
self.parent.stackedLayout.setCurrentIndex(tab)
def expandRow(self, row, column):
self.tableWidget.resizeRowToContents(row)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment