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

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 好的,我可以回答这个问题。使用wxPython记事本程序可以通过以下步骤实现: 1. 导入wxPython模块 2. 创建一个应用程序对象 3. 创建一个顶级窗口对象 4. 在窗口对象中添加文本框控件 5. 在窗口对象中添加菜单栏和工具栏 6. 实现菜单栏和工具栏的功能,例如打开、保存、剪切、复制、粘贴等 7. 运行应用程序 以上是大致的步骤,具体实现可以参考wxPython的官方文档和示例代码。 ### 回答2: 用wxPython一个记事本程序可以实现基本的文本编辑功能。首先,我们需要导入wxPython模块,并创建一个应用程序对象和一个顶层窗口对象。然后,在窗口对象中添加一个多行文本框作为编辑区域,并设置其样式和布局。接下来,我们可以添加菜单栏和工具栏来增加一些功能按钮,如新建、打开、保存、剪切、复制、粘贴等等。通过绑定事件处理函数,我们可以实现这些按钮的功能。 例如,当点击新建按钮时,我们可以清空文本框中的内容;当点击打开按钮时,可以弹出文件选择对话框,选择要打开的文件并将其内容显示在文本框中;当点击保存按钮时,可以弹出保存文件对话框,将文本框中的内容保存到指定的文件中。 除了基本的编辑功能,我们还可以通过wxPython提供的丰富控件库来增加其他功能,如查找和替换、字体和颜色设置、撤销和重做等等。 总之,使用wxPython记事本程序可以使我们能够方便地创建一个简单的文本编辑工具,通过定制和扩展,我们还可以实现更多更高级的功能。 ### 回答3: 使用wxPython一个记事本程序,首先需要导入wxPython模块。然后创建一个wx.App()实例来启动程序。 接下来,创建一个wx.Frame()实例作为主窗口。在主窗口中,可以添加一个wx.TextCtrl()组件作为文本输入框,用来输入和编辑文字内容。还可以添加一个菜单栏和工具栏,用来实现一些额外的功能比如打开、保存文件,设置字体、样式等。 在编记事本程序时,可以定义相应的事件处理函数来实现功能。比如,可以为菜单栏和工具栏上的“打开”按钮绑定一个事件处理函数,当用户点击这个按钮时,就会触发这个函数,从而实现打开文件的功能。类似地,可以为保存按钮绑定一个事件处理函数,实现保存文件的功能。 此外,还可以添加一些其他的功能,比如设置字体样式、查找和替换文本、撤销和重做操作等。可以通过定义相应的事件处理函数来监听用户的操作,实现这些功能。 最后,调用wx.App().MainLoop()来进入主事件循环,使程序能够响应用户的操作,并持续运行。 这个记事本程序使用wxPython,可以在图形界面下方便地输入和编辑文字内容,并提供了一些常用的功能如打开、保存文件,设置字体样式等。可以根据实际需求,进一步扩展和优化这个记事本程序

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

辉煌仪奇

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

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

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

打赏作者

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

抵扣说明:

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

余额充值