对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脚本分享
Apr 21 Python
用python标准库difflib比较两份文件的异同详解
Nov 16 Python
使用Python实现企业微信的自动打卡功能
Apr 30 Python
python模块hashlib(加密服务)知识点讲解
Nov 25 Python
python装饰器代替set get方法实例
Dec 19 Python
Python基于codecs模块实现文件读写案例解析
May 11 Python
python小白切忌乱用表达式
May 29 Python
如何理解python中数字列表
May 29 Python
python自定义函数def的应用详解
Jun 03 Python
用ldap作为django后端用户登录验证的实现
Dec 07 Python
python 实现socket服务端并发的四种方式
Dec 14 Python
Python中Selenium对Cookie的操作方法
Jul 09 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
Linux下 php5 MySQL5 Apache2 phpMyAdmin ZendOptimizer安装与配置[图文]
2008/11/18 PHP
解析ajax事件的调用顺序
2013/06/17 PHP
PHP中empty和isset对于参数结构的判断及empty()和isset()的区别
2015/11/15 PHP
微信公众号实现会员卡领取功能
2017/06/08 PHP
php curl批处理实现可控并发异步操作示例
2018/05/09 PHP
php微信分享到朋友圈、QQ、朋友、微博
2019/02/18 PHP
FireFox中textNode分片的问题
2007/04/10 Javascript
javascript之典型高阶函数应用介绍二
2013/01/10 Javascript
javascript一元操作符(递增、递减)使用示例
2013/08/07 Javascript
js使用数组判断提交数据是否存在相同数据
2013/11/27 Javascript
JavaScript实现生成GUID(全局统一标识符)
2014/09/05 Javascript
javascript里使用php代码实例
2014/12/13 Javascript
js获取json元素数量的方法
2015/01/27 Javascript
果断收藏9个Javascript代码高亮脚本
2016/01/06 Javascript
AngularJS实现树形结构(ztree)菜单示例代码
2016/09/18 Javascript
概述jQuery的元素筛选
2016/11/23 Javascript
bootstrap table操作技巧分享
2017/02/15 Javascript
微信小程序中做用户登录与登录态维护的实现详解
2017/05/17 Javascript
npm的lock机制解析
2019/06/20 Javascript
layui问题之自动滚动二级iframe页面到指定位置的方法
2019/09/18 Javascript
javascript sort()对数组中的元素进行排序详解
2019/10/13 Javascript
JavaScript实现图片放大预览效果
2020/11/02 Javascript
python实现定时播放mp3
2015/03/29 Python
老生常谈Python之装饰器、迭代器和生成器
2017/07/26 Python
python3.4.3下逐行读入txt文本并去重的方法
2018/04/29 Python
Python跳出多重循环的方法示例
2019/07/03 Python
HTML5 canvas基本绘图之绘制矩形
2016/06/27 HTML / CSS
恒华伟业笔试面试题
2015/02/26 面试题
学校七一活动方案
2014/01/19 职场文书
大学同学会活动方案
2014/08/20 职场文书
医生爱岗敬业演讲稿
2014/08/26 职场文书
幼儿教师自我剖析材料
2014/09/29 职场文书
病房管理制度范本
2015/08/06 职场文书
小学三年级数学教学反思
2016/02/16 职场文书
用Python实现一个打字速度测试工具来测试你的手速
2021/05/28 Python
JavaScript圣杯布局与双飞翼布局实现案例详解
2022/08/05 Javascript