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
文章标题:pyqt5_站点管理_stcd_windows
文章来源:
http://cdxtjz.com/article/psddpd.html