对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实现多线程网页爬虫
Sep 06 Python
python学习笔记之列表(list)与元组(tuple)详解
Nov 23 Python
Python中实现变量赋值传递时的引用和拷贝方法
Apr 29 Python
matplotlib 纵坐标轴显示数据值的实例
May 25 Python
Anaconda下安装mysql-python的包实例
Jun 11 Python
python使用flask与js进行前后台交互的例子
Jul 19 Python
对django中foreignkey的简单使用详解
Jul 28 Python
Django框架中间件定义与使用方法案例分析
Nov 28 Python
Python基础之高级变量类型实例详解
Jan 03 Python
python GUI库图形界面开发之PyQt5浏览器控件QWebEngineView详细使用方法
Feb 26 Python
Python过滤序列元素的方法
Jul 31 Python
Python使用华为API为图像设置多个锚点标签
Apr 12 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
收音机发烧友应当熟知的100条知识
2021/03/02 无线电
php设置静态内容缓存时间的方法
2014/12/01 PHP
php获取ip及网址的简单方法(必看)
2017/04/01 PHP
动态创建的表格单元格中的事件实现代码
2008/12/30 Javascript
js点击页面其它地方将某个显示的DIV隐藏
2012/07/12 Javascript
IFrame跨域高度自适应实现代码
2012/08/16 Javascript
JS链式调用的实现方法
2013/03/07 Javascript
JavaScript获取FCK编辑器信息的具体方法
2013/07/12 Javascript
json格式的时间显示为正常年月日的方法
2013/09/08 Javascript
javascript实现一个数值加法函数
2015/06/26 Javascript
js实现仿网易点击弹出提示同时背景变暗效果
2015/08/13 Javascript
JavaScript中rem布局在react中的应用
2015/12/09 Javascript
深入探讨前端框架react
2015/12/09 Javascript
分步解析JavaScript实现tab选项卡自动切换功能
2016/01/25 Javascript
JS代码防止SQL注入的方法(超简单)
2016/04/12 Javascript
Javascript实现一个简单的输入关键字添加标签效果实例
2017/06/01 Javascript
js轮播图的插件化封装详解
2017/07/17 Javascript
JavaScript实现JSON合并操作示例【递归深度合并】
2018/09/07 Javascript
详解如何在vue项目中使用lodop打印插件
2018/09/27 Javascript
详解babel升级到7.X采坑总结
2019/05/12 Javascript
[53:03]Optic vs TNC 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python深入学习之特殊方法与多范式
2014/08/31 Python
Python列表append和+的区别浅析
2015/02/02 Python
详解python单例模式与metaclass
2016/01/15 Python
python使用pyqt写带界面工具的示例代码
2017/10/23 Python
python3 BeautifulSoup模块使用字典的方法抓取a标签内的数据示例
2019/11/28 Python
用python计算文件的MD5值
2020/12/23 Python
英国家用电器折扣网站:Electrical Discount UK
2018/09/17 全球购物
加拿大服装和鞋类零售商:Mark’s
2021/01/04 全球购物
家长会主持词
2014/03/26 职场文书
工作评语大全
2014/04/26 职场文书
大学理论知识学习自我鉴定
2014/04/28 职场文书
卖车协议书范本4篇
2014/10/01 职场文书
2014年图书馆工作总结
2014/11/25 职场文书
碧霞祠导游词
2015/02/09 职场文书
工作简报格式范文
2015/07/21 职场文书