4.参数再计算
同样的新建一个Dialog,同样的添加静态文本框,选项框,输入框,确认按钮,同样的修改标签,添加选项:
改完之后:
注意左侧选项框的名字,选项框名字和代码对不上就会报错。
现在太乱了,我们重新排列一下,并把第三个第四个选择栏进行隐藏(就和刚才画图那个窗口的逻辑是一样的,根据第一个选项框返回的值,决定后面显示哪个选项框)
这里观察了一下,发现记录时间的输入框写错了,这个框应该也采取选择的形式,就修改过来了:
再核对一下左边各组件的名字能否对的上,给查询按钮添加事件evt_datacount,给第一个选项框(应变扰度那个)添加事件checkChoice,按F8生成代码。
需要实现对选项框的隐藏和显示(和刚才绘图界面同理),还要实现后台数据计算后供给前端,所以就需要几个set方法,把后端数据传输到指定格子内:
class DateCount(CSDNtext01.DataDetailFrame):
def __init__(self):
CSDNtext01.DataDetailFrame.__init__(self,parent=None)
# 和刚才的绘图界面的显示隐藏代码一致
def checkChoice(self, event):
# print(self.m_comboBox1.GetValue())
if self.m_comboBox5.GetValue() == '应变':
self.m_comboBoxyb1.Show()
self.m_comboBoxrd1.Hide()
self.m_comboBoxwd1.Hide()
self.Layout()
if self.m_comboBox5.GetValue() == '扰度':
self.m_comboBoxyb1.Hide()
self.m_comboBoxrd1.Show()
self.m_comboBoxwd1.Hide()
self.Layout()
if self.m_comboBox5.GetValue() == '温度':
self.m_comboBoxyb1.Hide()
self.m_comboBoxrd1.Hide()
self.m_comboBoxwd1.Show()
self.Layout()
self.Layout()
# 在这个里面实现参数计算
def evt_datacount(self, event):
conn = Connection(
host="localhost",
port=3306,
user="root",
password="123456",
db="Csdn_text01"
)
cursor = conn.cursor()
if self.m_comboBox5.GetValue() == "应变":
type1 = "yb_db"
type2 = self.m_comboBoxyb1.GetValue()
date = self.m_comboBox21.GetValue()
if self.m_comboBox5.GetValue() == "扰度":
type1 = "rd_db"
type2 = self.m_comboBoxrd1.GetValue()
date = self.m_comboBox21.GetValue()
if self.m_comboBox5.GetValue() == "温度":
type1 = "wd_db"
type2 = self.m_comboBoxwd1.GetValue()
date = self.m_comboBox21.GetValue()
cursor.execute("select {},{} from {}".format(type2, "timestamp_column", type1))
# 前台拿回来的时间是str,格式不同不能直接使用
data_list = cursor.fetchall()
# 把前台数据转换为str
front_date = datetime.strptime(date, "%Y-%m-%d")
temp_list = []
for i in data_list:
temp = str(i[1])
# 把固定格式的str转换成datetime格式
back_date = datetime.strptime(temp, "%Y-%m-%d %H:%M:%S")
# 前台拿回来的数据只精确到日,后台的数据精确到了分秒。我们此时只需要把后台时间的日拿来跟前台对比,
# 如果一样,就放到一个列表中,便于后续计算
if back_date.date() == front_date.date():
temp_list.append(i[0])
# 最大值
max = np.max(temp_list)
# 最小值
min = np.min(temp_list)
# 平均数
average = np.mean(temp_list)
# 方差
var = np.var(temp_list)
# 保留三位小数
average = format(average, '.3f')
var = format(var, '.3f')
# 把结果送给前台
self.set_textCtrl7(str(max))
self.set_textCtrl8(str(min))
self.set_textCtrl9(str(average))
self.set_textCtrl10(str(var))
def set_textCtrl7(self, text):
self.m_textCtrl7.SetValue(text)
# 最小值
def set_textCtrl8(self, text):
self.m_textCtrl8.SetValue(text)
# 平均值
def set_textCtrl9(self, text):
self.m_textCtrl9.SetValue(text)
# 方差
def set_textCtrl10(self, text):
self.m_textCtrl10.SetValue(text)
此时后端逻辑代码编写完成,和前端进行连接。回到wxfb,在主界面的菜单栏下,给“参数再计算”添加事件evt_count,然后在主窗口的继承类中重写该事件:
def evt_count( self, event ):
datecount=DateCount()
datecount.Show()
在运行过程中我们会发现,切换扰度和温度后排版会出现错误,这是因为我们没有把扰度和温度的下属选项框调成和其他的一样的格式:
我这里是所有的组件都用了最上面的Expand和Stretch,所以我此处给他们两也加上,记得F8保存:
测试并没有发现问题