对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获取电脑硬件信息及状态的实现方法
Aug 29 Python
跟老齐学Python之不要红头文件(1)
Sep 28 Python
python中requests模块的使用方法
Apr 08 Python
Python实现抓取网页生成Excel文件的方法示例
Aug 05 Python
浅谈python numpy中nonzero()的用法
Apr 02 Python
浅谈Python中重载isinstance继承关系的问题
May 04 Python
python django框架中使用FastDFS分布式文件系统的安装方法
Jun 10 Python
python ChainMap 合并字典的实现步骤
Jun 11 Python
numpy.array 操作使用简单总结
Nov 08 Python
python操作docx写入内容,并控制文本的字体颜色
Feb 13 Python
Python根据字符串调用函数过程解析
Nov 05 Python
python opencv角点检测连线功能的实现代码
Nov 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
简单示例AJAX结合PHP代码实现登录效果代码
2008/07/25 PHP
PHP文件注释标记及规范小结
2012/04/01 PHP
php实现递归的三种基本方式
2020/07/04 PHP
PHP进阶学习之类的自动加载机制原理分析
2019/06/18 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
2020/03/23 PHP
浅谈jquery中delegate()与live()
2015/06/22 Javascript
js实现网页多级级联菜单代码
2015/08/20 Javascript
详解JavaScript 中的 replace 方法
2016/01/01 Javascript
jQuery子元素过滤选择器用法示例
2016/09/09 Javascript
Vue2.0 组件传值通讯的示例代码
2017/08/01 Javascript
JavaScript实现京东购物放大镜和选项卡效果的方法分析
2018/07/05 Javascript
js 计算图片内点个数的示例代码
2019/04/04 Javascript
手把手15分钟搭一个企业级脚手架
2019/09/16 Javascript
Vue项目环境搭建详细总结
2019/09/26 Javascript
OpenLayers3实现图层控件功能
2020/09/25 Javascript
vue内置组件keep-alive事件动态缓存实例
2020/10/30 Javascript
[55:04]海涛DOTA2死魂复燃6.82版本介绍
2014/09/28 DOTA
Python linecache.getline()读取文件中特定一行的脚本
2008/09/06 Python
Python写的Socks5协议代理服务器
2014/08/06 Python
尝试用最短的Python代码来实现服务器和代理服务器
2016/06/23 Python
浅谈python可视化包Bokeh
2018/02/07 Python
Pycharm最新激活码2019(推荐)
2019/12/31 Python
python logging.basicConfig不生效的原因及解决
2020/02/20 Python
python 提高开发效率的5个小技巧
2020/10/19 Python
python中_del_还原数据的方法
2020/12/09 Python
解决HTML5手机端页面缩放的问题
2017/10/27 HTML / CSS
Python里面search()和match()的区别
2016/09/21 面试题
门诊挂号室室长岗位职责
2013/11/27 职场文书
会计学专业学生的求职信范文
2014/01/27 职场文书
2014年巴西世界杯口号
2014/06/05 职场文书
如何写新闻稿
2015/07/18 职场文书
2016年秋季运动会广播稿
2015/12/21 职场文书
教师听课学习心得体会
2016/01/15 职场文书
Pytest之测试命名规则的使用
2021/04/16 Python
游戏《铁拳》动画化!2022年年内播出
2022/03/21 日漫
python如何读取和存储dict()与.json格式文件
2022/06/25 Python