AI写代码:我用kimi做了一个桌面应用程序,完美实现功能

科技   科技   2024-09-08 19:00   四川  
感谢阅读,我是江枫,专注AI,编程,副业领域。
关注公众号可领取一份大礼包,包含AI/python/副业 资料。

前面我们尝试了kimi的很多代码生成能力。有插件,网站,爬虫。今天尝试用kimi来做一个windows的桌面应用程序

首先就是提示词,首先法给kimi的提示词,让kimi作为一个GUI界面开发高手

- Role: GUI界面开发高手- Background: 用户需要设计一个具有高度交互性和用户友好性的图形用户界面(GUI),这通常涉及到对用户体验(UX)、设计原则和编程技能的深入了解。- Profile: 你是一位在GUI设计和开发领域拥有多年经验的专家,擅长使用各种设计工具和编程语言来创建直观、响应式的用户界面。- Skills: 用户体验设计(UX Design)、用户界面设计(UI Design)、前端开发技能(如HTML, CSS, JavaScript)、熟悉设计软件(如Sketch, Adobe XD)。- Goals: 设计一个既美观又实用的GUI,提升用户满意度和产品的市场竞争力。- Constrains: 界面设计应符合行业标准和最佳实践,同时确保兼容性和可访问性。- OutputFormat: 高保真的设计原型,包括交互元素和布局的详细说明。- Workflow:  1. 与用户沟通了解他们希望采用的开发语言和框架  2. 创建初步的设计草图和概念模型。  4. 开发高保真的原型,并进行用户测试。  5. 根据反馈进行迭代设计,直至最终确定GUI设计。- Examples:  界面设计案例:一个电子商务网站的首页设计,包含产品展示、搜索栏、用户登录和购物车入口。  交互设计案例:一个音乐播放器的播放/暂停按钮,当用户悬停时显示更多控制选项。- Initialization: 欢迎!请告诉我你的GUI设计需求,包括你的目标用户、功能需求以及任何你希望我考虑的特殊设计元素。

kimi的回答: 要求我提供如下的关键信息

按照kimi的需求,细化了这个应用程序的各个要求。我要做的是一个串口监控程序。因此需要5个下拉框进行配置。并且用PyQt5来进行搭建

根据我的需求,kimi给了我一个设计概要

感谢您提供的详细信息。根据您的需求,我将为您设计一个面向嵌入式开发人员的图形用户界面(GUI),该界面将使用PyQt5进行开发。以下是根据您的要求制定的设计概要:
设计概要1. 目标用户用户群体:嵌入式开发人员2. 功能需求语言:中文界面下拉框:端口:提供COM2至COM31的选项波特率:提供9600, 115200, 2000000的选项数据位:提供5, 6, 7, 8的选项奇偶检验:提供None, Odd的选项停止位:提供1, 1.5的选项按钮:一个“确定”按钮,用于根据用户选择的参数配置串口并读取数据全屏模式:支持全屏尺寸,以便于在大型显示器或多任务环境中使用3. 设计偏好参考软件:SecureCRT的布局和设计4. 技术要求开发框架:PyQt55. 设计流程需求分析:确认用户需求和功能点。草图设计:创建初步的界面草图,包括布局和组件位置。高保真原型:基于草图设计,开发一个高保真的原型,包括交互元素和布局的详细说明。用户测试:进行用户测试,收集反馈。迭代设计:根据用户反馈进行设计迭代,直至最终确定GUI设计。6. 输出格式设计原型:高保真的设计原型,包括交互元素和布局的详细说明。7. 兼容性和可访问性操作系统:确保在Windows操作系统上运行良好。屏幕阅读器:考虑到可访问性,设计将支持屏幕阅读器。8. 预算和时间线请提供您的预算和期望的项目完成时间,以便进行合理的项目规划。9. 现有材料如果您有任何现有的设计材料或品牌指南,请提供,以便保持设计的一致性。

我认同这个设计概要。请Kimi继续。因此kimi继续输出了设计草图

我确认设计,让kimi提供代码

kimi提供了代码

import sysfrom PyQt5.QtWidgets import QApplication, QWidget, QLabel, QComboBox, QPushButton, QVBoxLayout, QHBoxLayout
class SerialConfigApp(QWidget): def __init__(self): super().__init__() self.initUI()
def initUI(self): self.setWindowTitle('嵌入式串口配置工具')
# 端口下拉框 port_label = QLabel('端口:') self.port_combo = QComboBox() self.port_combo.addItems(['COM2', 'COM3', 'COM4', 'COM5', 'COM6', 'COM7', 'COM8', 'COM9', 'COM10', 'COM11', 'COM12', 'COM13', 'COM14', 'COM15', 'COM16', 'COM17', 'COM18', 'COM19', 'COM20', 'COM21', 'COM22', 'COM23', 'COM24', 'COM25', 'COM26', 'COM27', 'COM28', 'COM29', 'COM30', 'COM31'])
# 波特率下拉框 baud_rate_label = QLabel('波特率:') self.baud_rate_combo = QComboBox() self.baud_rate_combo.addItems(['9600', '115200', '2000000'])
# 数据位下拉框 data_bits_label = QLabel('数据位:') self.data_bits_combo = QComboBox() self.data_bits_combo.addItems(['5', '6', '7', '8'])
# 奇偶检验下拉框 parity_label = QLabel('奇偶检验:') self.parity_combo = QComboBox() self.parity_combo.addItems(['None', 'Odd'])
# 停止位下拉框 stop_bits_label = QLabel('停止位:') self.stop_bits_combo = QComboBox() self.stop_bits_combo.addItems(['1', '1.5'])
# 确定按钮 self.confirm_button = QPushButton('确定') self.confirm_button.clicked.connect(self.on_confirm)
# 布局 combo_layout = QHBoxLayout() combo_layout.addWidget(port_label) combo_layout.addWidget(self.port_combo) combo_layout.addWidget(baud_rate_label) combo_layout.addWidget(self.baud_rate_combo) combo_layout.addWidget(data_bits_label) combo_layout.addWidget(self.data_bits_combo) combo_layout.addWidget(parity_label) combo_layout.addWidget(self.parity_combo) combo_layout.addWidget(stop_bits_label) combo_layout.addWidget(self.stop_bits_combo)
button_layout = QHBoxLayout() button_layout.addWidget(self.confirm_button)
main_layout = QVBoxLayout() main_layout.addLayout(combo_layout) main_layout.addLayout(button_layout)
self.setLayout(main_layout)
def on_confirm(self): # 这里应添加打开串口并读取数据的逻辑 print("串口配置确认 - 端口: {}, 波特率: {}, 数据位: {}, 奇偶检验: {}, 停止位: {}".format( self.port_combo.currentText(), self.baud_rate_combo.currentText(), self.data_bits_combo.currentText(), self.parity_combo.currentText(), self.stop_bits_combo.currentText() )) # 请注意,实际应用中需要实现串口通信的代码
# 主程序if __name__ == '__main__': app = QApplication(sys.argv) ex = SerialConfigApp() ex.show() sys.exit(app.exec_())

此时运行,弹出软件界面如下。下拉框符合我的需求。但是没有显示框来显示从串口读的内容。而且代码中也没有去读取串口的动作

继续给kimi提需求,用一个显示框,来显示读出串口的数据,而且显示框要有下拉条

kimi生成的新代码

import sysimport serialfrom PyQt5.QtWidgets import QApplication, QWidget, QLabel, QComboBox, QPushButton, QVBoxLayout, QHBoxLayout, QTextEditfrom PyQt5.QtCore import Qt
class SerialConfigApp(QWidget): def __init__(self): super().__init__() self.initUI()
def initUI(self): self.setWindowTitle('嵌入式串口配置工具')
# 定义垂直布局 main_layout = QVBoxLayout(self)
# 端口下拉框 self.port_combo = QComboBox() self.port_combo.addItems(['COM1', 'COM2', 'COM3', 'COM4']) # 示例端口,根据需要添加更多
# 波特率下拉框 self.baud_rate_combo = QComboBox() self.baud_rate_combo.addItems(['9600', '115200', '2000000'])
# 数据位下拉框 self.data_bits_combo = QComboBox() self.data_bits_combo.addItems(['7', '8'])
# 停止位下拉框 self.stop_bits_combo = QComboBox() self.stop_bits_combo.addItems(['1', '2'])
# 奇偶校验下拉框 self.parity_combo = QComboBox() self.parity_combo.addItems(['None', 'Even', 'Odd'])
# 创建确定按钮 self.confirm_button = QPushButton('确定') self.confirm_button.clicked.connect(self.on_confirm)
# 创建文本显示框 self.data_display = QTextEdit() self.data_display.setReadOnly(True) self.data_display.setStyleSheet("background-color: white;")
# 设置文本框的滚动条策略,这里同时设置了垂直和水平滚动条 self.data_display.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn) self.data_display.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
# 创建水平布局并添加组件 combo_layout = QHBoxLayout() combo_layout.addWidget(QLabel('端口:')) combo_layout.addWidget(self.port_combo) combo_layout.addWidget(QLabel('波特率:')) combo_layout.addWidget(self.baud_rate_combo) combo_layout.addWidget(QLabel('数据位:')) combo_layout.addWidget(self.data_bits_combo) combo_layout.addWidget(QLabel('停止位:')) combo_layout.addWidget(self.stop_bits_combo) combo_layout.addWidget(QLabel('奇偶校验:')) combo_layout.addWidget(self.parity_combo)
# 创建底部按钮布局 button_layout = QHBoxLayout() button_layout.addWidget(self.confirm_button)
# 将布局添加到主布局 main_layout.addLayout(combo_layout) main_layout.addLayout(button_layout) main_layout.addWidget(self.data_display)
# 设置窗口的布局 self.setLayout(main_layout)
def on_confirm(self): # 获取用户配置的串口参数 port = self.port_combo.currentText() baud_rate = int(self.baud_rate_combo.currentText()) data_bits = int(self.data_bits_combo.currentText()) stop_bits = int(self.stop_bits_combo.currentText()) parity = self.parity_combo.currentText()
# 打开串口并读取数据 try: self.serial = serial.Serial(port, baud_rate, timeout=1) # 读取一行数据 data = self.serial.readline().decode('utf-8', errors='ignore') self.serial.close() except serial.SerialException as e: data = f"无法打开串口: {e}" except Exception as e: data = f"读取串口时发生错误: {e}"
# 显示数据 self.displaySerialData(data)
def displaySerialData(self, data): self.data_display.append(data) self.data_display.centerCursor() sb = self.data_display.verticalScrollBar() sb.setValue(sb.maximum())
# 主程序if __name__ == '__main__': app = QApplication(sys.argv) ex = SerialConfigApp() ex.show() sys.exit(app.exec_())

再次于运行。界面如下,增加了显示框,以及左右,上下的拉条

kimi现在有了提示词功能。在提示词的加持下。和kimi的操作更加简单了



我是和AI一起写代码的程序员,更多AI有趣的玩法关注公众号

AI时代大有可为,对AI工具,AI智能体,AI赚钱感兴趣的欢迎添加vx交流。


程序猿玩AI
玩AI的程序猿: 江枫,专注AI工具,AI副业,AI智能体,分享AI新闻
 最新文章