From 623c456469d7a0a07779c0336ebe50c0248e9703 Mon Sep 17 00:00:00 2001 From: Ruidy Nemausat Date: Tue, 17 Dec 2019 20:10:32 +0100 Subject: [PATCH] CRUD --- .gitignore | 3 +- README.md | 2 + main.ui | 14 +- mainWindow.ui | 263 ----------------------------------- main_gui.py | 8 +- qexafs.py | 180 ++++++++++++++++++++++++ qexafs.ui | 378 ++++++++++++++++++++++++++------------------------ xafs_GUI.py | 52 +++++-- 8 files changed, 430 insertions(+), 470 deletions(-) delete mode 100644 mainWindow.ui create mode 100644 qexafs.py diff --git a/.gitignore b/.gitignore index 17b40f5..4d6521e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ # Byte-compiled / optimized / DLL files __pycache__/ -*.ui \ No newline at end of file +*.ui +demo.py \ No newline at end of file diff --git a/README.md b/README.md index 691980c..e9f3ba1 100644 --- a/README.md +++ b/README.md @@ -26,4 +26,6 @@ Graphical User Interface allowing to: ## TO DO +https://stackoverflow.com/questions/49448990/pyqt-input-dialog-unexpected-type?rq=1 + ## BUGS diff --git a/main.ui b/main.ui index 7a9e33e..3019ae8 100644 --- a/main.ui +++ b/main.ui @@ -6,8 +6,8 @@ 0 0 - 798 - 575 + 780 + 622 @@ -26,15 +26,15 @@ P65 XAFS Scan Manager - 1 + 0 0 0 - 774 - 483 + 756 + 530 @@ -144,8 +144,8 @@ 0 0 - 774 - 483 + 756 + 530 diff --git a/mainWindow.ui b/mainWindow.ui deleted file mode 100644 index ed02712..0000000 --- a/mainWindow.ui +++ /dev/null @@ -1,263 +0,0 @@ - - - MainWindow - - - - 0 - 0 - 800 - 600 - - - - MainWindow - - - - - - - P65 XAFS Scan Manager - - - P65 XAFS Scan Manager - - - P65 XAFS Scan Manager - - - 0 - - - - - 0 - 0 - 776 - 465 - - - - - - - Scan Parameters - - - - - - - - - 75 - 16777215 - - - - Add - - - - - - - - 0 - 0 - - - - - 75 - 16777215 - - - - Copy - - - - - - - - 75 - 16777215 - - - - Remove - - - - - - - - 16777215 - 16777215 - - - - Clear - - - - - - - - Scan #1 - - - - - - - - Start - - - - - - - Pause - - - - - - - - - - - 0 - 0 - 98 - 28 - - - - Data Storage - - - - - 420 - 60 - 48 - 24 - - - - - - - 12 - 12 - 192 - 157 - - - - - - - - 0 - 0 - - - - - 20 - 75 - true - true - - - - Data Storage - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - - 180 - 80 - - - - - Location - - - - - Folder Name - - - - - Value - - - - - UserBeamtime - - - - - P.I. - - - - - - - - Save - - - - - - - - - - - - - - 0 - 0 - 800 - 22 - - - - - - - - diff --git a/main_gui.py b/main_gui.py index f04922d..f18a0a6 100644 --- a/main_gui.py +++ b/main_gui.py @@ -13,13 +13,13 @@ from PyQt5 import QtCore, QtGui, QtWidgets class MainGui(object): def setupUi(self, widget): widget.setObjectName("widget") - widget.resize(798, 575) + widget.resize(780, 622) self.horizontalLayout_2 = QtWidgets.QHBoxLayout(widget) self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.toolBox = QtWidgets.QToolBox(widget) self.toolBox.setObjectName("toolBox") self.scanParameterPage = QtWidgets.QWidget() - self.scanParameterPage.setGeometry(QtCore.QRect(0, 0, 774, 483)) + self.scanParameterPage.setGeometry(QtCore.QRect(0, 0, 756, 530)) self.scanParameterPage.setAccessibleName("") self.scanParameterPage.setObjectName("scanParameterPage") self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.scanParameterPage) @@ -63,7 +63,7 @@ class MainGui(object): self.horizontalLayout_4.addLayout(self.gridLayout) self.toolBox.addItem(self.scanParameterPage, "") self.DataStoragePage = QtWidgets.QWidget() - self.DataStoragePage.setGeometry(QtCore.QRect(0, 0, 774, 483)) + self.DataStoragePage.setGeometry(QtCore.QRect(0, 0, 756, 530)) self.DataStoragePage.setObjectName("DataStoragePage") self.widget = QtWidgets.QWidget(self.DataStoragePage) self.widget.resize(192, 157) @@ -118,7 +118,7 @@ class MainGui(object): self.horizontalLayout_2.addWidget(self.toolBox) self.retranslateUi(widget) - self.toolBox.setCurrentIndex(1) + self.toolBox.setCurrentIndex(0) QtCore.QMetaObject.connectSlotsByName(widget) def retranslateUi(self, widget): diff --git a/qexafs.py b/qexafs.py new file mode 100644 index 0000000..25d3b38 --- /dev/null +++ b/qexafs.py @@ -0,0 +1,180 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'qexafs.ui' +# +# Created by: PyQt5 UI code generator 5.13.2 +# +# WARNING! All changes made in this file will be lost! + + +from PyQt5 import QtCore, QtGui, QtWidgets + + +class QexafsGui(object): + def setupUi(self, Form): + Form.setObjectName("Form") + Form.resize(470, 460) + self.horizontalLayout = QtWidgets.QHBoxLayout(Form) + self.horizontalLayout.setObjectName("horizontalLayout") + self.gridLayout = QtWidgets.QGridLayout() + self.gridLayout.setObjectName("gridLayout") + self.label = QtWidgets.QLabel(Form) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Maximum) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth( + self.label.sizePolicy().hasHeightForWidth()) + self.label.setSizePolicy(sizePolicy) + font = QtGui.QFont() + font.setPointSize(20) + font.setBold(True) + font.setWeight(75) + font.setKerning(True) + self.label.setFont(font) + self.label.setObjectName("label") + self.gridLayout.addWidget(self.label, 0, 0, 1, 2) + self.tableWidget = QtWidgets.QTableWidget(Form) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Maximum) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth( + self.tableWidget.sizePolicy().hasHeightForWidth()) + self.tableWidget.setSizePolicy(sizePolicy) + self.tableWidget.setMinimumSize(QtCore.QSize(0, 350)) + self.tableWidget.setMaximumSize(QtCore.QSize(200, 16777215)) + self.tableWidget.setAutoFillBackground(True) + self.tableWidget.setObjectName("tableWidget") + self.tableWidget.setColumnCount(1) + self.tableWidget.setRowCount(11) + item = QtWidgets.QTableWidgetItem() + self.tableWidget.setVerticalHeaderItem(0, item) + item = QtWidgets.QTableWidgetItem() + self.tableWidget.setVerticalHeaderItem(1, item) + item = QtWidgets.QTableWidgetItem() + self.tableWidget.setVerticalHeaderItem(2, item) + item = QtWidgets.QTableWidgetItem() + self.tableWidget.setVerticalHeaderItem(3, item) + item = QtWidgets.QTableWidgetItem() + self.tableWidget.setVerticalHeaderItem(4, item) + item = QtWidgets.QTableWidgetItem() + self.tableWidget.setVerticalHeaderItem(5, item) + item = QtWidgets.QTableWidgetItem() + self.tableWidget.setVerticalHeaderItem(6, item) + item = QtWidgets.QTableWidgetItem() + self.tableWidget.setVerticalHeaderItem(7, item) + item = QtWidgets.QTableWidgetItem() + self.tableWidget.setVerticalHeaderItem(8, item) + item = QtWidgets.QTableWidgetItem() + self.tableWidget.setVerticalHeaderItem(9, item) + item = QtWidgets.QTableWidgetItem() + self.tableWidget.setVerticalHeaderItem(10, item) + item = QtWidgets.QTableWidgetItem() + self.tableWidget.setHorizontalHeaderItem(0, item) + item = QtWidgets.QTableWidgetItem() + self.tableWidget.setItem(0, 0, item) + item = QtWidgets.QTableWidgetItem() + self.tableWidget.setItem(1, 0, item) + item = QtWidgets.QTableWidgetItem() + self.tableWidget.setItem(2, 0, item) + item = QtWidgets.QTableWidgetItem() + self.tableWidget.setItem(3, 0, item) + item = QtWidgets.QTableWidgetItem() + self.tableWidget.setItem(4, 0, item) + item = QtWidgets.QTableWidgetItem() + self.tableWidget.setItem(5, 0, item) + item = QtWidgets.QTableWidgetItem() + self.tableWidget.setItem(6, 0, item) + item = QtWidgets.QTableWidgetItem() + self.tableWidget.setItem(7, 0, item) + item = QtWidgets.QTableWidgetItem() + self.tableWidget.setItem(8, 0, item) + item = QtWidgets.QTableWidgetItem() + self.tableWidget.setItem(9, 0, item) + item = QtWidgets.QTableWidgetItem() + self.tableWidget.setItem(10, 0, item) + self.gridLayout.addWidget(self.tableWidget, 1, 0, 1, 2) + self.pushButton = QtWidgets.QPushButton(Form) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Maximum) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth( + self.pushButton.sizePolicy().hasHeightForWidth()) + self.pushButton.setSizePolicy(sizePolicy) + self.pushButton.setObjectName("pushButton") + self.gridLayout.addWidget(self.pushButton, 2, 0, 1, 1) + self.pushButton_2 = QtWidgets.QPushButton(Form) + self.pushButton_2.setObjectName("pushButton_2") + self.gridLayout.addWidget(self.pushButton_2, 2, 1, 1, 1) + self.horizontalLayout.addLayout(self.gridLayout) + self.verticalLayout = QtWidgets.QVBoxLayout() + self.verticalLayout.setObjectName("verticalLayout") + self.listWidget = QtWidgets.QListWidget(Form) + self.listWidget.setObjectName("listWidget") + self.verticalLayout.addWidget(self.listWidget) + self.pushButton_3 = QtWidgets.QPushButton(Form) + self.pushButton_3.setObjectName("pushButton_3") + self.verticalLayout.addWidget(self.pushButton_3) + self.horizontalLayout.addLayout(self.verticalLayout) + + self.retranslateUi(Form) + QtCore.QMetaObject.connectSlotsByName(Form) + + def retranslateUi(self, Form): + _translate = QtCore.QCoreApplication.translate + Form.setWindowTitle(_translate("Form", "New Scan")) + self.label.setText(_translate("Form", "Scan Parameters")) + item = self.tableWidget.verticalHeaderItem(0) + item.setText(_translate("Form", "Energy")) + item = self.tableWidget.verticalHeaderItem(1) + item.setText(_translate("Form", "Edge ")) + item = self.tableWidget.verticalHeaderItem(2) + item.setText(_translate("Form", "Start Scan")) + item = self.tableWidget.verticalHeaderItem(3) + item.setText(_translate("Form", "End Scan")) + item = self.tableWidget.verticalHeaderItem(4) + item.setText(_translate("Form", "Total Scan Time")) + item = self.tableWidget.verticalHeaderItem(5) + item.setText(_translate("Form", "Time per Point")) + item = self.tableWidget.verticalHeaderItem(6) + item.setText(_translate("Form", "Undulator Offset")) + item = self.tableWidget.verticalHeaderItem(7) + item.setText(_translate("Form", "Sample Name")) + item = self.tableWidget.verticalHeaderItem(8) + item.setText(_translate("Form", "Sample Position")) + item = self.tableWidget.verticalHeaderItem(9) + item.setText(_translate("Form", "Motor Position")) + item = self.tableWidget.verticalHeaderItem(10) + item.setText(_translate("Form", "Number of Scans")) + item = self.tableWidget.horizontalHeaderItem(0) + item.setText(_translate("Form", "Value")) + __sortingEnabled = self.tableWidget.isSortingEnabled() + self.tableWidget.setSortingEnabled(False) + item = self.tableWidget.item(0, 0) + item.setText(_translate("Form", "7112")) + item = self.tableWidget.item(1, 0) + item.setText(_translate("Form", "Fe_K")) + item = self.tableWidget.item(2, 0) + item.setText(_translate("Form", "150")) + item = self.tableWidget.item(3, 0) + item.setText(_translate("Form", "1000")) + item = self.tableWidget.item(4, 0) + item.setText(_translate("Form", "180")) + item = self.tableWidget.item(5, 0) + item.setText(_translate("Form", "0.1")) + item = self.tableWidget.item(6, 0) + item.setText(_translate("Form", "50")) + item = self.tableWidget.item(7, 0) + item.setText(_translate("Form", "Fe_foil")) + item = self.tableWidget.item(8, 0) + item.setText(_translate("Form", "0")) + item = self.tableWidget.item(9, 0) + item.setText(_translate("Form", "0")) + item = self.tableWidget.item(10, 0) + item.setText(_translate("Form", "1")) + self.tableWidget.setSortingEnabled(__sortingEnabled) + self.pushButton.setText(_translate("Form", "Add Scan")) + self.pushButton_2.setText(_translate("Form", "Cancel")) + self.pushButton_3.setText(_translate("Form", "Done")) diff --git a/qexafs.ui b/qexafs.ui index 5f3a4d3..08e2649 100644 --- a/qexafs.ui +++ b/qexafs.ui @@ -6,206 +6,214 @@ 0 0 - 230 + 470 460 - Form + New Scan - - - - 12 - 12 - 212 - 427 - - - - - - - - 0 - 0 - - - - - 20 - 75 - true - true - - - - Scan Parameters - - - - - - - - 0 - 0 - - - - - 0 - 350 - - - - - 200 - 16777215 - - - - true - - - - Energy + + + + + + + + 0 + 0 + - - - - Edge + + + 20 + 75 + true + true + - - - Start Scan + Scan Parameters + + + + + + + + 0 + 0 + + + + + 0 + 350 + + + + + 200 + 16777215 + + + + true + + + + Energy + + + + + Edge + + + + + Start Scan + + + + + End Scan + + + + + Total Scan Time + + + + + Time per Point + + + + + Undulator Offset + + + + + Sample Name + + + + + Sample Position + + + + + Motor Position + + + + + Number of Scans + + + + + Value + + + + + 7112 + + + + + Fe_K + + + + + 150 + + + + + 1000 + + + + + 180 + + + + + 0.1 + + + + + 50 + + + + + Fe_foil + + + + + 0 + + + + + 0 + + + + + 1 + + + + + + + + + 0 + 0 + - - - End Scan + Add Scan - - + + + + - Total Scan Time + Clear - - + + + + + + + + + + + - Time per Point + Done - - - - Undulator Offset - - - - - Sample Name - - - - - Sample Position - - - - - Motor Position - - - - - Number of Scans - - - - - Value - - - - - 7112 - - - - - Fe_K - - - - - 150 - - - - - 1000 - - - - - 180 - - - - - 0.1 - - - - - 50 - - - - - Fe_foil - - - - - 0 - - - - - 0 - - - - - 1 - - - - - - - - - 0 - 0 - - - - Add Scan - - - - - - - Cancel - - - - - + + + + + diff --git a/xafs_GUI.py b/xafs_GUI.py index 43318bb..86500b1 100644 --- a/xafs_GUI.py +++ b/xafs_GUI.py @@ -4,11 +4,37 @@ from EXAFS_Monitor.monitor_gui import MonitorWidget import sys -from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow +from PyQt5.QtWidgets import QApplication, QWidget from main_gui import MainGui +from qexafs import QexafsGui + from functools import partial +class AddScan(QWidget, QexafsGui): + """ + Widget used to create new scans + """ + + def __init__(self): + super().__init__() + self.setupUi(self) + self.pushButton.clicked.connect(self.save_scans) + self.pushButton_2.clicked.connect(self.clear) + + def save_scans(self): + """ + Create list of scan + """ + line = [ + f"{self.tableWidget.verticalHeaderItem(i).text()}: {self.tableWidget.item(i, 0).text()}" for i in range(11)] + self.listWidget.addItem(str(self.listWidget.count()+1)+", ".join(line)) + + def clear(self): + for line in range(11): + self.tableWidget.item(line, 0).setText('') + + class XafsManager(QWidget, MainGui): """ Graphical-User Interface for P65 beamline @@ -21,7 +47,11 @@ class XafsManager(QWidget, MainGui): super().__init__() self.setupUi(self) - # self.pushButton.clicked.connect(self.listWidget) + self.pushButton.clicked.connect(self.add_scan) + + def add_scan(self): + self.add = AddScan() + self.add.show() # self.connect( # self.loadLast, @@ -46,15 +76,17 @@ class XafsManager(QWidget, MainGui): # SIGNAL("clicked()"), # partial(self.clearScans, scanListe) # ) - # Defines a single scan and returns the parameter as a dictionary object + # # def make_dict(self, scanListe): -# # Collect all the input +# """ +# Defines a single scan and returns the parameter as a dictionary object +# """ # edge_n = str(self.edge_name.text()) # if str(edge_n) == "": # showMessageBox(self, "Edge Name") -# dsPar = str(self.ds_param.text()) -# """if str(dsPar) == "": -# EXAFS_GUI_common.showMessageBox(self,"DS parameter")""" +# # dsPar = str(self.ds_param.text()) +# # """if str(dsPar) == "": +# # EXAFS_GUI_common.showMessageBox(self,"DS parameter")""" # edge_e = str(self.edge_energy.text()) # if str(edge_e) == "": # showMessageBox(self, "Edge energy") @@ -142,9 +174,9 @@ class XafsManager(QWidget, MainGui): # return scanListe - def showMessageBox(self, missing): - QMessageBox.information( - self, "Problem!!!", "Missing parameter: " + missing) +# def showMessageBox(self): +# QMessageBox.information( +# self, "Problem!!!", "Clicked") def main():