千家信息网

pyqt5_站点管理_stcd_windows

发表于:2024-10-02 作者:千家信息网编辑
千家信息网最后更新 2024年10月02日,from PyQt5.QtWidgets import (QWidget,QTableWidget,QHBoxLayout,QVBoxLayout,QGridLayout,QGroupBox,QLin
千家信息网最后更新 2024年10月02日pyqt5_站点管理_stcd_windows
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


0