对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中的fabs()方法的使用
May 14 Python
Python多进程multiprocessing.Pool类详解
Apr 27 Python
Python 保存矩阵为Excel的实现方法
Jan 28 Python
Python实现栈和队列的简单操作方法示例
Nov 29 Python
python 实现二维列表转置
Dec 02 Python
python实现QQ邮箱发送邮件
Mar 06 Python
使用python创建生成动态链接库dll的方法
May 09 Python
Python常用外部指令执行代码实例
Nov 05 Python
Python 中的单分派泛函数你真的了解吗
Jun 22 Python
用Python编写简单的gRPC服务的详细过程
Jul 04 Python
Python 键盘事件详解
Nov 11 Python
python使用BeautifulSoup 解析HTML
Apr 24 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 文本文章分页代码 按标记或长度(不涉及数据库)
2012/06/07 PHP
php实现图片文件与下载文件防盗链的方法
2014/11/03 PHP
PHP+Mysql实现多关键字与多字段生成SQL语句的函数
2014/11/05 PHP
php和redis实现秒杀活动的流程
2019/07/17 PHP
基于jQuery实现文本框缩放以及上下移动功能
2014/11/24 Javascript
node.js中格式化数字增加千位符的几种方法
2015/07/03 Javascript
JavaScript模块规范之AMD规范和CMD规范
2015/10/27 Javascript
jQuery遮罩层效果实例分析
2016/01/14 Javascript
js实现放大镜特效
2017/05/18 Javascript
JS数组操作之增删改查的简单实现
2017/08/21 Javascript
在vue中使用express-mock搭建mock服务的方法
2018/11/07 Javascript
JS滚轮控制图片缩放大小和拖动的实例代码
2018/11/20 Javascript
详解React中合并单元格的正确写法
2019/01/08 Javascript
JavaScript实现简单的计算器
2020/01/16 Javascript
[01:51]2014DOTA2西雅图邀请赛 MVP 外卡赛black场间采访
2014/07/09 DOTA
Django使用HttpResponse返回图片并显示的方法
2018/05/22 Python
Python实现的远程登录windows系统功能示例
2018/06/21 Python
详解python中的json和字典dict
2018/06/22 Python
TensorFlow Session会话控制&amp;Variable变量详解
2018/07/30 Python
Python Matplotlib实现三维数据的散点图绘制
2019/03/19 Python
使用coverage统计python web项目代码覆盖率的方法详解
2019/08/05 Python
Python django框架 web端视频加密的实例详解
2020/11/20 Python
使用HTML5里的classList操作CSS类
2016/06/28 HTML / CSS
卡西欧G-SHOCK英国官网: 防水防震手表
2018/01/08 全球购物
Final类有什么特点
2012/04/25 面试题
写好自荐信要注意的问题
2013/11/10 职场文书
新闻专业推荐信范文
2013/11/20 职场文书
酒店中秋节促销方案
2014/01/30 职场文书
二年级学生期末评语
2014/12/26 职场文书
升职感谢信
2015/01/22 职场文书
2015新学期开学寄语
2015/02/26 职场文书
2015年英语教学工作总结
2015/05/25 职场文书
2019年入党思想汇报格式与要求
2019/06/25 职场文书
七年级作文之环保作文
2019/10/17 职场文书
React forwardRef的使用方法及注意点
2021/06/13 Javascript
PYTHON使用Matplotlib去实现各种条形图的绘制
2022/03/22 Python