设为首页 收藏本站
查看: 793|回复: 0

[经验分享] pyqt5_站点管理_stcd_windows

[复制链接]

尚未签到

发表于 2018-6-18 16:11:47 | 显示全部楼层 |阅读模式
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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-525544-1-1.html 上篇帖子: pyqt5_站点管理_db_windows 下篇帖子: PyQt5总结--index_windows
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表