pyqt开发上位机

用python做上位机的开发资料非常少。本人专研了一年多时间,也算小有收获。熟悉QT的朋友都知道,Qt做出来的界面好看,功能特别强大。但是学习Qt的成本时比较高的,C++的语法点特别多,特别是对做电气人员来说,门槛比较高。好在python对Qt进行了全部封装,python的易学性和Qt的强大联合,使得门槛大大降低。当然语言只是个工具而已,python只是入门简单,其实到深处和C++都差不多的。只有不停的探究,才会不停的进步。任何一个技术学三两个月的能学会的肯定不值钱,绝大部分人与人之间的智商差距很小,关键看谁能坚持的久。废话不多说,先说我对上位机开发的步骤的理解吧!

上位机开发一般分3部分,界面,逻辑,通信。这就是提的MVC模式,M代表模型,比如你需要处理数据,或通信部分,可以创建一个类,专门处理这些数据,到时把这个类实例化一个对象放在逻辑层里调用。C代表逻辑层起到承上启下作用。在这里一般使用自定义信号用来发送数据给界面,从而更新界面的显示状态。如果项目小的化不用也无所谓。V一般代表界面,给我们展示的。


import random
import time

from PyQt5.QtCore import QSettings

from PyQt5.Qt import *

class Tool(QObject):
    def __init__(self,parent):
        super(Tool, self).__init__()
        self.parent=parent  #把窗体对象传进来。

        self.runing_list=[]
        self.error_list=[]

        self.timer=QTimer(self)
        self.timer.timeout.connect(self.test) #用定时器定时读取下位机运行状态

        self.setting = QSettings('test.ini',QSettings.IniFormat) #用来读取配置文件信息
        self.setting.setIniCodec('utf-8')

    def test(self):
        self.parent.change_label_color() #用来改变窗体界面指示灯的状态

        self.runing_list=[random.randint(0,1) for _ in range(10)] #模拟运行信号
        self.error_list=[random.randint(0,1) for _ in range(10)]  #模拟故障信号

        if (self.runing_list[0] & self.runing_list[3])==1:  #用来判断逻辑 互锁电路
            print('you can do what you want')
















class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("上位机的学习")
        self.resize(500,500)

        self.tool=Tool(self) #实例化工具类 ,具体逻辑功能在这个类里实现。从而达到逻辑与界面分离,这个要在初始化UI之前。


        self.setup_ui()



    def setup_ui(self):
        self.btn=QPushButton('run',self)
        self.btn.clicked.connect(self.fun3)

        self.label_list=[] #建立一个列表,把标签全部加载进来,后期只需要对这个列表操作即可。方便管理

        for i in range(10): #生成10个标签,用来显示指示灯
            label=QLabel(self)
            label.resize(40,40)
            label.setStyleSheet('border-radius:20px;background-color:gray;')
            label.move(i*60,30)
            self.label_list.append(label)


    def fun3(self):
        self.tool.timer.start(200) #启动定时器

    def change_label_color(self):  #用来改变指示灯颜色。这里的函数到时给别Tool类调用。当然用信号与槽更好。
        for i in range(len(self.tool.runing_list)):
            if self.tool.runing_list[i]==1:
                self.label_list[i].setStyleSheet('border-radius:20px;background-color:green;')
            else:
                self.label_list[i].setStyleSheet('border-radius:20px;background-color:red;')







if __name__ == '__main__':
    import sys
    app=QApplication(sys.argv)

    win=Window()
    win.show()





    sys.exit(app.exec_())













你可能感兴趣的:(pyqt)