对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实现的各种排序算法代码
Mar 04 Python
Django admin美化插件suit使用示例
Dec 12 Python
wxPython的安装图文教程(Windows)
Dec 28 Python
Python对多属性的重复数据去重实例
Apr 18 Python
python通过tcp发送xml报文的方法
Dec 28 Python
Django之全局使用request.user.username的实例详解
May 14 Python
Python填充任意颜色,不同算法时间差异分析说明
May 16 Python
python中adb有什么功能
Jun 07 Python
如何基于Django实现上下文章跳转
Sep 16 Python
Selenium获取登录Cookies并添加Cookies自动登录的方法
Dec 04 Python
Python+MySQL随机试卷及答案生成程序的示例代码
Feb 01 Python
Python time库的时间时钟处理
May 02 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与java通过socket通信的实现代码
2013/10/21 PHP
使用php记录用户通过搜索引擎进网站的关键词
2014/02/13 PHP
PHP中的Memcache详解
2014/04/05 PHP
跟我学Laravel之视图 &amp; Response
2014/10/15 PHP
PHP aes (ecb)解密后乱码问题
2015/06/22 PHP
php实现文件上传及头像预览功能
2017/01/15 PHP
用JavaScript实现单继承和多继承的简单方法
2009/03/29 Javascript
Js 获取HTML DOM节点元素的方法小结
2009/04/24 Javascript
editable.js 基于jquery的表格的编辑插件
2011/10/24 Javascript
jQuery实现页面内锚点平滑跳转特效的方法总结
2015/05/11 Javascript
JavaScript实现DIV层拖动及动态增加新层的方法
2015/05/12 Javascript
JS编写函数实现对身份证号码最后一位的验证功能
2016/12/29 Javascript
js判断手机系统是android还是ios
2017/03/07 Javascript
socket.io学习教程之基础介绍(一)
2017/04/29 Javascript
JavaScript编程设计模式之观察者模式(Observer Pattern)实例详解
2017/10/25 Javascript
详解vue 单页应用(spa)前端路由实现原理
2018/04/04 Javascript
在Vue项目中取消ESLint代码检测的步骤讲解
2019/01/27 Javascript
vue中的 $slot 获取插槽的节点实例
2019/11/12 Javascript
微信小程序canvas截取任意形状的实现代码
2020/01/13 Javascript
Python UnicodeEncodeError: 'gbk' codec can't encode character 解决方法
2015/04/24 Python
Python 遍历列表里面序号和值的方法(三种)
2017/02/17 Python
基于随机梯度下降的矩阵分解推荐算法(python)
2018/08/31 Python
python opencv 批量改变图片的尺寸大小的方法
2019/06/28 Python
详解pandas使用drop_duplicates去除DataFrame重复项参数
2019/08/01 Python
使用python实现滑动验证码功能
2019/08/05 Python
在Python中os.fork()产生子进程的例子
2019/08/08 Python
美国高端婴童品牌:Hanna Andersson
2016/10/30 全球购物
英国蜡烛、蜡烛配件和家居香氛购买网站:Yankee Candle
2018/12/12 全球购物
法律专业应届生自荐信范文
2014/01/06 职场文书
办公室岗位职责
2014/02/12 职场文书
社区学习雷锋活动总结
2014/04/25 职场文书
销售员岗位职责
2014/06/09 职场文书
2015年乡镇妇联工作总结
2015/05/19 职场文书
导游词之黄帝陵景区
2019/09/16 职场文书
JavaWeb Servlet实现网页登录功能
2021/07/04 Java/Android
详细聊聊Oracle表碎片对性能有多大的影响
2022/03/19 Oracle