wxpython写一个多线程程序第一步:wxFormBuilder
警 告 : 本 博 客 所 写 内 容 严 禁 盗 用 , 违 者 必 究 ! 转 发 请 标 明 出 处 \color{red}{警告:本博客所写内容严禁盗用,违者必究! 转发请标明出处} 警告:本博客所写内容严禁盗用,违者必究!转发请标明出处
程序的目的
实现串口数据输入后采集串口数据,实时输出数据,且做可视化处理,由用户选择性保存数据
1搭建桌面程序框架
我是用的wxFormBuilder3.9来搭建程序框架,学习了wxpython两周后发现有可视化编程工具果断放弃,直接拿着开干。
wxFormBuilder3.9下载
1.1初始界面搭建
给窗口分区,分块,一共分为4个功能区,串口控制,实时显示,可视化显示选择,数据保存,数据实时绘制区。
不过这是最初布局,最后做下来以后发现应为要做数据可视化,需要分割窗口,所以实时绘制区需要单独分割一个窗口出来
1.2wxpython 事件处理
为按键绑定事,我们在wxFormBuilder里面选中按键,右面的events的name里面填写事件名,给每一个按键,复选框安排一个个事件,代表他们自己的事件触发以后会区执行我们自己定义的事件名函数里面的程序。话不多说上图
1.3 代码生成以及错误修改
点击python,程序会自动生成代码,如下图所示
复制代码,到我们的pycharm里面运行
# -*- coding: utf-8 -*-
###########################################################################
## Python code generated with wxFormBuilder (version Oct 26 2018)
## http://www.wxformbuilder.org/
##
## PLEASE DO *NOT* EDIT THIS FILE!
###########################################################################
import wx
import wx.xrc
###########################################################################
## Class MyFrame1
###########################################################################
class MyFrame1 ( wx.Frame ):
def __init__( self, parent ):
wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 1000,809 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )
self.SetSizeHints( wx.DefaultSize, wx.DefaultSize )
self.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_WINDOW ) )
bSizer1 = wx.BoxSizer( wx.VERTICAL )
sbSizer5 = wx.StaticBoxSizer( wx.StaticBox( self, wx.ID_ANY, wx.EmptyString ), wx.VERTICAL )
fgSizer1 = wx.FlexGridSizer( 0, 11, 0, 0 )
fgSizer1.SetFlexibleDirection( wx.BOTH )
fgSizer1.SetNonFlexibleGrowMode( wx.FLEX_GROWMODE_SPECIFIED )
self.m_staticText1 = wx.StaticText( sbSizer5.GetStaticBox(), wx.ID_ANY, u"串口", wx.DefaultPosition, wx.DefaultSize, 0 )
self.m_staticText1.Wrap( -1 )
fgSizer1.Add( self.m_staticText1, 1, wx.ALL|wx.EXPAND|wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_CENTER_HORIZONTAL, 5 )
Serial_portChoices = []
self.Serial_port = wx.Choice( sbSizer5.GetStaticBox(), wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, Serial_portChoices, wx.CB_SORT )
self.Serial_port.SetSelection( 0 )
fgSizer1.Add( self.Serial_port, 1, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_CENTER_HORIZONTAL|wx.EXPAND, 5 )
self.m_staticText2 = wx.StaticText( sbSizer5.GetStaticBox(), wx.ID_ANY, u"波特率", wx.DefaultPosition, wx.DefaultSize, 0 )
self.m_staticText2.Wrap( -1 )
self.m_staticText2.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_WINDOW ) )
fgSizer1.Add( self.m_staticText2, 1, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_CENTER_HORIZONTAL|wx.EXPAND, 5 )
Serial_Baud_rateChoices = []
self.Serial_Baud_rate = wx.Choice( sbSizer5.GetStaticBox(), wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, Serial_Baud_rateChoices, 0 )
self.Serial_Baud_rate.SetSelection( 6 )
fgSizer1.Add( self.Serial_Baud_rate, 1, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_CENTER_HORIZONTAL|wx.EXPAND, 5 )
self.m_staticText3 = wx.StaticText( sbSizer5.GetStaticBox(), wx.ID_ANY, u"数据位", wx.DefaultPosition, wx.DefaultSize, 0 )
self.m_staticText3.Wrap( -1 )
fgSizer1.Add( self.m_staticText3, 1, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL|wx.EXPAND, 5 )
Data_bitsChoices = []
self.Data_bits = wx.Choice( sbSizer5.GetStaticBox(), wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, Data_bitsChoices, 0 )
self.Data_bits.SetSelection( 3 )
fgSizer1.Add( self.Data_bits, 1, wx.ALL|wx.EXPAND, 5 )
self.m_staticText4 = wx.StaticText( sbSizer5.GetStaticBox(), wx.ID_ANY, u"停止位", wx.DefaultPosition, wx.DefaultSize, 0 )
self.m_staticText4.Wrap( -1 )
fgSizer1.Add( self.m_staticText4, 1, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_CENTER_HORIZONTAL|wx.EXPAND, 5 )
stop_bitsChoices = []
self.stop_bits = wx.Choice( sbSizer5.GetStaticBox(), wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, stop_bitsChoices, 0 )
self.stop_bits.SetSelection( 0 )
fgSizer1.Add( self.stop_bits, 1, wx.ALL|wx.EXPAND, 5 )
self.m_staticText6 = wx.StaticText( sbSizer5.GetStaticBox(), wx.ID_ANY, u"校验位", wx.DefaultPosition, wx.DefaultSize, 0 )
self.m_staticText6.Wrap( -1 )
fgSizer1