对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 BeautifulSoup使用方法详解
Nov 21 Python
浅谈Python中用datetime包进行对时间的一些操作
Jun 23 Python
python爬虫中get和post方法介绍以及cookie作用
Feb 08 Python
python模块smtplib实现纯文本邮件发送功能
May 22 Python
Pandas之Fillna填充缺失数据的方法
Jun 25 Python
Python3.6+selenium2.53.6自动化测试_读取excel文件的方法
Sep 06 Python
Python tkinter常用操作代码实例
Jan 03 Python
tensorflow自定义激活函数实例
Feb 04 Python
python topk()函数求最大和最小值实例
Apr 02 Python
Python环境使用OpenCV检测人脸实现教程
Oct 19 Python
Python Tkinter实例——模拟掷骰子
Oct 24 Python
Python源码解析之List
May 21 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 处理图片的类实现代码
2009/10/23 PHP
PHP实现常用排序算法的方法
2020/02/05 PHP
javascript中的对象和数组的应用技巧
2007/01/07 Javascript
学习ExtJS table布局
2009/10/08 Javascript
JavaScript/jQuery 表单美化插件小结
2012/02/14 Javascript
javascript用户注册提示效果的简单实例
2013/08/17 Javascript
鼠标滚轮改变图片大小的示例代码
2013/11/20 Javascript
jquery弹出层类代码分享
2013/12/27 Javascript
Jquery $.getJSON 在IE下的缓存问题解决方法
2014/10/10 Javascript
JavaScript中的getMilliseconds()方法使用详解
2015/06/10 Javascript
javascript 判断两个日期之差的示例代码
2015/09/05 Javascript
seajs加载jquery时提示$ is not a function该怎么解决
2015/10/23 Javascript
JS实现点击登录弹出窗口同时背景色渐变动画效果
2016/03/25 Javascript
JS使用onerror捕获异常示例
2016/08/03 Javascript
javascript数组常见操作方法实例总结【连接、添加、删除、去重、排序等】
2019/06/13 Javascript
简单了解Ajax表单序列化的实现方法
2019/06/14 Javascript
js生成1到100的随机数最简单的实现方法
2020/02/07 Javascript
[05:31]DOTA2英雄梦之声_第04期_光之守卫
2014/06/23 DOTA
Python实现文件按照日期命名的方法
2015/07/09 Python
Python实战小程序利用matplotlib模块画图代码分享
2017/12/09 Python
pandas 获取季度,月度,年度首尾日期的方法
2018/04/11 Python
python 获取字符串MD5值方法
2018/05/29 Python
python实现遍历文件夹修改文件后缀
2018/08/28 Python
python实现读取excel文件中所有sheet操作示例
2019/08/09 Python
Python容器使用的5个技巧和2个误区总结
2019/09/26 Python
Python 取numpy数组的某几行某几列方法
2019/10/24 Python
python装饰器的特性原理详解
2019/12/25 Python
python实现猜数游戏(保存游戏记录)
2020/06/22 Python
Python3爬虫带上cookie的实例代码
2020/07/28 Python
.TTL是什么?有什么用处,通常那些工具会用到它?(ping? traceroute? ifconfig? netstat?)
2016/05/09 面试题
财务会计专业应届毕业生求职信
2013/10/18 职场文书
管理失职检讨书
2014/02/12 职场文书
金砖之国观后感
2015/06/11 职场文书
Redis安装启动及常见数据类型
2021/04/14 Redis
python实现黄金分割法的示例代码
2021/04/28 Python
python前后端自定义分页器
2022/04/13 Python