每天忙忙碌碌,很难静下心来搞技术。所以整体做下来思维比较混乱,反反复复地修改,不过整体的框架目前看来还是可以,达到了预期的设想。
利用目前学到了的知识和方法,建立起来一个简单框架,并初步规划功能,开始。
1、主页面
先不考虑界面的美化,以实现简单功能为目标。美学和人体工程学的最后再说。
2、主操作界面:
先搞这两个界面进行实验。
3、编写代码。
# 这个是主函数import sys
from time import strftime
from PyQt5.QtWidgets import *
from PyQt5.QtCore import QObject, Qt, pyqtSignal
from PyQt5 import uic
from ClockPulse import Clocker # 自定义的周期脉冲函数,默认参数下周期为1s
import logos, bkgrd # 导入图像资源
# 建立object,定义object范围内的信号与变量
class UiObject(QObject): # 定义一个Object
signal1 = pyqtSignal(int)
float1 = 0.0
def __init__(self, parent=None):
super(UiObject, self).__init__(parent)
# 各个窗体的初始化
# @staticmethod
class StartToDo:
@staticmethod
def do1(): # 窗体初始化
ui.form1.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint) # 关掉边框,始终最前
ui.form1.btn_interlock.styles = [['rgb(0,255,0)', 'black', '联锁运行中'], ['red', 'white', '联锁已解除']] # 对画面中的多态按钮进行初始化
ui.form1.btn_pump_start.styles = [['gray', 'black', '油泵启停'], ['rgb(0,255,0)', 'black', '油泵启停']] # 对画面中的多态按钮进行初始化
@staticmethod
def do2(): # 窗体初始化
ui.form2.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint) # 关掉边框,始终最前
ui.form2.btn_mode__yt.styles = [['rgb(0,255,0)', 'black', '双压模式'], ['#ffff00', '#bf2aff', '左压模式'], ['#bf2aff', '#ffff00', '右压模式']] # 对画面中的多态按钮进行初始化
ui.form2.progress_system.format = ' MPa'
#
@staticmethod
def do3(): # 窗体初始化
ui.form3.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint) # 关掉边框,始终最前
@staticmethod
def do4(): # 窗体初始化
ui.form4.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint) # 关掉边框,始终最前
# 信号的连接
def connections():
# 周期时钟的连接
timer_05s.timeout.connect(Slots.timer_05s_timeout)
timer_1s.timeout.connect(Slots.timer_1s_timeout)
# signal的连接
ui.signal1.connect(Slots.slot_signal1)
# 画面1中的操作器件动作的连接
ui.form1.btn_pump_start.clicked.connect(Slots.f1_pump_start_clicked)
ui.form1.btn_interlock.clicked.connect(Slots.f1_interlock_clicked)
# ui.form1.btn_w_ym.clicked.connect(lambda: toggle_windows(ui.forms, 1))
ui.form1.btn_w_ym.clicked.connect(lambda: toggle_windows(ui.forms, 1))
ui.form1.btn_w_seeting.clicked.connect(lambda: toggle_windows(ui.forms, 2))
ui.form1.btn_w_data.clicked.connect(lambda: toggle_windows(ui.forms, 3))
ui.form1.btnquit.clicked.connect(lambda: toggle_windows(ui.forms, 0))
# 画面2中的操作器件动作的连接
ui.form2.btn_return.clicked.connect(ui.form2.hide)
ui.form2.btn_mode__yt.clicked.connect(Slots.f2_mode_yt_clicked)
ui.form2.slider.valueChanged.connect(Slots. f2_slider_valueChanged)
# 画面3中的操作器件动作的连接
ui.form3.btn_return.clicked.connect(ui.form3.hide)
# 画面4中的操作器件动作的连接
ui.form4.btn_return.clicked.connect(ui.form4.hide)
# 切换各个窗口的显示和隐藏
def toggle_windows(forms, n):
i = 1
if n == 0:
for wd in forms[1:]:
wd.close() # 关闭所有窗口
else:
forms[n+1].show()
for wd in forms[2:]: # 对所有的窗口实体进行操作
if i != n:
wd.hide()
i += 1
# 槽的集中地
# @staticmethod
class Slots:
@staticmethod
def slot_signal1(var): # 可以测试一下进度条的各种效果
# ui.form2.progress_system.setValue(var) # 普通的设置和显示
ui.form2.progress_system.set_value_limit(var, 100) # 超过设定阈值变红
# ui.form2.progress_system.set_value_endline(var) # 离终点越近越红
# ui.form2.progress_system.set_value_G2R(var) # 由绿变红
@staticmethod
def f1_interlock_clicked():
ui.form1.btn_interlock.togg()
@staticmethod
def f1_pump_start_clicked():
ui.form1.btn_pump_start.togg() # 切换组态的子函数
@staticmethod
def f2_mode_yt_clicked():
ui.form2.btn_mode__yt.togg() # 切换组态的子函数
@staticmethod
def f2_slider_valueChanged(var):
ui.signal1.emit(var)
@staticmethod
def timer_1s_timeout():
ui.form1.lcd_clock.display(strftime('%Y-%m-%d %H:%M:%S'))
ui.form2.lcd_clock.display(strftime('%Y-%m-%d %H:%M:%S'))
ui.form3.lcd_clock.display(strftime('%Y-%m-%d %H:%M:%S'))
ui.form4.lcd_clock.display(strftime('%Y-%m-%d %H:%M:%S'))
@staticmethod #模拟一个变化的浮点数变量,用进度条显示
def timer_05s_timeout():
ui.float1 += 0.1
if ui.float1 > 20.0:
ui.float1 = 0.0
ui.signal1.emit(int(round(ui.float1*10)))
if __name__ == '__main__':
app = QApplication(sys.argv)
timer_1s = Clocker() # 定义全局1s的周期定时器
timer_05s = Clocker(500) # 定义全局500ms的周期定时器
ui = UiObject() # object的本地实体化
ui.form1 = uic.loadUi('移动操作主屏.ui') # 导入ui
StartToDo.do1() # 初始化
ui.form2 = uic.loadUi('压煤操作屏.ui') # 导入ui
StartToDo.do2() # 初始化
ui.form3 = uic.loadUi('参数设定.ui') # 导入ui
StartToDo.do3() # 初始化
ui.form4 = uic.loadUi('数据处理.ui') # 导入ui
StartToDo.do4() # 初始化
ui.forms = [0, ui.form1, ui.form2, ui.form3, ui.form4] # 画面的集中管理
connections() # 动作连接
ui.form1.show() # 起始画面
sys.exit(app.exec_())
新学习到了lambda函数,确实很好用 :)
下一步的计划是连接到PLC,用snap7进行通信。
运行效果: