对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中AND、OR的一个使用小技巧
Feb 18 Python
Python之Web框架Django项目搭建全过程
May 02 Python
Python爬虫DOTA排行榜爬取实例(分享)
Jun 13 Python
Django框架模型简单介绍与使用分析
Jul 18 Python
tensorflow如何批量读取图片
Aug 29 Python
python通过nmap扫描在线设备并尝试AAA登录(实例代码)
Dec 30 Python
Python输出指定字符串的方法
Feb 06 Python
详解用Python进行时间序列预测的7种方法
Mar 13 Python
django model通过字典更新数据实例
Apr 01 Python
Django import export实现数据库导入导出方式
Apr 03 Python
Python 多线程共享变量的实现示例
Apr 17 Python
pycharm 关掉syntax检查操作
Jun 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
php 安全过滤函数代码
2011/05/07 PHP
PHP中数据类型转换的三种方式
2015/04/02 PHP
php header函数的常用http头设置
2015/06/25 PHP
PHP strcmp()和strcasecmp()的区别实例
2016/11/05 PHP
php多进程中的阻塞与非阻塞操作实例分析
2020/03/04 PHP
用方法封装javascript的new操作符(一)
2010/12/25 Javascript
JavaScript 数组详解
2013/10/10 Javascript
JS代码实现百度地图 画圆 删除标注
2016/10/12 Javascript
原生JS实现《别踩白块》游戏(兼容IE)
2017/02/20 Javascript
vue绑定class与行间样式style详解
2017/08/16 Javascript
JavaScript中如何判断一个值的类型
2017/09/15 Javascript
react中fetch之cors跨域请求的实现方法
2018/03/14 Javascript
jQuery实现的3D版图片轮播示例【滑动轮播】
2019/01/18 jQuery
JS中队列和双端队列实现及应用详解
2020/09/29 Javascript
python递归打印某个目录的内容(实例讲解)
2017/08/30 Python
Python数据处理numpy.median的实例讲解
2018/04/02 Python
Python使用pyodbc访问数据库操作方法详解
2018/07/05 Python
python 实现求解字符串集的最长公共前缀方法
2018/07/20 Python
Python面向对象之静态属性、类方法与静态方法分析
2018/08/24 Python
python实现C4.5决策树算法
2018/08/29 Python
Python中一些深不见底的“坑”
2019/06/12 Python
python中while和for的区别总结
2019/06/28 Python
.dcm格式文件软件读取及python处理详解
2020/01/16 Python
如何利用python读取micaps文件详解
2020/10/18 Python
解决python 在for循环并且pop数组的时候会跳过某些元素的问题
2020/12/11 Python
英国第一豪华护肤品牌:Elemis
2017/10/12 全球购物
什么是WEB控件?使用WEB控件有哪些优势?
2012/01/21 面试题
自主招生自荐信范文
2013/12/04 职场文书
幼儿园教学随笔感言
2014/02/23 职场文书
党员公开承诺书
2014/03/25 职场文书
国家奖学金获奖感言
2014/08/16 职场文书
2014年作风建设心得体会
2014/10/22 职场文书
初婚未育证明样本
2014/10/24 职场文书
三好学生个人总结
2015/02/15 职场文书
关于保护环境的建议书
2019/06/24 职场文书
vue引入Excel表格插件的方法
2021/04/28 Vue.js