对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中的try和finally和with方法
May 05 Python
用Python写冒泡排序代码
Apr 12 Python
使用Python实现博客上进行自动翻页
Aug 23 Python
Python编程之Re模块下的函数介绍
Oct 28 Python
python自动发送测试报告邮件功能的实现
Jan 22 Python
python将字符串转换成json的方法小结
Jul 09 Python
Pandas聚合运算和分组运算的实现示例
Oct 17 Python
Python 3.8 新功能大揭秘【新手必学】
Feb 05 Python
python torch.utils.data.DataLoader使用方法
Apr 02 Python
解决keras,val_categorical_accuracy:,0.0000e+00问题
Jul 02 Python
python通过函数名调用函数的几种场景
Sep 23 Python
基于Python实现将列表数据生成折线图
Mar 23 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中动态显示签名和ip原理
2007/03/28 PHP
php strtotime 函数UNIX时间戳
2009/01/14 PHP
php tp验证表单与自动填充函数代码
2012/02/22 PHP
html数组字符串拼接的最快方法
2009/09/16 Javascript
Javascript 函数中的参数使用分析
2010/03/27 Javascript
JS完成代码前最好对其做5件事
2013/04/07 Javascript
jQuery使用hide方法隐藏元素自身用法实例
2015/03/30 Javascript
AngularJS表格详解及示例代码
2016/08/17 Javascript
JS仿京东移动端手指拨动切换轮播图效果
2020/04/10 Javascript
使用nodejs+express实现简单的文件上传功能
2017/12/27 NodeJs
动态加载权限管理模块中的Vue组件
2018/01/16 Javascript
用vue2.0实现点击选中active其他选项互斥的效果
2018/04/12 Javascript
vue项目中应用ueditor自定义上传按钮功能
2018/04/27 Javascript
微信小程序实时聊天WebSocket
2018/07/05 Javascript
ES6知识点整理之函数数组参数的默认值及其解构应用示例
2019/04/17 Javascript
jQuery实现每日秒杀商品倒计时功能
2019/09/06 jQuery
python time模块用法实例详解
2014/09/11 Python
Go语言基于Socket编写服务器端与客户端通信的实例
2016/02/19 Python
Python单链表简单实现代码
2016/04/27 Python
python爬虫入门教程--利用requests构建知乎API(三)
2017/05/25 Python
Python3中详解fabfile的编写
2018/06/24 Python
Python爬取数据保存为Json格式的代码示例
2019/04/09 Python
django-allauth入门学习和使用详解
2019/07/03 Python
在python中创建指定大小的多维数组方式
2019/11/28 Python
Python编程快速上手——疯狂填词程序实现方法分析
2020/02/29 Python
如何使用python-opencv批量生成带噪点噪线的数字验证码
2020/12/21 Python
Myprotein蛋白粉美国官网:欧洲畅销运动营养品牌
2016/11/15 全球购物
餐饮总经理岗位职责
2014/03/07 职场文书
大学生学习2014年全国两会心得体会
2014/03/12 职场文书
法人委托书范本
2014/04/04 职场文书
房产转让协议书(2014版)
2014/09/30 职场文书
2014年电话销售工作总结
2014/12/01 职场文书
民事辩护词范文
2015/05/21 职场文书
ORACLE数据库对long类型字段进行模糊匹配的解决思路
2021/04/07 Oracle
如何给HttpServletRequest增加消息头
2021/06/30 Java/Android
Python实现双向链表基本操作
2022/05/25 Python