站点管理

时间:2022-02-17 09:01:14

标签:pyqt5

from PyQt5.QtWidgets import (QWidget,QTableWidget,QHBoxLayout,QVBoxLayout,QGridLayout,QGroupBox,QLineEdit,QLabel,QPushButton,                              QHeaderView,QTableWidgetItem,QMessageBox) import os,re #定义站点信息窗口 class stcd_window(QWidget):     def __init__(self):         super().__init__()         self.stcd_tablewidget = QTableWidget(0, 3)         self.stcd_stcd = QLineEdit()         self.stcd_rtu = QLineEdit()         self.stcd_name = QLineEdit()         self.list_stcd = []         self.stcd_pik_path = ‘.//DATA//STCDinfo.pik‘         self.stcd_txt_path = ‘.//DATA//站点信息.txt‘         self.table_clicked_old = -1 #用来记录行号         self.initUI()     def initUI(self):         #初始化窗口组件         self.stcd_tablewidget.setHorizontalHeaderLabels([‘站点编码‘, ‘RTU编码‘, ‘站点名称‘])         self.stcd_tablewidget.setEditTriggers(QTableWidget.NoEditTriggers)         table_group = QGroupBox(‘站点‘)         table_vbox = QVBoxLayout()         table_vbox.addWidget(self.stcd_tablewidget)         table_group.setLayout(table_vbox)         stcd_group = QGroupBox(‘站点信息配置‘)         stcd_grid = QGridLayout()         stcd_label = QLabel(‘站点编码:‘)         rtu_label = QLabel(‘RTU编码:‘)         name_label = QLabel(‘站点名称:‘)         delete_button = QPushButton(‘删除‘)         input_button = QPushButton(‘保存‘)         delete_button.clicked.connect(self.delete_stcd_info)         input_button.clicked.connect(self.save_stcd_info)         self.stcd_tablewidget.cellClicked[int, int].connect(self.cell_clicked)         stcd_grid.addWidget(stcd_label, 0, 0)         stcd_grid.addWidget(self.stcd_stcd, 0, 1)         stcd_grid.addWidget(rtu_label, 1, 0)         stcd_grid.addWidget(self.stcd_rtu, 1, 1)         stcd_grid.addWidget(name_label, 2, 0)         stcd_grid.addWidget(self.stcd_name, 2, 1)         button_grid = QGridLayout()         button_grid.addWidget(delete_button, 0, 0)         button_grid.addWidget(input_button, 0, 1)         stcd_vbox = QVBoxLayout()         stcd_vbox.addLayout(stcd_grid)         stcd_vbox.addLayout(button_grid)         stcd_group.setLayout(stcd_vbox)         hbox = QHBoxLayout()         hbox.addWidget(table_group)         hbox.addWidget(stcd_group)         self.setLayout(hbox)         self.get_list_stcd()         self.initTable()     #初始化站点信息表单     def get_list_stcd(self):         try:             if not os.path.exists(self.stcd_txt_path):                 with open(self.stcd_txt_path, ‘w‘) as stcd_txt_file:                     stcd_txt_file.write(‘站点编码;RTU站点;站点名称\n‘)                 return             with open(self.stcd_txt_path, ‘r‘) as stcd_txt_file:                 stcd_txt_file.readline()                 self.list_stcd.clear()                 txt_line = stcd_txt_file.readline()                 while txt_line:                     txt_line = txt_line.strip(‘\n‘)                     txt_line = txt_line.replace(‘;‘, ‘;‘)                     x = re.findall(r‘;‘, txt_line)                     if len(x) >1:                         txt_line = txt_line.replace(‘—‘, ‘-‘)                         line = txt_line.strip().split(‘;‘, 2)                         if not line[0].strip() == ‘‘:                             self.list_stcd.append([line[0].strip(), line[1].strip(), line[2].strip()])                     txt_line = stcd_txt_file.readline()             try:                 os.remove(self.stcd_txt_path)             except Exception as error1:                 return             with open(self.stcd_txt_path, ‘a‘) as stcd_txt_file:                 stcd_txt_file.write(‘站点编码;RTU站点;站点名称\n‘)                 for line in self.list_stcd:                     stcd_txt_file.write(line[0] + ‘;‘ + line[1] + ‘;‘ + line[2] + ‘\n‘)         except Exception as error:             return     #初始化列表     def initTable(self):         x = 0         for line in self.list_stcd:             self.stcd_tablewidget.insertRow(x)             self.stcd_tablewidget.setItem(x, 0, QTableWidgetItem(line[0]))             self.stcd_tablewidget.setItem(x, 1, QTableWidgetItem(line[1]))             self.stcd_tablewidget.setItem(x, 2, QTableWidgetItem(line[2]))             x = x + 1     #表格被选择     def cell_clicked(self, x, y):         if self.table_clicked_old == x:             return         self.table_clicked_old = x         self.stcd_stcd.setText(self.stcd_tablewidget.item(x, 0).text())         self.stcd_rtu.setText(self.stcd_tablewidget.item(x, 1).text())         self.stcd_name.setText(self.stcd_tablewidget.item(x, 2).text())     #保存按钮     def save_stcd_info(self):         if self.stcd_stcd.text().strip() == ‘‘ or self.stcd_rtu.text().strip() == ‘‘ or self.stcd_name.text().strip() == ‘‘:             QMessageBox.warning(self,‘注意‘,‘站点编码,RTU编码,站点名称\n不能为空.‘)             return         x = 0         while x < len(self.list_stcd):             if self.stcd_stcd.text().strip() == self.list_stcd[x][0]:                 flag = 0                 if self.stcd_rtu.text().strip() != self.list_stcd[x][1]:                     del self.list_stcd[x][1]                     self.list_stcd[x].insert(1,self.stcd_rtu.text().strip())                     self.stcd_tablewidget.setItem(x,1,QTableWidgetItem(self.stcd_rtu.text().strip()))                     flag = 1                 if self.stcd_name.text().strip() != self.list_stcd[x][2]:                     del self.list_stcd[x][2]                     self.list_stcd[x].insert(2, self.stcd_name.text().strip())                     self.stcd_tablewidget.setItem(x, 2, QTableWidgetItem(self.stcd_name.text().strip()))                     flag = 2                 if flag > 0:                     os.remove(self.stcd_txt_path)                     with open(self.stcd_txt_path, ‘a‘) as r_file:                         r_file.write(‘站点编码;RTU站点;站点名称\n‘)                         for line in self.list_stcd:                             r_file.write(line[0] + ‘;‘ + line[1] + ‘;‘ + line[2] + ‘\n‘)                         r_file.flush()                 return             x = x + 1         self.stcd_tablewidget.insertRow(len(self.list_stcd))         self.stcd_tablewidget.setItem(len(self.list_stcd), 0, QTableWidgetItem(self.stcd_stcd.text().strip()))         self.stcd_tablewidget.setItem(len(self.list_stcd), 1, QTableWidgetItem(self.stcd_rtu.text().strip()))         self.stcd_tablewidget.setItem(len(self.list_stcd), 2, QTableWidgetItem(self.stcd_name.text().strip()))         self.list_stcd.append([self.stcd_stcd.text().strip(), self.stcd_rtu.text().strip(), self.stcd_name.text().strip()])         with open(self.stcd_txt_path,‘a‘) as file:             file.write(self.stcd_stcd.text().strip() + ‘;‘ + self.stcd_rtu.text().strip() + ‘;‘ + self.stcd_name.text().strip() + ‘\n‘)         self.table_clicked_old = -1     #删除按钮     def delete_stcd_info(self):         if self.table_clicked_old == -1:             QMessageBox.warning(self,‘提示‘,‘请先选择要删除的站点,再删除.‘)             return         self.stcd_tablewidget.removeRow(self.table_clicked_old)         del self.list_stcd[self.table_clicked_old]         os.remove(self.stcd_txt_path)         with open(self.stcd_txt_path, ‘a‘) as de_file:             de_file.write(‘站点编码;RTU站点;站点名称\n‘)             for line in self.list_stcd:                 de_file.write(line[0] + ‘;‘ + line[1] + ‘;‘ + line[2] + ‘\n‘)             de_file.flush()         self.stcd_stcd.setText(‘‘)         self.stcd_rtu.setText(‘‘)         self.stcd_name.setText(‘‘)         self.table_clicked_old = -1