对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中的一些类型转换函数小结
Feb 10 Python
用python找出那些被“标记”的照片
Apr 20 Python
python中join()方法介绍
Oct 11 Python
Python 多线程不加锁分块读取文件的方法
Dec 11 Python
python自定义线程池控制线程数量的示例
Feb 22 Python
pandas中遍历dataframe的每一个元素的实现
Oct 23 Python
python的pyecharts绘制各种图表详细(附代码)
Nov 11 Python
利用setuptools打包python程序的方法步骤
Jan 18 Python
python中rc1什么意思
Jun 19 Python
Python实现小黑屋游戏的完整实例
Jan 06 Python
K近邻法(KNN)相关知识总结以及如何用python实现
Jan 28 Python
Python中的turtle画箭头,矩形,五角星
Mar 16 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中FTP函数ftp_connect、ftp_login与ftp_chmod用法
2014/11/18 PHP
php自动获取关键字的方法
2015/01/06 PHP
PHP魔术方法之__call与__callStatic使用方法
2017/07/23 PHP
laravel框架中视图的基本使用方法分析
2019/11/23 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
2019/11/19 PHP
JavaScript国旗变换效果代码
2008/08/13 Javascript
JS input文本框禁用右键和复制粘贴功能的代码
2010/04/15 Javascript
jQuery EasyUI API 中文文档 - EasyLoader 加载器
2011/09/29 Javascript
jQuery创建平滑的页面滚动(顶部或底部)
2013/02/26 Javascript
Javascript事件实例详解
2013/11/06 Javascript
js调试系列 源码定位与调试[基础篇]
2014/06/18 Javascript
AngularJS中的模块详解
2015/01/29 Javascript
jQuery插件ajaxFileUpload实现异步上传文件效果
2015/04/14 Javascript
JavaScript操作HTML DOM节点的基础教程
2016/03/11 Javascript
angular基于路由控制ui-router实现系统权限控制
2016/09/27 Javascript
Bootstrap源码解读下拉菜单(4)
2016/12/23 Javascript
Vue组件开发初探
2017/02/14 Javascript
nodejs项目windows下开机自启动的方法
2017/11/22 NodeJs
node.js学习笔记之koa框架和简单爬虫练习
2018/12/13 Javascript
解决vue.js提交数组时出现数组下标的问题
2019/11/05 Javascript
JS面向对象编程基础篇(二) 封装操作实例详解
2020/03/03 Javascript
vue使用微信扫一扫功能的实现代码
2020/04/11 Javascript
python添加模块搜索路径方法
2017/09/11 Python
PyQt5下拉式复选框QComboCheckBox的实例
2019/06/25 Python
python科学计算之scipy——optimize用法
2019/11/25 Python
np.random.seed() 的使用详解
2020/01/14 Python
司机检讨书
2014/02/13 职场文书
关于运动会的广播稿
2014/09/22 职场文书
法学专业大学生实习自我鉴定
2014/10/05 职场文书
乌镇导游词
2015/02/02 职场文书
工程技术员岗位职责
2015/04/11 职场文书
2015年领导班子工作总结
2015/05/23 职场文书
公司保洁员管理制度
2015/08/04 职场文书
Python虚拟环境virtualenv是如何使用的
2021/06/20 Python
Win11怎么添加用户?Win11添加用户账户的方法
2022/07/15 数码科技
MySql按时,天,周,月进行数据统计
2022/08/14 MySQL