• 合理运用ChatGPT使用Python编写一个桌面便签应用


    ChatGPT的编程能力也不差,本次我就一步一步提要求,让ChatGPT根据我的要求,编写出一个可用的,可打包运行的桌面便签。

    代码

    1. import sys
    2. from PyQt5.QtWidgets import QApplication, QMainWindow, QMenu, QAction, QSystemTrayIcon, QMessageBox, QTextEdit
    3. from PyQt5.QtCore import Qt, QPoint, QRect, QSize
    4. from PyQt5.QtGui import QPainter, QColor, QBrush, QPen, QIcon, QFont, QCursor
    5. class RoundedWindow(QMainWindow):
    6. def __init__(self, radius):
    7. super().__init__()
    8. self.setWindowFlags(Qt.FramelessWindowHint)
    9. self.setAttribute(Qt.WA_TranslucentBackground)
    10. self.setGeometry(700, 400, 400, 300)
    11. self.radius = radius
    12. self.draggable = False
    13. self.drag_position = QPoint()
    14. self.default_font_size = 13
    15. self.current_font_size = self.default_font_size
    16. self.resizing = False
    17. # 创建系统托盘图标
    18. self.tray_icon = QSystemTrayIcon(self)
    19. self.tray_icon.setIcon(QIcon("noteIcon.png"))
    20. self.tray_icon.activated.connect(self.handleTrayIconActivated)
    21. # 创建鼠标右键菜单
    22. self.tray_menu = QMenu(self)
    23. exit_action = QAction("退出", self)
    24. exit_action.triggered.connect(QApplication.instance().quit)
    25. self.tray_menu.addAction(exit_action)
    26. self.tray_icon.setContextMenu(self.tray_menu)
    27. # 创建文本编辑框
    28. self.text_edit = QTextEdit(self)
    29. self.text_edit.setGeometry(10, 40, self.width() - 20, self.height() - 50)
    30. self.text_edit.setStyleSheet("background-color: transparent; border: none; color: white;")
    31. self.text_edit.setFont(QFont("Arial", self.current_font_size))
    32. self.text_edit.textChanged.connect(self.saveTextToFile)
    33. def paintEvent(self, event):
    34. painter = QPainter(self)
    35. painter.setRenderHint(QPainter.Antialiasing)
    36. painter.setBrush(QColor(0, 0, 0, 150)) # 设置半透明背景颜色
    37. painter.drawRoundedRect(self.rect(), self.radius, self.radius)
    38. # 绘制红色关闭按钮
    39. close_button = QRect(10, 10, 20, 20)
    40. painter.setBrush(QColor(255, 0, 0))
    41. painter.setPen(Qt.NoPen)
    42. painter.drawEllipse(close_button)
    43. # 绘制黄色最小化按钮
    44. minimize_button = QRect(40, 10, 20, 20)
    45. painter.setBrush(QColor(255, 255, 0))
    46. painter.setPen(Qt.NoPen)
    47. painter.drawEllipse(minimize_button)
    48. # 绘制灰色最大化按钮
    49. maximize_button = QRect(70, 10, 20, 20)
    50. painter.setBrush(QColor(128, 128, 128))
    51. painter.setPen(Qt.NoPen)
    52. painter.drawEllipse(maximize_button)
    53. def mousePressEvent(self, event):
    54. if event.button() == Qt.LeftButton:
    55. self.draggable = True
    56. self.drag_position = event.globalPos() - self.frameGeometry().topLeft()
    57. event.accept()
    58. # 判断点击的按钮
    59. pos = event.pos()
    60. if QRect(10, 10, 20, 20).contains(pos):
    61. self.close() # 关闭当前窗口
    62. elif QRect(40, 10, 20, 20).contains(pos):
    63. self.hide() # 最小化当前窗口
    64. def mouseMoveEvent(self, event):
    65. if event.buttons() == Qt.LeftButton and self.draggable:
    66. self.move(event.globalPos() - self.drag_position)
    67. event.accept()
    68. # 检查是否在窗口右下角,设置鼠标形状
    69. if self.isInBottomRightCorner(event.pos()):
    70. self.setCursor(Qt.SizeFDiagCursor)
    71. else:
    72. self.setCursor(Qt.ArrowCursor)
    73. # 检查是否正在调整窗口大小
    74. if self.resizing:
    75. self.resizeWindow(event.globalPos())
    76. def mouseReleaseEvent(self, event):
    77. if event.button() == Qt.LeftButton:
    78. self.draggable = False
    79. self.resizing = False
    80. event.accept()
    81. def handleTrayIconActivated(self, reason):
    82. if reason == QSystemTrayIcon.Trigger:
    83. self.showNormal() # 点击托盘图标恢复窗口显示
    84. def closeEvent(self, event):
    85. self.hide() # 窗口关闭时隐藏而不是退出应用程序
    86. self.tray_icon.show() # 显示系统托盘图标
    87. event.ignore() # 忽略窗口关闭事件
    88. def saveTextToFile(self):
    89. text = self.text_edit.toPlainText()
    90. with open("bianqian.txt", "w") as file:
    91. file.write(text)
    92. def isInBottomRightCorner(self, pos):
    93. window_rect = self.rect()
    94. corner_rect = QRect(window_rect.bottomRight() - QPoint(20, 20), QSize(20, 20))
    95. return corner_rect.contains(pos)
    96. def resizeWindow(self, pos):
    97. new_size = QSize(pos.x() - self.geometry().left(), pos.y() - self.geometry().top())
    98. self.resize(new_size)
    99. def wheelEvent(self, event):
    100. if event.modifiers() == Qt.ControlModifier:
    101. delta = event.angleDelta().y()
    102. if delta > 0:
    103. self.increaseFontSize()
    104. else:
    105. self.decreaseFontSize()
    106. def increaseFontSize(self):
    107. self.current_font_size += 1
    108. self.text_edit.setFont(QFont("Arial", self.current_font_size))
    109. def decreaseFontSize(self):
    110. if self.current_font_size > 1:
    111. self.current_font_size -= 1
    112. self.text_edit.setFont(QFont("Arial", self.current_font_size))
    113. if __name__ == '__main__':
    114. app = QApplication(sys.argv)
    115. radius = 15 # 修改圆角的值
    116. window = RoundedWindow(radius)
    117. window.show()
    118. # 调试:检查系统托盘是否可用
    119. if not QSystemTrayIcon.isSystemTrayAvailable():
    120. QMessageBox.critical(None, "错误", "系统托盘不可用!")
    121. sys.exit(1)
    122. # 调试:检查图标是否加载成功
    123. if not window.tray_icon.isSystemTrayAvailable():
    124. QMessageBox.critical(None, "错误", "无法加载系统托盘图标!")
    125. sys.exit(1)
    126. window.tray_icon.show()
    127. sys.exit(app.exec_())

    运行结果

    便签属性

    1、半透明、圆角、最小化、系统托盘
    2、按住Ctrl不放滚动鼠标可改变文字大小
    3、系统托盘鼠标右键完全退出
    4、便签输入的文字实时更新至bianqian.txt 

  • 相关阅读:
    mybaits入门
    petite-vue源码剖析-逐行解读@vue/reactivity之reactive
    day02_python快速入门
    自动化测试:电商管理系统元素定位练习
    计算机网络中的应用层和传输层(http/tcp)
    [AutoSAR系列] 1.3 AutoSar 架构
    广度优先搜索(BFS)
    MySQL数据库基本操作2
    焱融全闪系列科普| 为什么 SSD 需要 NVMe?
    计算机毕业设计(附源码)python作业管理系统设计
  • 原文地址:https://blog.csdn.net/leavemyleave/article/details/134366308