ChatGPT的编程能力也不差,本次我就一步一步提要求,让ChatGPT根据我的要求,编写出一个可用的,可打包运行的桌面便签。
代码
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QMenu, QAction, QSystemTrayIcon, QMessageBox, QTextEdit
from PyQt5.QtCore import Qt, QPoint, QRect, QSize
from PyQt5.QtGui import QPainter, QColor, QBrush, QPen, QIcon, QFont, QCursorclass RoundedWindow(QMainWindow):def __init__(self, radius):super().__init__()self.setWindowFlags(Qt.FramelessWindowHint)self.setAttribute(Qt.WA_TranslucentBackground)self.setGeometry(700, 400, 400, 300)self.radius = radiusself.draggable = Falseself.drag_position = QPoint()self.default_font_size = 13self.current_font_size = self.default_font_sizeself.resizing = False# 创建系统托盘图标self.tray_icon = QSystemTrayIcon(self)self.tray_icon.setIcon(QIcon("noteIcon.png"))self.tray_icon.activated.connect(self.handleTrayIconActivated)# 创建鼠标右键菜单self.tray_menu = QMenu(self)exit_action = QAction("退出", self)exit_action.triggered.connect(QApplication.instance().quit)self.tray_menu.addAction(exit_action)self.tray_icon.setContextMenu(self.tray_menu)# 创建文本编辑框self.text_edit = QTextEdit(self)self.text_edit.setGeometry(10, 40, self.width() - 20, self.height() - 50)self.text_edit.setStyleSheet("background-color: transparent; border: none; color: white;")self.text_edit.setFont(QFont("Arial", self.current_font_size))self.text_edit.textChanged.connect(self.saveTextToFile)def paintEvent(self, event):painter = QPainter(self)painter.setRenderHint(QPainter.Antialiasing)painter.setBrush(QColor(0, 0, 0, 150)) # 设置半透明背景颜色painter.drawRoundedRect(self.rect(), self.radius, self.radius)# 绘制红色关闭按钮close_button = QRect(10, 10, 20, 20)painter.setBrush(QColor(255, 0, 0))painter.setPen(Qt.NoPen)painter.drawEllipse(close_button)# 绘制黄色最小化按钮minimize_button = QRect(40, 10, 20, 20)painter.setBrush(QColor(255, 255, 0))painter.setPen(Qt.NoPen)painter.drawEllipse(minimize_button)# 绘制灰色最大化按钮maximize_button = QRect(70, 10, 20, 20)painter.setBrush(QColor(128, 128, 128))painter.setPen(Qt.NoPen)painter.drawEllipse(maximize_button)def mousePressEvent(self, event):if event.button() == Qt.LeftButton:self.draggable = Trueself.drag_position = event.globalPos() - self.frameGeometry().topLeft()event.accept()# 判断点击的按钮pos = event.pos()if QRect(10, 10, 20, 20).contains(pos):self.close() # 关闭当前窗口elif QRect(40, 10, 20, 20).contains(pos):self.hide() # 最小化当前窗口def mouseMoveEvent(self, event):if event.buttons() == Qt.LeftButton and self.draggable:self.move(event.globalPos() - self.drag_position)event.accept()# 检查是否在窗口右下角,设置鼠标形状if self.isInBottomRightCorner(event.pos()):self.setCursor(Qt.SizeFDiagCursor)else:self.setCursor(Qt.ArrowCursor)# 检查是否正在调整窗口大小if self.resizing:self.resizeWindow(event.globalPos())def mouseReleaseEvent(self, event):if event.button() == Qt.LeftButton:self.draggable = Falseself.resizing = Falseevent.accept()def handleTrayIconActivated(self, reason):if reason == QSystemTrayIcon.Trigger:self.showNormal() # 点击托盘图标恢复窗口显示def closeEvent(self, event):self.hide() # 窗口关闭时隐藏而不是退出应用程序self.tray_icon.show() # 显示系统托盘图标event.ignore() # 忽略窗口关闭事件def saveTextToFile(self):text = self.text_edit.toPlainText()with open("bianqian.txt", "w") as file:file.write(text)def isInBottomRightCorner(self, pos):window_rect = self.rect()corner_rect = QRect(window_rect.bottomRight() - QPoint(20, 20), QSize(20, 20))return corner_rect.contains(pos)def resizeWindow(self, pos):new_size = QSize(pos.x() - self.geometry().left(), pos.y() - self.geometry().top())self.resize(new_size)def wheelEvent(self, event):if event.modifiers() == Qt.ControlModifier:delta = event.angleDelta().y()if delta > 0:self.increaseFontSize()else:self.decreaseFontSize()def increaseFontSize(self):self.current_font_size += 1self.text_edit.setFont(QFont("Arial", self.current_font_size))def decreaseFontSize(self):if self.current_font_size > 1:self.current_font_size -= 1self.text_edit.setFont(QFont("Arial", self.current_font_size))if __name__ == '__main__':app = QApplication(sys.argv)radius = 15 # 修改圆角的值window = RoundedWindow(radius)window.show()# 调试:检查系统托盘是否可用if not QSystemTrayIcon.isSystemTrayAvailable():QMessageBox.critical(None, "错误", "系统托盘不可用!")sys.exit(1)# 调试:检查图标是否加载成功if not window.tray_icon.isSystemTrayAvailable():QMessageBox.critical(None, "错误", "无法加载系统托盘图标!")sys.exit(1)window.tray_icon.show()sys.exit(app.exec_())
运行结果
便签属性
1、半透明、圆角、最小化、系统托盘
2、按住Ctrl不放滚动鼠标可改变文字大小
3、系统托盘鼠标右键完全退出
4、便签输入的文字实时更新至bianqian.txt