can save and load csv
This commit is contained in:
parent
8cfb47880a
commit
785dd86de5
143
IsegGUI.py
143
IsegGUI.py
|
@ -63,28 +63,14 @@ for k in range(0, nMod):
|
||||||
nChannel = len(chList)
|
nChannel = len(chList)
|
||||||
updateTime = 1 #sec
|
updateTime = 1 #sec
|
||||||
|
|
||||||
print(onOffList)
|
# print(onOffList)
|
||||||
|
|
||||||
from PyQt6.QtWidgets import QApplication, QMainWindow, QPushButton, QCheckBox, QLineEdit, QLabel, QVBoxLayout, QWidget, QTabWidget, QGridLayout
|
from PyQt6.QtWidgets import QApplication, QMainWindow, QPushButton, QCheckBox, QLineEdit, QLabel, QVBoxLayout, QWidget, QTabWidget, QGridLayout, QMessageBox, QFileDialog, QProgressBar
|
||||||
from PyQt6.QtCore import Qt, QThread, QTimer, QObject, pyqtSignal
|
from PyQt6.QtCore import Qt, QThread, QTimer, QObject, pyqtSignal
|
||||||
from functools import partial
|
from functools import partial
|
||||||
|
|
||||||
ColStrList = ["Name", "Ch", 'On/Off', "Set V [V]", "Set I [mA]", "Out V [V]", "Out I [uA]"]
|
ColStrList = ["Name", "Ch", 'On/Off', "Set V [V]", "Set I [mA]", "Out V [V]", "Out I [uA]"]
|
||||||
|
|
||||||
# class TimerThread(QThread):
|
|
||||||
# timeout = pyqtSignal()
|
|
||||||
# waitTime = int(1)
|
|
||||||
|
|
||||||
# def SetTime(self, time_in_sec):
|
|
||||||
# self.waitTime = time_in_sec
|
|
||||||
|
|
||||||
# def run(self):
|
|
||||||
# timer = QTimer(self)
|
|
||||||
# timer.setInterval(self.waitTime) # 1 second
|
|
||||||
# timer.timeout.connect(self.timeout.emit)
|
|
||||||
# timer.start()
|
|
||||||
|
|
||||||
|
|
||||||
class MyWindow(QMainWindow):
|
class MyWindow(QMainWindow):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
|
@ -104,15 +90,40 @@ class MyWindow(QMainWindow):
|
||||||
self.txtIOut = [[QLineEdit() for _ in range(rows)] for rows in nChPerMod]
|
self.txtIOut = [[QLineEdit() for _ in range(rows)] for rows in nChPerMod]
|
||||||
self.chkON = [[QCheckBox() for _ in range(rows)] for rows in nChPerMod]
|
self.chkON = [[QCheckBox() for _ in range(rows)] for rows in nChPerMod]
|
||||||
|
|
||||||
# timer = TimerThread()
|
|
||||||
# timer.timeout.connect(self.on_timeout)
|
|
||||||
# timer.start()
|
|
||||||
|
|
||||||
self.timer = QTimer(self)
|
self.timer = QTimer(self)
|
||||||
self.timer.timeout.connect(self.updateTimer)
|
self.timer.timeout.connect(self.updateTimer)
|
||||||
self.time = 0
|
# self.time = 0
|
||||||
self.timer.start(updateTime*1000)
|
self.timer.start(updateTime*1000)
|
||||||
|
|
||||||
|
#=========== database and refresh time
|
||||||
|
gLayout = QGridLayout()
|
||||||
|
layout.addLayout(gLayout)
|
||||||
|
|
||||||
|
lbIP = QLabel("Database IP : ", self)
|
||||||
|
lbIP.setAlignment(Qt.AlignmentFlag.AlignRight)
|
||||||
|
gLayout.addWidget(lbIP, 0, 0)
|
||||||
|
|
||||||
|
self.txtIP = QLineEdit(self)
|
||||||
|
self.txtIP.setText("128.186.111.107")
|
||||||
|
self.txtIP.textChanged.connect(partial(self.TextChange, self.txtIP))
|
||||||
|
self.txtIP.returnPressed.connect(partial(self.UnSetTextColor, self.txtIP))
|
||||||
|
gLayout.addWidget(self.txtIP, 0, 1)
|
||||||
|
|
||||||
|
self.chkDB = QCheckBox("Enable", self)
|
||||||
|
gLayout.addWidget(self.chkDB, 0, 2)
|
||||||
|
|
||||||
|
|
||||||
|
lb1 = QLabel("Refresh period [sec] :", self)
|
||||||
|
lb1.setAlignment(Qt.AlignmentFlag.AlignRight)
|
||||||
|
gLayout.addWidget(lb1, 1, 0)
|
||||||
|
|
||||||
|
self.txtRefresh = QLineEdit(self)
|
||||||
|
self.txtRefresh.setText(str(updateTime))
|
||||||
|
self.txtRefresh.textChanged.connect(partial(self.TextChange, self.txtRefresh))
|
||||||
|
self.txtRefresh.returnPressed.connect(self.SetTimer)
|
||||||
|
self.txtRefresh.returnPressed.connect(partial(self.UnSetTextColor, self.txtRefresh))
|
||||||
|
gLayout.addWidget(self.txtRefresh, 1, 1)
|
||||||
|
|
||||||
#=========== set tab
|
#=========== set tab
|
||||||
self.tabWidget = QTabWidget(self)
|
self.tabWidget = QTabWidget(self)
|
||||||
layout.addWidget(self.tabWidget)
|
layout.addWidget(self.tabWidget)
|
||||||
|
@ -158,6 +169,9 @@ class MyWindow(QMainWindow):
|
||||||
layout_tab.addWidget(self.txtV[k][i], 1+i, j)
|
layout_tab.addWidget(self.txtV[k][i], 1+i, j)
|
||||||
|
|
||||||
self.txtV[k][i].returnPressed.connect(partial(self.SetHV, k, i) )
|
self.txtV[k][i].returnPressed.connect(partial(self.SetHV, k, i) )
|
||||||
|
self.txtV[k][i].returnPressed.connect(partial(self.UnSetTextColor, self.txtV[k][i]))
|
||||||
|
self.txtV[k][i].textChanged.connect(partial(self.TextChange, self.txtV[k][i]))
|
||||||
|
|
||||||
#------------ I set
|
#------------ I set
|
||||||
if j == 4:
|
if j == 4:
|
||||||
self.txtI[k][i].setText("{:.2f}".format(iList[sum(nChPerMod[:k]) + i]*1000))
|
self.txtI[k][i].setText("{:.2f}".format(iList[sum(nChPerMod[:k]) + i]*1000))
|
||||||
|
@ -165,6 +179,9 @@ class MyWindow(QMainWindow):
|
||||||
layout_tab.addWidget(self.txtI[k][i], 1+i, j)
|
layout_tab.addWidget(self.txtI[k][i], 1+i, j)
|
||||||
|
|
||||||
self.txtI[k][i].returnPressed.connect(partial(self.SetI, k, i) )
|
self.txtI[k][i].returnPressed.connect(partial(self.SetI, k, i) )
|
||||||
|
self.txtI[k][i].returnPressed.connect(partial(self.UnSetTextColor, self.txtI[k][i]))
|
||||||
|
self.txtI[k][i].textChanged.connect(partial(self.TextChange, self.txtI[k][i]))
|
||||||
|
|
||||||
#------------ V out
|
#------------ V out
|
||||||
if j == 5:
|
if j == 5:
|
||||||
self.txtVOut[k][i].setText("{:.2f}".format(outVList[sum(nChPerMod[:k]) + i]))
|
self.txtVOut[k][i].setText("{:.2f}".format(outVList[sum(nChPerMod[:k]) + i]))
|
||||||
|
@ -182,6 +199,85 @@ class MyWindow(QMainWindow):
|
||||||
self.txtIOut[k][i].setStyleSheet("background-color: lightgrey;")
|
self.txtIOut[k][i].setStyleSheet("background-color: lightgrey;")
|
||||||
|
|
||||||
self.tabWidget.addTab(tab, "Mod-" + str(k))
|
self.tabWidget.addTab(tab, "Mod-" + str(k))
|
||||||
|
|
||||||
|
#============= Save setting
|
||||||
|
sLayout = QGridLayout()
|
||||||
|
layout.addLayout(sLayout)
|
||||||
|
|
||||||
|
bLoad = QPushButton("Load", self)
|
||||||
|
bLoad.clicked.connect(self.LoadSetting)
|
||||||
|
sLayout.addWidget(bLoad, 0, 0)
|
||||||
|
|
||||||
|
self.txtFile = QLineEdit(self)
|
||||||
|
sLayout.addWidget(self.txtFile, 0, 1)
|
||||||
|
|
||||||
|
bSave = QPushButton("Save", self)
|
||||||
|
bSave.clicked.connect(self.SaveSetting)
|
||||||
|
sLayout.addWidget(bSave, 0, 3)
|
||||||
|
|
||||||
|
#============= General Setting #TODO
|
||||||
|
|
||||||
|
######################################################### slots
|
||||||
|
def SaveSetting(self):
|
||||||
|
fileName = self.txtFile.text()
|
||||||
|
if fileName == "" :
|
||||||
|
return
|
||||||
|
outfile = open(fileName, "w")
|
||||||
|
csv_writer = csv.writer(outfile)
|
||||||
|
for k in range(0, nMod):
|
||||||
|
for i, a in enumerate(modChList[k]) :
|
||||||
|
papap = [self.txtName[k][i].text(), "u"+str(modChList[k][i]), self.txtV[k][i].text(),self.txtI[k][i].text()]
|
||||||
|
csv_writer.writerow( papap )
|
||||||
|
outfile.close()
|
||||||
|
self.txtFile.setText( fileName + " (Saved)")
|
||||||
|
msg_box = QMessageBox()
|
||||||
|
msg_box.setWindowTitle("Information")
|
||||||
|
msg_box.setText("Setting saved to " + fileName + "as a csv file.")
|
||||||
|
msg_box.setIcon(QMessageBox.Icon.Information)
|
||||||
|
msg_box.setStandardButtons(QMessageBox.StandardButton.Ok)
|
||||||
|
msg_box.exec()
|
||||||
|
|
||||||
|
def LoadSetting(self):
|
||||||
|
file_path, _ = QFileDialog.getOpenFileName(self, "Open File", "", "CSV Files (*.csv);;All Files (*)")
|
||||||
|
|
||||||
|
if file_path:
|
||||||
|
infile = open(file_path, "r")
|
||||||
|
csv_reader = csv.reader(infile)
|
||||||
|
row_count = sum(1 for row in csv_reader)
|
||||||
|
infile.seek(0)
|
||||||
|
count = 0
|
||||||
|
for row in csv_reader:
|
||||||
|
ch = row[1]
|
||||||
|
if ch.startswith('u') and ch[1:].isdigit():
|
||||||
|
chID = int(ch[1:]) % 100
|
||||||
|
modID = int(int(ch[1:]) / 100)
|
||||||
|
# print(str(modID) + "," + str(chID))
|
||||||
|
|
||||||
|
self.txtName[modID][chID].setText(row[0])
|
||||||
|
self.txtV[modID][chID].setText(row[2])
|
||||||
|
self.txtI[modID][chID].setText(row[3])
|
||||||
|
|
||||||
|
# print("Setting " + row[1] )
|
||||||
|
mpod.SetHV(int(ch[1:]), float(row[2]))
|
||||||
|
time.sleep(0.01)
|
||||||
|
mpod.SetCurrent(int(ch[1:]), float(row[3])/1000)
|
||||||
|
time.sleep(0.01)
|
||||||
|
count = count+1
|
||||||
|
self.txtFile.setText("Loading Setting, %d/%d ." % (count, row_count))
|
||||||
|
self.repaint()
|
||||||
|
|
||||||
|
self.txtFile.setText(file_path + " (Loaded)")
|
||||||
|
|
||||||
|
def UnSetTextColor(self, qLineEdit : QLineEdit):
|
||||||
|
qLineEdit.setStyleSheet("")
|
||||||
|
|
||||||
|
def TextChange(self, qLineEdit : QLineEdit):
|
||||||
|
qLineEdit.setStyleSheet("color : darkgreen;")
|
||||||
|
|
||||||
|
def SetTimer(self):
|
||||||
|
sec = float(self.txtRefresh.text())
|
||||||
|
self.timer.stop()
|
||||||
|
self.timer.start(int(sec * 1000))
|
||||||
|
|
||||||
def SetHV(self, mod, ch):
|
def SetHV(self, mod, ch):
|
||||||
value = float(self.txtV[mod][ch].text())
|
value = float(self.txtV[mod][ch].text())
|
||||||
|
@ -219,10 +315,9 @@ class MyWindow(QMainWindow):
|
||||||
if value == 3 :
|
if value == 3 :
|
||||||
self.chkON[mod][ch].setChecked(False)
|
self.chkON[mod][ch].setChecked(False)
|
||||||
self.chkON[mod][ch].setStyleSheet("background-color: red;")
|
self.chkON[mod][ch].setStyleSheet("background-color: red;")
|
||||||
|
|
||||||
|
|
||||||
def updateTimer(self):
|
def updateTimer(self):
|
||||||
self.time += 1
|
# self.time += 1
|
||||||
# print(f'Time: {self.time}')
|
# print(f'Time: {self.time}')
|
||||||
outVList = mpod.GetAllOutputHV()
|
outVList = mpod.GetAllOutputHV()
|
||||||
outIList = mpod.GetAllLC()
|
outIList = mpod.GetAllLC()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user