对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中的ConfigParser模块使用详解
May 04 Python
Python解析最简单的验证码
Jan 07 Python
python删除服务器文件代码示例
Feb 09 Python
Python读取Word(.docx)正文信息的方法
Mar 15 Python
python爬取网页内容转换为PDF文件
Jul 28 Python
用python实现刷点击率的示例代码
Feb 21 Python
python读取目录下所有的jpg文件,并显示第一张图片的示例
Jun 13 Python
python读取并写入mat文件的方法
Jul 12 Python
pandas 选取行和列数据的方法详解
Aug 08 Python
PyTorch: 梯度下降及反向传播的实例详解
Aug 20 Python
对Pytorch中Tensor的各种池化操作解析
Jan 03 Python
python 破解加密zip文件的密码
Apr 22 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
xajax写的留言本
2006/11/25 PHP
PHP采用自定义函数实现遍历目录下所有文件的方法
2014/08/19 PHP
快速保存网页中所有图片的方法
2006/06/23 Javascript
javascript操作文本框readOnly
2007/05/15 Javascript
Javascript 检测、添加、移除样式(className)函数代码
2009/09/08 Javascript
js监听表单value的修改同步问题,跨浏览器支持
2009/12/31 Javascript
jQuery 学习第五课 Ajax 使用说明
2010/05/17 Javascript
JavaScript包装对象使用介绍
2013/08/29 Javascript
jquery实现可拖动DIV自定义保存到数据的实例
2013/11/20 Javascript
JavaScript获取表单enctype属性的方法
2015/04/02 Javascript
Jquery实现纵向横向菜单
2016/01/24 Javascript
浅谈在js传递参数中含加号(+)的处理方式
2016/10/11 Javascript
微信小程序 Windows2008 R2服务器配置TLS1.2方法
2016/12/05 Javascript
原生js实现轮播图的示例代码
2017/02/20 Javascript
JQuery实现定时刷新功能代码
2017/05/09 jQuery
AngularJS页面带参跳转及参数解析操作示例
2017/06/28 Javascript
如何以Angular的姿势打开Font-Awesome详解
2018/04/22 Javascript
layer.open关闭父窗口 以及调用父页面的方法
2018/08/17 Javascript
js中怎么判断两个字符串相等的实例
2019/01/17 Javascript
Vue js 的生命周期(看了就懂)(推荐)
2019/03/29 Javascript
使用Vue中 v-for循环列表控制按钮隐藏显示功能
2019/04/23 Javascript
百度小程序自定义通用toast组件
2019/07/17 Javascript
使用rst2pdf实现将sphinx生成PDF
2016/06/07 Python
Python实现Windows和Linux之间互相传输文件(文件夹)的方法
2017/05/08 Python
python 设置文件编码格式的实现方法
2017/12/21 Python
Python从list类型、range()序列简单认识类(class)【可迭代】
2019/05/31 Python
pygame库实现俄罗斯方块小游戏
2019/10/29 Python
python实现全排列代码(回溯、深度优先搜索)
2020/02/26 Python
css3 pointer-events 介绍详解
2017/09/18 HTML / CSS
土耳其玩具商店:Toyzz Shop
2019/08/02 全球购物
新加坡第一大健康与美容零售商:屈臣氏新加坡(Watsons Singapore)
2020/12/11 全球购物
承办会议欢迎词
2014/01/17 职场文书
反四风对照检查材料思想汇报
2014/09/16 职场文书
2015年乡镇扶贫工作总结
2015/04/08 职场文书
广播体操比赛主持词
2015/06/29 职场文书
PHP 对接美团大众点评团购券(门票)的开发步骤
2021/04/03 PHP