x625802392 发表于 2018-6-18 16:11:47

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.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.strip() == '':
  
                            self.list_stcd.append(.strip(), line.strip(), line.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 + ';' + line + ';' + line + '\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))
  
            self.stcd_tablewidget.setItem(x, 1, QTableWidgetItem(line))
  
            self.stcd_tablewidget.setItem(x, 2, QTableWidgetItem(line))
  
            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:
  
                flag = 0
  
                if self.stcd_rtu.text().strip() != self.list_stcd:
  
                  del self.list_stcd
  
                  self.list_stcd.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:
  
                  del self.list_stcd
  
                  self.list_stcd.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 + ';' + line + ';' + line + '\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()
  
      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
  
      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 + ';' + line + ';' + line + '\n')
  
            de_file.flush()
  
      self.stcd_stcd.setText('')
  
      self.stcd_rtu.setText('')
  
      self.stcd_name.setText('')
  
      self.table_clicked_old = -1
页: [1]
查看完整版本: pyqt5_站点管理_stcd_windows