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
from PyQt4.QtGui import *
from PyQt4.QtCore import *
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 DAQs tab content:
class DaqsTab(QObject):
class DaqsTab(QWidget):
def __init__(self, stationName, parent, id=-1):
super(DaqsTab, self).__init__(parent)
self.stationName = stationName
self.parent = parent
self.experimentDaqApi = DmApiFactory.getInstance().getExperimentDaqApi()
self.daqsTabLayout()
self.InsertColumn(0, 'Id')
self.InsertColumn(2, 'Data Directory')
self.InsertColumn(3, '# Files')
def daqsTabLayout(self):
grid = QGridLayout()
self.SetColumnWidth(0, 150)
self.SetColumnWidth(1, 350)
self.SetColumnWidth(2, 250)
labelFont = QFont('Arial', 18, QFont.Bold)
lbl = QLabel(self.stationName + ' DAQs List', self)
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()
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):
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
for daq in self.daqList:
self.InsertStringItem(i, daq.get('id'))
self.SetStringItem(i, 1, daq.get('dataDirectory', ''))
self.SetStringItem(i, 2, str(daq.get('nFiles', '0')))
rowID = QTableWidgetItem(daq.get('id'))
rowDataDir = QTableWidgetItem(daq.get('dataDirectory', ''))
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:
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
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
from daqsTab import DaqsTab
from uploadsTab import UploadsTab
from initialTab import InitialTab
from addExperiment import AddExperimentTab
class DmStationUi(QMainWindow):
......@@ -29,37 +30,66 @@ class DmStationUi(QMainWindow):
self.stackedLayout = QStackedLayout()
# Create the tab windows
initialTab = InitialTab(self.stationName, self.stackedLayout)
experimentsTab = ExperimentsTab(self.stationName, self.stackedLayout)
#daqsTab = DaqsTab(self.stationName, self.stackedLayout)
#uploadsTab = UploadsTab(self.stationName, self.stackedLayout)
self.initialTab = InitialTab(self.stationName, self)
self.experimentsTab = ExperimentsTab(self.stationName, self)
self.daqsTab = DaqsTab(self.stationName, self)
self.uploadsTab = UploadsTab(self.stationName, self)
#addExperimentTab = AddExperimentTab(self.stationName, self)
# Add the windows to the stack.
self.stackedLayout.addWidget(initialTab)
self.stackedLayout.addWidget(experimentsTab)
#self.stackedLayout.addWidget(daqsTab)
#self.stackedLayout.addWidget(uploadsTab)
self.stackedLayout.addWidget(self.initialTab.initialTabWidget)
self.stackedLayout.addWidget(self.experimentsTab.experimentsTabWidget)
self.stackedLayout.addWidget(self.daqsTab.daqsTabWidget)
self.stackedLayout.addWidget(self.uploadsTab.uploadsTabWidget)
#self.stackedLayout.addWidget(addExperimentTab.addExperimentTabWidget)
# Set a central widget to hold everything
self.centralWidget = QWidget()
self.centralWidget.setLayout(self.stackedLayout)
self.setCentralWidget(self.centralWidget)
self.stackedLayout.setCurrentIndex(0)
self.center()
self.show()
def __configure(self):
self.logger = LoggingManager.getInstance().getLogger(self.__class__.__name__)
configManager = ConfigurationManager.getInstance()
self.stationName = configManager.getInstance().getStationName()
if not self.stationName:
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__":
try:
#try:
app = QApplication(sys.argv)
DmStationUi().Show()
app.MainLoop()
except DmException, ex:
print >>sys.stderr, 'ERROR: %s' % ex
raise SystemExit(ex.getErrorCode())
except Exception, ex:
print >>sys.stderr, '%s' % ex
raise SystemExit(dmStatus.DM_ERROR)
window = DmStationUi()
window.show()
window.raise_()
sys.exit(app.exec_())
#except DmException, ex:
# print >>sys.stderr, 'ERROR: %s' % ex
# raise SystemExit(ex.getErrorCode())
#except Exception, ex:
# print >>sys.stderr, '%s' % ex
# raise SystemExit(dmStatus.DM_ERROR)
#!/usr/bin/env python
from PyQt4.QtGui import *
from PyQt4.QtCore import QObject
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 ExperimentsTab(QObject):
class ExperimentsTab(QWidget):
def __init__(self, stationName, parent, id=-1):
super(ExperimentsTab, self).__init__(parent)
self.stationName = stationName
self.parent = parent
self.test = 'cat'
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()
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):
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
for experiment in self.experimentList:
self.InsertStringItem(i, experiment.get('name'))
self.SetStringItem(i, 1, experiment.get('description', ''))
self.SetStringItem(i, 2, str(experiment.get('startDate', '')))
rowName = QTableWidgetItem(experiment.get('name'))
rowDescription = QTableWidgetItem(experiment.get('description', ''))
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:
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
# 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
# Define the experiments tab content:
class InitialTab(QObject):
class InitialTab(QWidget):
def __init__(self, stationName, parent, id=-1):
super(InitialTab, self).__init__(parent)
self.stationName = stationName
self.parent = parent
self.initialTabLayout()
def initialTabLayout(self):
grid = QGridLayout()
labelFont = QFont("Arial", 18, QFont.Bold)
lbl = QLabel(self.stationName + " DM Tool", self)
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.addWidget(lbl, 1, 1, 1, 7)
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))
manageBtn = QPushButton('Manage Experiments', self)
manageBtn.setFixedSize(160, 160)
manageBtn.clicked.connect(lambda: 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))
viewBtn = QPushButton('DAQs', self)
viewBtn.setFixedSize(160, 160)
viewBtn.clicked.connect(lambda: self.setTab(2))
grid.addWidget(viewBtn, 3, 4)
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)
......@@ -38,4 +46,4 @@ class InitialTab(QObject):
self.initialTabWidget.setLayout(grid)
def setTab(self, tab):
self.parent.setCurrentIndex(tab)
self.parent.stackedLayout.setCurrentIndex(tab)
#!/usr/bin/env python
from PyQt4.QtGui import *
from PyQt4.QtCore import *
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 UploadsTab(QObject):
class UploadsTab(QWidget):
def __init__(self, stationName, parent, id=-1):
super(UploadsTab, self).__init__(parent)
self.stationName = stationName
self.parent = parent
self.experimentDaqApi = DmApiFactory.getInstance().getExperimentDaqApi()
self.uploadTabLayout()
self.InsertColumn(0, 'Id')
self.InsertColumn(2, 'Data Directory')
self.InsertColumn(3, '# Files')
def uploadTabLayout(self):
grid = QGridLayout()
self.SetColumnWidth(0, 150)
self.SetColumnWidth(1, 350)
self.SetColumnWidth(2, 250)
labelFont = QFont('Arial', 18, QFont.Bold)
lbl = QLabel(self.stationName + ' Uploads List', self)
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()
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):
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
for upload in self.uploadList:
self.InsertStringItem(i, upload.get('id'))
self.SetStringItem(i, 1, upload.get('dataDirectory', ''))
self.SetStringItem(i, 2, str(upload.get('nFiles', '0')))
rowID = QTableWidgetItem(upload.get('id'))
rowDataDir = QTableWidgetItem(upload.get('dataDirectory', ''))
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:
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
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