{"id":10007999,"date":"2023-06-26T19:59:22","date_gmt":"2023-06-26T11:59:22","guid":{"rendered":"https:\/\/ityet.com\/?p=10007999"},"modified":"2023-06-26T19:59:22","modified_gmt":"2023-06-26T11:59:22","slug":"%e4%b8%80%e6%ad%a5%e4%b8%80%e6%ad%a5%e6%8c%87%e4%bd%bfchatgpt%e4%bd%bf%e7%94%a8python%e7%bc%96%e5%86%99%e4%b8%80%e4%b8%aa%e6%a1%8c%e9%9d%a2%e4%be%bf%e7%ad%be%e5%ba%94%e7%94%a8","status":"publish","type":"post","link":"https:\/\/itmax.cn\/?p=10007999","title":{"rendered":"\u4e00\u6b65\u4e00\u6b65\u6307\u4f7fChatGPT\u4f7f\u7528Python\u7f16\u5199\u4e00\u4e2a\u684c\u9762\u4fbf\u7b7e\u5e94\u7528"},"content":{"rendered":"<p>ChatGPT\u7684\u7f16\u7a0b\u80fd\u529b\u4e5f\u4e0d\u5dee\uff0c\u672c\u6b21\u6211\u5c31\u4e00\u6b65\u4e00\u6b65\u63d0\u8981\u6c42\uff0c\u8ba9ChatGPT\u6839\u636e\u6211\u7684\u8981\u6c42\uff0c\u7f16\u5199\u51fa\u4e00\u4e2a\u53ef\u7528\u7684\uff0c\u53ef\u6253\u5305\u8fd0\u884c\u7684\u684c\u9762\u4fbf\u7b7e\u3002<\/p>\n<p><img decoding=\"async\" referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/bVc8wpK\" alt=\"image.png\" title=\"image.png\" loading=\"lazy\"><\/p>\n<h2>\u4ee3\u7801<\/h2>\n<pre><code>import sys\nfrom PyQt5.QtWidgets import QApplication, QMainWindow, QMenu, QAction, QSystemTrayIcon, QMessageBox, QTextEdit\nfrom PyQt5.QtCore import Qt, QPoint, QRect, QSize\nfrom PyQt5.QtGui import QPainter, QColor, QBrush, QPen, QIcon, QFont, QCursor\n\nclass RoundedWindow(QMainWindow):\n    def __init__(self, radius):\n        super().__init__()\n        self.setWindowFlags(Qt.FramelessWindowHint)\n        self.setAttribute(Qt.WA_TranslucentBackground)\n        self.setGeometry(700, 400, 400, 300)\n        self.radius = radius\n        self.draggable = False\n        self.drag_position = QPoint()\n        self.default_font_size = 13\n        self.current_font_size = self.default_font_size\n        self.resizing = False\n\n        # \u521b\u5efa\u7cfb\u7edf\u6258\u76d8\u56fe\u6807\n        self.tray_icon = QSystemTrayIcon(self)\n        self.tray_icon.setIcon(QIcon(&quot;noteIcon.png&quot;))\n        self.tray_icon.activated.connect(self.handleTrayIconActivated)\n\n        # \u521b\u5efa\u9f20\u6807\u53f3\u952e\u83dc\u5355\n        self.tray_menu = QMenu(self)\n        exit_action = QAction(&quot;\u9000\u51fa&quot;, self)\n        exit_action.triggered.connect(QApplication.instance().quit)\n        self.tray_menu.addAction(exit_action)\n        self.tray_icon.setContextMenu(self.tray_menu)\n\n        # \u521b\u5efa\u6587\u672c\u7f16\u8f91\u6846\n        self.text_edit = QTextEdit(self)\n        self.text_edit.setGeometry(10, 40, self.width() - 20, self.height() - 50)\n        self.text_edit.setStyleSheet(&quot;background-color: transparent; border: none; color: white;&quot;)\n        self.text_edit.setFont(QFont(&quot;Arial&quot;, self.current_font_size))\n        self.text_edit.textChanged.connect(self.saveTextToFile)\n\n    def paintEvent(self, event):\n        painter = QPainter(self)\n        painter.setRenderHint(QPainter.Antialiasing)\n        painter.setBrush(QColor(0, 0, 0, 150))  # \u8bbe\u7f6e\u534a\u900f\u660e\u80cc\u666f\u989c\u8272\n        painter.drawRoundedRect(self.rect(), self.radius, self.radius)\n\n        # \u7ed8\u5236\u7ea2\u8272\u5173\u95ed\u6309\u94ae\n        close_button = QRect(10, 10, 20, 20)\n        painter.setBrush(QColor(255, 0, 0))\n        painter.setPen(Qt.NoPen)\n        painter.drawEllipse(close_button)\n\n        # \u7ed8\u5236\u9ec4\u8272\u6700\u5c0f\u5316\u6309\u94ae\n        minimize_button = QRect(40, 10, 20, 20)\n        painter.setBrush(QColor(255, 255, 0))\n        painter.setPen(Qt.NoPen)\n        painter.drawEllipse(minimize_button)\n\n        # \u7ed8\u5236\u7070\u8272\u6700\u5927\u5316\u6309\u94ae\n        maximize_button = QRect(70, 10, 20, 20)\n        painter.setBrush(QColor(128, 128, 128))\n        painter.setPen(Qt.NoPen)\n        painter.drawEllipse(maximize_button)\n\n    def mousePressEvent(self, event):\n        if event.button() == Qt.LeftButton:\n            self.draggable = True\n            self.drag_position = event.globalPos() - self.frameGeometry().topLeft()\n            event.accept()\n\n            # \u5224\u65ad\u70b9\u51fb\u7684\u6309\u94ae\n            pos = event.pos()\n            if QRect(10, 10, 20, 20).contains(pos):\n                self.close()  # \u5173\u95ed\u5f53\u524d\u7a97\u53e3\n            elif QRect(40, 10, 20, 20).contains(pos):\n                self.hide()  # \u6700\u5c0f\u5316\u5f53\u524d\u7a97\u53e3\n\n    def mouseMoveEvent(self, event):\n        if event.buttons() == Qt.LeftButton and self.draggable:\n            self.move(event.globalPos() - self.drag_position)\n            event.accept()\n\n        # \u68c0\u67e5\u662f\u5426\u5728\u7a97\u53e3\u53f3\u4e0b\u89d2\uff0c\u8bbe\u7f6e\u9f20\u6807\u5f62\u72b6\n        if self.isInBottomRightCorner(event.pos()):\n            self.setCursor(Qt.SizeFDiagCursor)\n        else:\n            self.setCursor(Qt.ArrowCursor)\n\n        # \u68c0\u67e5\u662f\u5426\u6b63\u5728\u8c03\u6574\u7a97\u53e3\u5927\u5c0f\n        if self.resizing:\n            self.resizeWindow(event.globalPos())\n\n    def mouseReleaseEvent(self, event):\n        if event.button() == Qt.LeftButton:\n            self.draggable = False\n            self.resizing = False\n            event.accept()\n\n    def handleTrayIconActivated(self, reason):\n        if reason == QSystemTrayIcon.Trigger:\n            self.showNormal()  # \u70b9\u51fb\u6258\u76d8\u56fe\u6807\u6062\u590d\u7a97\u53e3\u663e\u793a\n\n    def closeEvent(self, event):\n        self.hide()  # \u7a97\u53e3\u5173\u95ed\u65f6\u9690\u85cf\u800c\u4e0d\u662f\u9000\u51fa\u5e94\u7528\u7a0b\u5e8f\n        self.tray_icon.show()  # \u663e\u793a\u7cfb\u7edf\u6258\u76d8\u56fe\u6807\n        event.ignore()  # \u5ffd\u7565\u7a97\u53e3\u5173\u95ed\u4e8b\u4ef6\n\n    def saveTextToFile(self):\n        text = self.text_edit.toPlainText()\n        with open(&quot;bianqian.txt&quot;, &quot;w&quot;) as file:\n            file.write(text)\n\n    def isInBottomRightCorner(self, pos):\n        window_rect = self.rect()\n        corner_rect = QRect(window_rect.bottomRight() - QPoint(20, 20), QSize(20, 20))\n        return corner_rect.contains(pos)\n\n    def resizeWindow(self, pos):\n        new_size = QSize(pos.x() - self.geometry().left(), pos.y() - self.geometry().top())\n        self.resize(new_size)\n\n    def wheelEvent(self, event):\n        if event.modifiers() == Qt.ControlModifier:\n            delta = event.angleDelta().y()\n            if delta &gt; 0:\n                self.increaseFontSize()\n            else:\n                self.decreaseFontSize()\n\n    def increaseFontSize(self):\n        self.current_font_size += 1\n        self.text_edit.setFont(QFont(&quot;Arial&quot;, self.current_font_size))\n\n    def decreaseFontSize(self):\n        if self.current_font_size &gt; 1:\n            self.current_font_size -= 1\n            self.text_edit.setFont(QFont(&quot;Arial&quot;, self.current_font_size))\n\nif __name__ == '__main__':\n    app = QApplication(sys.argv)\n    radius = 15  # \u4fee\u6539\u5706\u89d2\u7684\u503c\n    window = RoundedWindow(radius)\n    window.show()\n\n    # \u8c03\u8bd5\uff1a\u68c0\u67e5\u7cfb\u7edf\u6258\u76d8\u662f\u5426\u53ef\u7528\n    if not QSystemTrayIcon.isSystemTrayAvailable():\n        QMessageBox.critical(None, &quot;\u9519\u8bef&quot;, &quot;\u7cfb\u7edf\u6258\u76d8\u4e0d\u53ef\u7528\uff01&quot;)\n        sys.exit(1)\n\n    # \u8c03\u8bd5\uff1a\u68c0\u67e5\u56fe\u6807\u662f\u5426\u52a0\u8f7d\u6210\u529f\n    if not window.tray_icon.isSystemTrayAvailable():\n        QMessageBox.critical(None, &quot;\u9519\u8bef&quot;, &quot;\u65e0\u6cd5\u52a0\u8f7d\u7cfb\u7edf\u6258\u76d8\u56fe\u6807\uff01&quot;)\n        sys.exit(1)\n\n    window.tray_icon.show()\n    sys.exit(app.exec_())<\/code><\/pre>\n<h2>\u8fd0\u884c<\/h2>\n<p><img decoding=\"async\" referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/bVc8wpE\" alt=\"image.png\" title=\"image.png\" loading=\"lazy\"><\/p>\n<h2>\u4fbf\u7b7e\u5c5e\u6027<\/h2>\n<p>1\u3001\u534a\u900f\u660e\u3001\u5706\u89d2\u3001\u6700\u5c0f\u5316\u3001\u7cfb\u7edf\u6258\u76d8<br \/>2\u3001\u6309\u4f4fCtrl\u4e0d\u653e\u6eda\u52a8\u9f20\u6807\u53ef\u6539\u53d8\u6587\u5b57\u5927\u5c0f<br \/>3\u3001\u7cfb\u7edf\u6258\u76d8\u9f20\u6807\u53f3\u952e\u5b8c\u5168\u9000\u51fa<br \/>4\u3001\u4fbf\u7b7e\u8f93\u5165\u7684\u6587\u5b57\u5b9e\u65f6\u66f4\u65b0\u81f3bianqian.txt<\/p>\n<h2>\u6253\u5305\u6210exe<\/h2>\n<p>\u8fd9\u4e48\u70b9\u4e1c\u897f\u6253\u5305\u6210exe\u5c45\u7136\u670934.9M\u8fd9\u4e48\u5927\uff01\u8fd9\u7edd\u5bf9\u4e0d\u662fPython\u7684\u95ee\u9898\uff0c\u662f\u6211\u6280\u672f\u7684\u95ee\u9898\u3002<\/p>\n<p><img decoding=\"async\" referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/bVc8wpG\" alt=\"image.png\" title=\"image.png\" loading=\"lazy\"><\/p>\n<p><a href=\"https:\/\/link.segmentfault.com\/?enc=3uOD0AZE40vvhbBkNdPdjQ%3D%3D.HqP4vRCIWxRSJ1THTJS6nigjqXBGXfTXlcPy48wiyupsbxvqXqqudyLeEvLa6Egs\" rel=\"nofollow\">https:\/\/likeyun.lanzout.com\/ifwBx10hhp8j<\/a><\/p>\n<h2>\u4f5c\u8005<\/h2>\n<p>TANKING<\/p>\n<p><a href=\"https:\/\/segmentfault.com\/a\/1190000043937884\">https:\/\/segmentfault.com\/a\/1190000043937884<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>ChatGPT\u7684\u7f16\u7a0b\u80fd\u529b\u4e5f\u4e0d\u5dee\uff0c\u672c\u6b21\u6211\u5c31\u4e00\u6b65\u4e00\u6b65\u63d0\u8981\u6c42\uff0c\u8ba9ChatGPT\u6839\u636e\u6211\u7684\u8981\u6c42\uff0c\u7f16\u5199\u51fa\u4e00\u4e2a\u53ef\u7528\u7684\uff0c\u53ef\u6253\u5305 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[4],"tags":[],"class_list":["post-10007999","post","type-post","status-publish","format-standard","hentry","category-share"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/posts\/10007999","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=10007999"}],"version-history":[{"count":0,"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/posts\/10007999\/revisions"}],"wp:attachment":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=10007999"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=10007999"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=10007999"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}