对Python 简单串口收发GUI界面的实例详解


Posted in Python onJune 12, 2019

忙活了三个多小时,连学带做,总算是搞出来了一个具有基本功能的串口通信PC机的GUI界面,Tkinter在python中确实很好用,而且代码量确实也很少,不足的是Tkinter不自带combox,但是幸运的是我下载的2.7版本自带了包含有combox的ttk模块,于是乎问题就顺利解决了。

下面是源代码,一些错误提示功能还没有做,目前只是简单地实现了下位机与PC的通信界面,下位机还是用的STM32F103

#encoding=utf-8
__author__ = 'freedom'
 
from Tkinter import *
from serial import *
import ttk
 
class GUI(Frame):
  def __init__(self,master):
    frame = Frame(master)
    frame.pack()
    #串口设置相关变量
    self.port = 0
    self.baudrate = 9600
    #串口号提示
    self.lab1 = Label(frame,text = 'Serial Number')
    self.lab1.grid(row = 0,column = 0,sticky = W)
    #串口号选择下拉菜单
    self.boxValue = StringVar()
    self.boxChoice = ttk.Combobox(frame,textvariable = self.boxValue,state = 'readonly')
    self.boxChoice['value'] = ('COM1','COM2','COM3','COM4')
    self.boxChoice.current(0)
    self.boxChoice.bind('<<ComboboxSelected>>',self.Choice)
    self.boxChoice.grid(row = 1,column = 0,sticky = W)
    #波特率选择提示
    self.lab2 = Label(frame,text = 'Baudrate Set')
    self.lab2.grid(row = 2,column = 0,sticky = W)
    #波特率选择下拉菜单
    self.boxValueBaudrate = IntVar()
    self.BaudrateChoice = ttk.Combobox(frame,textvariable = self.boxValueBaudrate,state = 'readonly')
    self.BaudrateChoice['value'] = (9600,115200)
    self.BaudrateChoice.current(0)
    self.BaudrateChoice.bind('<<ComboboxSelected>>',self.ChoiceBaudrate)
    self.BaudrateChoice.grid(row = 3,column = 0,sticky = W)
    #输出框提示
    self.lab3 = Label(frame,text = 'Message Show')
    self.lab3.grid(row = 0,column = 1,sticky = W)
    #输出框
    self.show = Text(frame,width = 40,height = 5,wrap = WORD)
    self.show.grid(row = 1,column = 1,rowspan = 4,sticky = W)
    #输入框提示
    self.lab4 = Label(frame,text = 'Input here,please!')
    self.lab4.grid(row = 5,column = 1,sticky = W)
    #输入框
    self.input = Entry(frame,width = 40)
    self.input.grid(row = 6,column = 1,rowspan = 4,sticky = W)
    #输入按钮
    self.button1 = Button(frame,text = "Input",command = self.Submit)
    self.button1.grid(row = 11,column = 1,sticky = E)
    #串口开启按钮
    self.button2 = Button(frame,text = 'Open Serial',command = self.open)
    self.button2.grid(row = 7,column = 0,sticky = W)
    #串口关闭按钮
    self.button3 = Button(frame,text = 'Close Serial',command = self.close)
    self.button3.grid(row = 10,column = 0,sticky = W)
    #串口信息提示框
    self.showSerial = Text(frame,width = 20,height = 2,wrap = WORD)
    self.showSerial.grid(row = 12,column = 0,sticky = W)
    #串口初始化配置
    self.ser = Serial()
    self.ser.setPort(self.port)
    #self.ser.setBaudrate(self.baudrate)
    #self.ser.open()
    #print self.ser.isOpen()
    #print self.ser
  def Choice(self,event):
    context = self.boxValue.get()
    list = ["COM1",'COM2','COM3','COM4']
    if context in list:
      self.port = list.index(context)
      self.ser.setPort(self.port)
    print self.port
  def ChoiceBaudrate(self,event):
    self.baudrate = self.boxValueBaudrate.get()
    self.ser.setBaudrate(self.baudrate)
    print self.baudrate
  def Submit(self):
    context1 = self.input.get()
    n = self.ser.write(context1)
    output = self.ser.read(n)
    print output
    self.show.delete(0.0,END)
    self.show.insert(0.0,output)
  def open(self):
    self.ser.open()
    if self.ser.isOpen() == True:
      self.showSerial.delete(0.0,END)
      self.showSerial.insert(0.0,"Serial has been opend!")
  def close(self):
    self.ser.close()
    if self.ser.isOpen() == False:
      self.showSerial.delete(0.0,END)
      self.showSerial.insert(0.0,"Serial has been closed!")
root = Tk()
root.title("Serial GUI")
#root.geometry("3000x4000")
app = GUI(root)
root.mainloop()

以上这篇对Python 简单串口收发GUI界面的实例详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现CET查分的方法
Mar 10 Python
tensorflow实现简单的卷积神经网络
May 24 Python
使用Python进行QQ批量登录的实例代码
Jun 11 Python
Python3随机漫步生成数据并绘制
Aug 27 Python
详解Python匿名函数(lambda函数)
Apr 19 Python
python简单鼠标自动点击某区域的实例
Jun 25 Python
将python文件打包exe独立运行程序方法详解
Feb 12 Python
Python基础之字符串常见操作经典实例详解
Feb 26 Python
Anconda环境下Vscode安装Python的方法详解
Mar 29 Python
没编程基础可以学python吗
Jun 17 Python
Python使用xlrd实现读取合并单元格
Jul 09 Python
tensorflow+k-means聚类简单实现猫狗图像分类的方法
Apr 28 Python
Python3 串口接收与发送16进制数据包的实例
Jun 12 #Python
Python3简单实现串口通信的方法
Jun 12 #Python
Python集中化管理平台Ansible介绍与YAML简介
Jun 12 #Python
selenium获取当前页面的url、源码、title的方法
Jun 12 #Python
Django框架使用内置方法实现登录功能详解
Jun 12 #Python
Python 使用 attrs 和 cattrs 实现面向对象编程的实践
Jun 12 #Python
python,Django实现的淘宝客登录功能示例
Jun 12 #Python
You might like
PHP图像处理之使用imagecolorallocate()函数设置颜色例子
2014/11/19 PHP
PHP5.4起内置web服务器使用方法
2016/08/09 PHP
PHP微信网页授权的配置文件操作分析
2019/05/29 PHP
laravel model模型处理之修改查询或修改字段时的类型格式案例
2019/10/17 PHP
js 模拟气泡屏保效果代码
2010/07/10 Javascript
jquery实现居中弹出层代码
2010/08/25 Javascript
jQuery的DOM操作之删除节点示例
2014/01/03 Javascript
判断日期是否能跨月查询的js代码
2014/07/25 Javascript
Nodejs异步回调的优雅处理方法
2014/09/25 NodeJs
微信JS接口汇总及使用详解
2015/01/09 Javascript
jQuery中die()方法用法实例
2015/01/19 Javascript
jquery简单实现网页层的展开与收缩效果
2015/08/07 Javascript
jquery 遍历数组 each 方法详解
2016/05/25 Javascript
基于javascript实现按圆形排列DIV元素(二)
2016/12/02 Javascript
通俗解释JavaScript正则表达式快速记忆
2017/08/23 Javascript
Three.js基础学习教程
2017/11/16 Javascript
JS中DOM元素的attribute与property属性示例详解
2018/09/04 Javascript
使用taro开发微信小程序遇到的坑总结
2019/04/08 Javascript
微信小程序如何使用globalData的方法
2019/06/06 Javascript
微信小程序实现页面监听自定义组件的触发事件
2020/11/01 Javascript
[47:43]完美世界DOTA2联赛PWL S3 Magama vs GXR 第二场 12.19
2020/12/24 DOTA
python 实现红包随机生成算法的简单实例
2017/01/04 Python
django实现登录时候输入密码错误5次锁定用户十分钟
2017/11/05 Python
python实现随机梯度下降(SGD)
2020/03/24 Python
Python 字符串与数字输出方法
2018/07/16 Python
Python+OpenCV+图片旋转并用原底色填充新四角的例子
2019/12/12 Python
使用Django清空数据库并重新生成
2020/04/03 Python
Lookfantastic德国官网:英国知名美妆购物网站
2017/06/11 全球购物
澳大利亚婴儿、幼儿和儿童在线设计师商店:Smooch Baby
2019/02/16 全球购物
电大学习个人自我评价范文
2013/10/04 职场文书
机关办公室岗位职责
2014/04/16 职场文书
商场消防安全责任书
2014/07/29 职场文书
党支部活动策划方案
2014/08/18 职场文书
学校运动会广播稿范文
2014/10/02 职场文书
2014年语文教研组工作总结
2014/12/06 职场文书
go语言中GOPATH GOROOT的作用和设置方式
2021/05/05 Golang