当前位置: 首页 > article >正文

使用Tkinter写一个发送kafka消息的工具

文章目录

    • 背景
    • 工具界面展示
    • 功能
    • 代码讲解
      • 运行环境
      • 创建GUI程序
      • 搭建前端样式
      • 编写功能实现代码

背景

公司是做AR实景产品的,近几年无人机特别的火,一来公司比较关注低空经济这个新型领域,二来很多政企、事业单位都采购了无人机用于日常工作。那么就衍生了将无人机接入到AR实景项目中的需求。

本工具的作用就是在AR实景项目中模拟无人机飞行时候产生的飞控数据。

工具界面展示

在这里插入图片描述

功能

  • 用户填写kafka连接地址,
  • 用户参考消息示例模板编写消息内容,并发送到kafka 的 topic 中。
  • 所有操作的log输出到用户界面

代码讲解

运行环境

  • python:3.9.7
  • pip:pip3(pip 21.2.3 )
  • OS:win11
  • GUI:TKinter
  • kafka-client:confluent_kafka

创建GUI程序

  • 通过 tk.Tk() 实例化一个GUI程序。
  • 通过 ttk.Style() 实例化主题并通过style.configure 设置公共样式。
  • 通过 KafkaMessageSenderApp(root) 的构造函数将root实例传入业务代码中
  • 最后通过root.mainloop()让程序保持前台运行

if __name__ == "__main__":# 设置样式root = tk.Tk()style = ttk.Style()# 尝试配置主题try:if "clam" in style.theme_names():style.theme_use("clam")except:pass# 自定义样式style.configure("TLabel", font=("SimHei", 10))style.configure("TButton", font=("SimHei", 10))style.configure("TEntry", font=("SimHei", 10))style.configure("TFrame", background="#f0f0f0")style.configure("TLabelframe", background="#f0f0f0")style.configure("TLabelframe.Label", background="#f0f0f0", font=("SimHei", 10, "bold"))# 创建强调按钮样式style.configure("Accent.TButton", foreground="white", background="#4a86e8")app = KafkaMessageSenderApp(root)root.mainloop()

搭建前端样式

  • 在KafkaMessageSenderApp 的构造函数中,通过create_widgets函数完成前端样式的编写,例如 label 的位置,button 的名字及绑定的回调处理函数
  • 通过 start_log_consumer 处理日志
  • 通过generate_example_message生成模板消息
self.create_widgets()self.start_log_consumer()# 生成示例消息self.generate_example_message()

编写功能实现代码

通过为 前端各种控件绑定回调函数来实现业务代码的编写。例如通过为 发送消息 按钮绑定回调处理消息的发送。

按钮样式和回调函数绑定:


# 按钮区域button_frame = ttk.Frame(main_frame)button_frame.pack(fill=tk.X, pady=5)# 创建按钮并保存引用self.send_button = ttk.Button(button_frame,text="发送消息",command=self.send_message,width=20,style="Accent.TButton",)

发送消息:


def send_message(self):"""发送消息到Kafka"""if self.producer is None:messagebox.showerror("错误", "请先连接到Kafka服务器")returntopic = self.topic_var.get()if not topic:messagebox.showerror("错误", "请输入Topic")returnmessage_text = self.message_text.get(1.0, tk.END).strip()if not message_text:messagebox.showerror("错误", "消息内容不能为空")return# 解析JSONtry:message_data = json.loads(message_text)except json.JSONDecodeError as e:messagebox.showerror("JSON解析错误", f"无效的JSON格式: {str(e)}")return# 在新线程中发送消息,避免阻塞UIthreading.Thread(target=self._send_message_thread, args=(topic, message_data), daemon=True).start()

相关文章:

使用Tkinter写一个发送kafka消息的工具

文章目录 背景工具界面展示功能代码讲解运行环境创建GUI程序搭建前端样式编写功能实现代码 背景 公司是做AR实景产品的,近几年无人机特别的火,一来公司比较关注低空经济这个新型领域,二来很多政企、事业单位都采购了无人机用于日常工作。那么…...

MongoDB 与 EF Core 深度整合实战:打造结构清晰的 Web API 应用

题纲 MongoDB 字符串连接 URIC# 连接字符串实例 实现一个电影信息查询 demo创建项目创建实体实现 DbContext 上下文仓储实现服务实现控制器实现服务注册快照注入数据库连接配置1. 注册配置类2. 注入 IOptionsSnapshot<MongoDbSettings>3. 配置文件 appsettings.json 示例…...

JAVA|后端编码规范

目录 零、引言 一、基础 二、集合 三、并发 四、日志 五、安全 零、引言 规范等级&#xff1a; 【强制】&#xff1a;强制遵守&#xff0c;来源于线上历史故障&#xff0c;将通过工具进行检查。【推荐】&#xff1a;推荐遵守&#xff0c;来源于日常代码审查、开发人员反馈…...

重写B站(网页、后端、小程序)

1. 网页端 1.1 框架 Vue ElementUI axios 1.2 框架搭建步骤 搭建Vue 1.3 配置文件 main.js import {createApp} from vue import ElementUi from element-plus import element-plus/dist/index.css; import axios from "axios"; import router from…...

文档债务拖累交付速度?5大优化策略文档自动化

开发者在追求开发速度的过程中&#xff0c;往往会忽视文档的编写&#xff0c;如省略设计文档、代码注释或API文档等。这种做法往往导致在后期调试阶段需要花费三倍以上的时间来理解代码逻辑&#xff0c;进而形成所谓的文档债务&#xff0c;严重拖累交付速度并造成资源浪费。而积…...

【数据结构与算法】LeetCode 每日三题

如果你已经对数据结构与算法略知一二&#xff0c;现在正在复习数据结构与算法的一些重点知识 ------------------------------------------------------------------------------------------------------------------------- 关注我&#x1f308;&#xff0c;每天更新总结文章…...

基于深度学习的电力负荷预测研究

一、深度学习模型框架 在当今数字化时代&#xff0c;基于深度学习的电力负荷预测研究正成为保障电力系统稳定、高效运行的关键领域。其模型构建是一个复杂而精妙的过程&#xff0c;涉及多学科知识与前沿技术的融合应用。首先&#xff0c;要明确电力负荷预测的目标&#xff0c;…...

篇章十 消息持久化(二)

目录 1.消息持久化-创建MessageFileManger类 1.1 创建一个类 1.2 创建关于路径的方法 1.3 定义内部类 1.4 实现消息统计文件读写 1.5 实现创建消息目录和文件 1.6 实现删除消息目录和文件 1.7 实现消息序列化 1. 消息序列化的一些概念&#xff1a; 2. 方案选择&#xf…...

【IDEA】删除/替换文件中所有包含某个字符串的行

目录 前言 正则表达式 示例 使用方法 前言 在日常开发中&#xff0c;频繁地删除无用代码或清理空行是不可避免的操作。许多开发者希望找到一种高效的方式&#xff0c;避免手动选中代码再删除的繁琐过程。 使用正则表达式是处理字符串的一个非常有效的方法。 正则表达式 …...

基于深度学习的不良驾驶行为为识别检测

一.研究目的 随着全球汽车保有量持续增长&#xff0c;交通安全问题日益严峻&#xff0c;由不良驾驶行为&#xff08;如疲劳驾驶、接打电话、急加速/急刹车等&#xff09;引发的交通事故频发&#xff0c;不仅威胁生命财产安全&#xff0c;还加剧交通拥堵与环境污染。传统识别方…...

FD+Mysql的Insert时的字段赋值乱码问题

方法一 FDQuery4.SQL.Text : INSERT INTO 信息表 (中心, 分组) values(:中心,:分组); FDQuery4.Params[0].DataType : ftWideString; //必须加这个数据类型的定义&#xff0c;否则会有乱码 FDQuery4.Params[1].DataType : ftWideString; //ftstring就不行&#xff0c;必须是…...

第十周作业

一、CSRF 1、DVWA-High等级 2、使用Burp生成CSRF利用POC并实现攻击 二、SSRF&#xff1a;file_get_content实验&#xff0c;要求获取ssrf.php的源码 三、RCE 1、 ThinkPHP 2、 Weblogic 3、Shiro...

Python操作PDF书签详解 - 添加、修改、提取和删除

目录 简介 使用工具 Python 向 PDF 添加书签 添加书签 添加嵌套书签 Python 修改 PDF 书签 Python 展开或折叠 PDF 书签 Python 提取 PDF 书签 Python 删除 PDF 书签 简介 PDF 书签是 PDF 文件中的导航工具&#xff0c;通常包含一个标题和一个跳转位置&#xff08;如…...

One-shot和Zero-shot的区别以及使用场景

Zero-shot是模型在没有任务相关训练数据的情况下进行预测&#xff0c;依赖预训练知识。 One-shot则是提供一个示例&#xff0c;帮助模型理解任务。两者的核心区别在于是否提供示例&#xff0c;以及模型如何利用这些信息。 在机器学习和自然语言处理中&#xff0c;Zero-Shot 和…...

微软 Build 2025:开启 AI 智能体时代的产业革命

在 2025 年 5 月 19 日的微软 Build 开发者大会上&#xff0c;萨提亚・纳德拉以 "我们已进入 AI 智能体时代" 的宣言&#xff0c;正式拉开了人工智能发展的新纪元。这场汇聚了奥特曼、黄仁勋、马斯克三位科技领袖的盛会&#xff0c;不仅发布了 50 余项创新产品&#…...

集星獭 | 重塑集成体验:新版编排重构仿真电商订单数据入库

概要介绍 新版服务编排以可视化模式驱动电商订单入库流程升级&#xff0c;实现订单、客户、库存、发票、发货等环节的自动化处理。流程中通过循环节点、判断逻辑与数据查询的编排&#xff0c;完成了低代码构建业务逻辑&#xff0c;极大提升订单处理效率与业务响应速度。 背景…...

多模态大语言模型arxiv论文略读(八十八)

MammothModa: Multi-Modal Large Language Model ➡️ 论文标题&#xff1a;MammothModa: Multi-Modal Large Language Model ➡️ 论文作者&#xff1a;Qi She, Junwen Pan, Xin Wan, Rui Zhang, Dawei Lu, Kai Huang ➡️ 研究机构: ByteDance, Beijing, China ➡️ 问题背景…...

创建Workforce

创建你的Workforce 3.3.1 简单实践 1. 创建 Workforce 实例 想要使用 Workforce&#xff0c;首先需要创建一个 Workforce 实例。下面是最简单的示例&#xff1a; from camel.agents import ChatAgent from camel.models import ModelFactory from camel.types import Model…...

Cribl 中 Parser 扮演着重要的角色 + 例子

先看文档: Parser | Cribl Docs Parser The Parser Function can be used to extract fields out of events or reserialize (rewrite) events with a subset of fields. Reserialization will preserve the format of the events. For example, if an event contains comma…...

WebSocket 从入门到进阶实战

好记忆不如烂笔头&#xff0c;能记下点东西&#xff0c;就记下点&#xff0c;有时间拿出来看看&#xff0c;也会发觉不一样的感受. 聊天系统是WebSocket的最佳实践&#xff0c;以下是使用WebSocket技术实现的一个聊天系统的关键代码&#xff0c;可以通过这些关键代码&#xff…...

CSS:vertical-align用法以及布局小案例(较难)

文章目录 一、vertical-align说明二、布局案例 一、vertical-align说明 上面的文字介绍&#xff0c;估计大家也看不懂 二、布局案例...

Linux 正则表达式 扩展正则表达式 gawk

什么是正则表达式 正则表达式是我们所定义的模式模板&#xff08;pattern template&#xff09;&#xff0c;Linux工具用它来过滤文本。Linux工具&#xff08;比如sed编辑器或gawk程序&#xff09;能够在处理数据时&#xff0c;使用正则表达式对数据进行模式匹配。如果数据匹配…...

Java转Go日记(五十四):gin路由

1. 基本路由 gin 框架中采用的路由库是基于httprouter做的 地址为&#xff1a;https://github.com/julienschmidt/httprouter package mainimport ("net/http""github.com/gin-gonic/gin" )func main() {r : gin.Default()r.GET("/", func(c …...

【解决】自己的域名任何端口都访问不到,公网地址正常访问,服务器报错500。

一、问题描述 后端项目部署在服务器上&#xff0c;通过域名访问接口服务器报错500&#xff0c;通过浏览器访问域名的任何端口都是无法访问此网站。 但是通过公网地址访问是可以正常访问到的&#xff0c;感觉是域名出现了问题 二、解决过程 先说结论&#xff1a;问题原因是…...

探秘鸿蒙 HarmonyOS NEXT:Navigation 组件的全面解析

鸿蒙 ArkTS 语言中 Navigation 组件的全面解析 一、引言 本文章基于HarmonyOS NEXT操作系统&#xff0c;API12以上的版本。 在鸿蒙应用开发中&#xff0c;ArkTS 作为一种简洁、高效的开发语言&#xff0c;为开发者提供了丰富的组件库。其中&#xff0c;Navigation 组件在构建…...

订单导入(常见问题和sql)

1.印章取行,有几行取几行 union select PARAM07 name, case when regexp_count(PO_PARAM_20, chr(10)) > 0 then substr(PO_PARAM_20, 0, instr(PO_PARAM_20, chr(10)) - 1) else PO_PARAM_20 end value,PO_ID …...

PyTorch中diag_embed和transpose函数使用详解

torch.diag_embed 是 PyTorch 中用于将一个向量&#xff08;或批量向量&#xff09;**嵌入为对角矩阵&#xff08;或批量对角矩阵&#xff09;**的函数。它常用于图神经网络&#xff08;GNN&#xff09;或线性代数中生成对角矩阵。 函数原型 torch.diag_embed(input, offset0,…...

算法分析与设计实验:找零钱问题的贪心算法与动态规划解决方案

在计算机科学中&#xff0c;贪心算法和动态规划是两种常用的算法设计策略。本文将通过一个经典的找零钱问题&#xff0c;详细讲解这两种算法的实现和应用。我们将会提供完整的C代码&#xff0c;并对代码进行详细解释&#xff0c;帮助读者更好地理解和掌握这两种算法。 问题描述…...

制作 MacOS系统 の Heic动态壁纸

了解动态桌面壁纸 当macOS 10.14发布后&#xff0c;会发现系统带有动态桌面壁纸&#xff0c;设置后&#xff0c;我们的桌面背景将随着一天从早上、到下午、再到晚上的推移而发生微妙的变化。 虽然有些软件也有类似的动态变化效果&#xff0c;但是在新系统中默认的HEIC格式的动…...

大数据 笔记

kafka kafka作为消息队列为什么发送和消费消息这么快&#xff1f; 消息分区&#xff1a;不受单台服务器的限制&#xff0c;可以不受限的处理更多的数据顺序读写&#xff1a;磁盘顺序读写&#xff0c;提升读写效率页缓存&#xff1a;把磁盘中的数据缓存到内存中&#xff0c;把…...