如果需要使用ChatGPT Plus账号,建议使用虚拟信用卡,推荐使用https://bewildcard.com,支持美国本地环境,升级ChatGPT Plus、OpenAI API、midjourney等可100%成功,输入推荐码SUCCESS,开卡费88折。使用https://bewildcard.com/i/SUCCESS可直接输入推荐码!
有很多编程语言都支持GUI,如Python的PyQt、Tkinter、wxPython、C++的QT、Java的JavaFX、JavaScript的Electron、C#的各种GUI框架等。如果读者像在不同的操作系统上使用不同的编程语言开发GUI应用,或者处于不同的目的,要使用不同编程语言开发满足特定目的的GUI应用,并且人手不够的话,那么恐怕就要996了,有时不急007都不够。但有了ChatGPT、GitHub Copilot这些超强的AI工具,就很爽了,一个人就是一个团队,而且是顶级的团队。
本文会结合多种AI代码生成工具,向读者展示如何利用这些工具在极短的时间内,快速、准确地完成一个GUI应用。这个GUI应用的基本功能是通过3个滑块组件控制颜色的红、绿、蓝三原色,然后将颜色作为文本框的背景色,并将颜色值显示在标签组件上。这个程序我们先用Python和PyQt6实现。所以读者需要安装Python,并使用下面的命令安装PyQt6。
pip install PyQt6
根据这个桌面应用的功能描述,可以得出下面的几个关键点:
(1)窗口
(2)文本框组件
(3)标签组件
(4)3个滑块组件
(5)每个滑块组件都可以响应滑块的滑动动作
那么就将这几个关键点组合起来,形成一段文字,然后扔给ChatGPT,于是有了下面的描述:
用PyQt6创建一个300*500的窗口,然后在窗口的垂直方向分别放置一个文本组件、一个标签组件和3滑块组件。所有滑块组件的最小值是0,最大值是255。3个滑杆组件分别作为红、绿、蓝三原色。当滑动这3个滑块时,分别用这3个滑块的当前值设置文本组件的背景色。然后将这3个滑块的当前值组合成以井号开头的颜色值,如#ffffff,显示在标签组件中。给出完整的实现代码和中文注释。
ChatGPT会给出下面的代码:
import sys
from PyQt6.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QSlider, QTextEdit
from PyQt6.QtCore import Qt
from PyQt6.QtGui import QColor
class ColorSliderApp(QWidget):
def __init__(self):
super().__init__()
# 设置窗口大小
self.resize(300, 500)
# 设置布局
self.layout = QVBoxLayout()
self.setLayout(self.layout)
# 创建文本组件
self.text_edit = QTextEdit()
self.layout.addWidget(self.text_edit)
# 创建标签组件
self.label = QLabel("颜色: #ffffff")
self.layout.addWidget(self.label)
# 创建滑杆组件
self.red_slider = QSlider(Qt.Orientation.Vertical)
self.green_slider = QSlider(Qt.Orientation.Vertical)
self.blue_slider = QSlider(Qt.Orientation.Vertical)
# 设置滑块范围
self.red_slider.setRange(0, 255)
self.green_slider.setRange(0, 255)
self.blue_slider.setRange(0, 255)
# 添加滑块到布局
self.layout.addWidget(self.red_slider)
self.layout.addWidget(self.green_slider)
self.layout.addWidget(self.blue_slider)
# 连接滑块信号到槽函数
self.red_slider.valueChanged.connect(self.update_color)
self.green_slider.valueChanged.connect(self.update_color)
self.blue_slider.valueChanged.connect(self.update_color)
def update_color(self):
# 获取滑块的值
red = self.red_slider.value()
green = self.green_slider.value()
blue = self.blue_slider.value()
# 设置文本组件的背景色
color = QColor(red, green, blue)
self.text_edit.setStyleSheet(f"background-color: {color.name()}")
# 设置标签组件显示的颜色值
self.label.setText(f"颜色: {color.name()}")
if __name__ == "__main__":
app = QApplication(sys.argv)
# 创建窗口实例
window = ColorSliderApp()
window.show()
sys.exit(app.exec())
运行这段代码,会显示如下图所示的效果。

初步生成的桌面应用
从展示的窗口和组件来看,功能基本上没问题,但界面看着别扭。由于在描述中没有说清楚滑块组件的方向,所以ChatGPT自作主张将滑块方向设置成垂直方向。当然,可以要求ChatGPT重新生成这段程序,不过没有必要,这些都是小问题,只要微调即可。
现在就将所有的滑块组件变成水平方向,如果读者第1次使用QSlider组件,不知道如何设置QSlider组件为水平方向,那么就可以借助GitHub Copilot或其他同类工具。首先在__init__方法中创建QSlider组件代码的后面添加如下注释:
# 将red_slider、green_slider和blue_slider设置为水平方向
然后不断按Enter和Tab键,就会一行一行自动生成如下的3行代码:
self.red_slider.setOrientation(Qt.Orientation.Horizontal)
self.green_slider.setOrientation(Qt.Orientation.Horizontal)
self.blue_slider.setOrientation(Qt.Orientation.Horizontal)
再次运行程序,会看到如下图所示的效果。

将滑块组件变为水平方向
不过这个程序仍然不完美,3个滑块组件到底是做什么的呢?除了自己,没人知道。所以需要继续改进这个程序。在每一个滑块组件前面加一个标签,用于表明对应滑块组件的作用,所以可以在创建QSlider组件代码的后面添加下面的注释:
# 分别在red_slider、green_slider和blue_slider前面各添加一个标签组件,用于显示滑块的值
然后不断按Enter和Tab键,GitHub Copilot会自动生成如下的代码:
self.red_label = QLabel("R")
self.green_label = QLabel("G")
self.blue_label = QLabel("B")
self.layout.addWidget(self.red_label)
self.layout.addWidget(self.red_slider)
self.layout.addWidget(self.green_label)
self.layout.addWidget(self.green_slider)
self.layout.addWidget(self.blue_label)
self.layout.addWidget(self.blue_slider)
在这段代码中,重复添加了3个滑块组件,所以需要将后面添加3个滑块的代码去掉,要去掉的代码如下:
self.layout.addWidget(self.red_slider)
self.layout.addWidget(self.green_slider)
self.layout.addWidget(self.blue_slider)
现在运行程序,会看到如下图所示的效果。

添加标签组件
现在的程序虽然比刚开始好多了,但仍然不完美。尽管知道了每一个滑块组件是做什么的,但不知道每一个滑块组件的当前值,所以希望在每一个滑块组件上方的标签组件中,不仅显示标识,还显示对应滑块的当前值。
在update_color获取滑块组件值代码的后面输入如下的注释:
# 将每一个滑块组件的当前值显示在对应的标签组件上,并且在对应的标签组件前面显示“红:”、“绿:”、“蓝:”等文本
然后不断按Enter和Tab键,会生成如下的代码:
self.red_label.setText(f"红: {red}")
self.green_label.setText(f"绿: {green}")
self.blue_label.setText(f"蓝: {blue}")
如果生成的代码仍然用R、G、B表示红、绿、蓝,直接手动改一下即可。然后在__init__方法的最后使用下面的代码调用update_color方法,以保证在窗口启动时也可以更新3个标签组件的值。
self.update_color()
现在运行程序,会看到如下图所示的窗口。

当然,这个程序还有改进空间,读者可以自行发挥想象力,看看还有哪些地方需要完善。