学习wxpython 15天用wxpython写一个多线程程序(第一篇)

本文介绍了使用wxpython和wxFormBuilder搭建一个具备串口数据采集、实时显示、可视化处理和数据保存功能的多线程桌面程序。通过可视化编程工具简化界面设计,详细阐述了事件处理和代码生成过程,并分享了遇到的问题及解决方案。
摘要由CSDN通过智能技术生成

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

辉煌仪奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值