From 92eaff3afa1c5bb77d2335bbcc81221ec7c4bbbb Mon Sep 17 00:00:00 2001 From: yuruo Date: Tue, 28 May 2024 15:44:14 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20main.py:=20=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E6=97=A0=E7=94=A8=E7=9A=84=E4=BB=A3=E7=A0=81=E5=92=8C=E5=87=BD?= =?UTF-8?q?=E6=95=B0=E8=B0=83=E7=94=A8=20=F0=9F=93=9D=20chat=5Fpage.py:=20?= =?UTF-8?q?=E7=A8=8D=E5=BE=AE=E8=B0=83=E6=95=B4=E7=AA=97=E5=8F=A3=E6=BF=80?= =?UTF-8?q?=E6=B4=BB=E6=97=B6=E7=9A=84=E8=A1=8C=E4=B8=BA=EF=BC=8C=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E4=B8=80=E4=BA=9B=E6=B3=A8=E9=87=8A=20=F0=9F=94=A7=20?= =?UTF-8?q?global=5Fkeyboard=5Flisten.py:=20=E6=9B=B4=E6=94=B9=E9=BC=A0?= =?UTF-8?q?=E6=A0=87=E4=B8=AD=E9=94=AE=E4=BF=A1=E5=8F=B7=E7=9A=84=E4=BC=A0?= =?UTF-8?q?=E9=80=92=E6=96=B9=E5=BC=8F=20=F0=9F=94=A7=20action=5Flist=5Fit?= =?UTF-8?q?em.py:=20=E7=A7=BB=E9=99=A4=E4=B8=8D=E5=BF=85=E8=A6=81=E7=9A=84?= =?UTF-8?q?=E8=BE=93=E5=87=BA=20=F0=9F=93=9D=20chat=5Fpage.py:=20=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E7=AA=97=E5=8F=A3=E6=BF=80=E6=B4=BB=E6=97=B6=E7=9A=84?= =?UTF-8?q?=E8=A1=8C=E4=B8=BA=EF=BC=8C=E6=B3=A8=E9=87=8A=E6=8E=89=E4=B8=8D?= =?UTF-8?q?=E5=BF=85=E8=A6=81=E7=9A=84=E4=BB=A3=E7=A0=81=20=F0=9F=94=A7=20?= =?UTF-8?q?chat=5Fpage.py:=20=E8=B0=83=E6=95=B4=E7=AA=97=E5=8F=A3=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E6=96=B9=E6=B3=95=EF=BC=8C=E4=BF=9D=E8=AF=81=E7=AA=97?= =?UTF-8?q?=E5=8F=A3=E5=A7=8B=E7=BB=88=E5=A4=84=E4=BA=8E=E6=9C=80=E4=B8=8A?= =?UTF-8?q?=E5=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- actions/action_list_item.py | 1 - main.py | 3 +-- pages/chat_page.py | 48 ++++++++++++++++----------------- utils/global_keyboard_listen.py | 5 ++-- 4 files changed, 26 insertions(+), 31 deletions(-) diff --git a/actions/action_list_item.py b/actions/action_list_item.py index 8f4c1df..524d9e8 100644 --- a/actions/action_list_item.py +++ b/actions/action_list_item.py @@ -46,7 +46,6 @@ class ActionListItem(QListWidgetItem): self.get_parent().setItemWidget(self, widget) def keyPressEvent(self, event): - print(event.key()) super().keyPressEvent(event) # 根据子元素数量调整当前元素尺寸大小 diff --git a/main.py b/main.py index d35dc97..39f54b9 100644 --- a/main.py +++ b/main.py @@ -15,8 +15,7 @@ class AutoMate: def main(self): Config() self.page = ChatPage() - - self.page.show_window(WindowUtil.get_window_title()) + self.page.show_window() diff --git a/pages/chat_page.py b/pages/chat_page.py index 6c3714d..2a5be92 100644 --- a/pages/chat_page.py +++ b/pages/chat_page.py @@ -2,14 +2,13 @@ import traceback from PyQt6 import QtWidgets, QtCore from PyQt6.QtCore import QThread, pyqtSignal, QEvent, Qt from PyQt6.QtGui import QPixmap, QIcon -from PyQt6.QtWidgets import QSystemTrayIcon, QMainWindow, QLabel, QTextEdit, QListWidgetItem, QSpacerItem, QSizePolicy, QAbstractItemView, QListWidget, QMenu +from PyQt6.QtWidgets import QApplication, QSystemTrayIcon, QMainWindow, QLabel, QTextEdit, QListWidgetItem, QSpacerItem, QSizePolicy, QAbstractItemView, QListWidget, QMenu from actions.action_util import ActionUtil from agent.woker_agent import WorkerAgent from pages.config_page import ConfigPage from pages.plugin_page import PluginPage from utils.global_keyboard_listen import GlobalKeyboardListen from utils.qt_util import QtUtil -from utils.window_util import WindowUtil class ActionItems(QListWidgetItem): def __init__(self, action, chat_page): @@ -95,10 +94,9 @@ class ChatList(QListWidget): class WorkerThread(QThread): finished_signal = pyqtSignal(str) - def __init__(self, text, chat_page): + def __init__(self, text): QThread.__init__(self) self.text = text - self.chat_page = chat_page def run(self): try: @@ -132,7 +130,7 @@ class ChatInput(QTextEdit): def keyPressEvent(self, event): if event.key() == Qt.Key.Key_Return: self.chat_page.new_conversation(f"{self.toPlainText()}", "user") - self.worker_thread = WorkerThread(self.toPlainText(), self.chat_page) + self.worker_thread = WorkerThread(self.toPlainText()) # 清空输入框 self.clear() # 连接线程的 finished 信号到槽函数,增加对话UI @@ -163,13 +161,13 @@ class ChatInput(QTextEdit): def mousePressEvent(self, event): self.chat_page.action_list.set_visibility(False) - # 窗口激活时,输入框的焦点设置到这里 - def event(self, event): - if event.type() == QEvent.Type.WindowActivate: - # 当窗口激活时,智子根据上下文推送合适的工具 - self.setFocus() - return True - return super().event(event) + # # 窗口激活时,输入框的焦点设置到这里 + # def event(self, event): + # if event.type() == QEvent.Type.WindowActivate: + # # 当窗口激活时,智子根据上下文推送合适的工具 + # self.setFocus() + # return True + # return super().event(event) interface_ui = QtUtil.load_ui_type("chat_page.ui") class ChatPage(QMainWindow, interface_ui): @@ -185,9 +183,14 @@ class ChatPage(QMainWindow, interface_ui): ) self.setWindowFlags(self.windowFlags() & ~QtCore.Qt.WindowType.WindowStaysOnTopHint) + def event(self, event): + if event.type() == QEvent.Type.WindowDeactivate: + print("窗口失去焦点") + self.hide() + return super().event(event) + def setup_up(self): - # self = QtUtil.load_ui("chat_page.ui") self.chat_input = ChatInput(parent=self.centralwidget, chat_page=self) self.chat_list = ChatList(parent=self.centralwidget, chat_page=self) self.action_list = ActionList(parent=self.centralwidget, chat_page=self) @@ -197,39 +200,34 @@ class ChatPage(QMainWindow, interface_ui): self.plugin = self.plugin self.plugin.triggered.connect(self.open_plugin_page) - # 设置托盘 self.trayIcon = QSystemTrayIcon(self) # 创建一个系统托盘图标对象 - # self.trayIcon.setIcon(self.windowIcon()) # 设置托盘图标为应用程序的窗口图标 self.trayIcon.setIcon(QIcon(QtUtil.get_icon("logo.ico"))) # 设置托盘图标为指定的图片文件 self.trayIcon.show() # 显示托盘图标 self.trayIcon.setToolTip('双击显示窗口') - self.setWindowFlags(Qt.WindowType.Tool) # 设置Qt.Tool标志:隐藏任务栏图标,这里需要先设置!!! - self.setWindowFlag(Qt.WindowType.FramelessWindowHint) # 设置无边框 # 由于我们创建的是无边框的工具窗口,所以这里设置一个托盘的激活功能 self.trayIcon.activated.connect(self.onTrayIconActivated) # 当托盘图标被激活时,调用onTrayIconActivated函数 # 添加右键菜单 self.contextMenu = QMenu(self) # 创建自定义的上下文菜单 - self.contextMenu.addAction("显示窗口", lambda: self.show_window(WindowUtil.get_window_title())) # 添加动作:显示窗口 + self.contextMenu.addAction("显示窗口", self.show_window) # 添加动作:显示窗口 self.contextMenu.addSeparator() # 添加分线 - self.contextMenu.addAction("退出", self.close) # 添加动作:关闭程序 + self.contextMenu.addAction("退出", QApplication.quit) # 添加动作:关闭程序 # 将上下文菜单与托盘图标关联起来 self.trayIcon.setContextMenu(self.contextMenu) + self.setWindowFlag(Qt.WindowType.WindowStaysOnTopHint, True) # 监听鼠标中键,然后启动窗口 self.global_keyboard_listen = GlobalKeyboardListen() self.global_keyboard_listen.mouse_middle_signal.connect(self.show_window) self.global_keyboard_listen.start() - def show_window(self, current_window_title): - print(current_window_title) - self.showNormal() # 显示窗口的正常模式 - self.activateWindow() # 激活窗口,使其获取焦点 - + def show_window(self): + self.show() + self.activateWindow() def onTrayIconActivated(self, reason): # 当托盘图标被激活时,这个函数会被调用 if reason == QSystemTrayIcon.ActivationReason.DoubleClick: # 如果激活原因是双击托盘图标 - self.show_window(WindowUtil.get_window_title()) + self.show_window() def open_plugin_page(self): self.plugin_page = PluginPage() diff --git a/utils/global_keyboard_listen.py b/utils/global_keyboard_listen.py index 70bcc89..4a2ba43 100644 --- a/utils/global_keyboard_listen.py +++ b/utils/global_keyboard_listen.py @@ -4,7 +4,7 @@ from PyQt6.QtCore import pyqtSignal, QThread from utils.window_util import WindowUtil class GlobalKeyboardListen(QThread): - mouse_middle_signal = pyqtSignal(str) + mouse_middle_signal = pyqtSignal() def __init__(self): super().__init__() @@ -12,8 +12,7 @@ class GlobalKeyboardListen(QThread): def on_click(x, y, button, pressed): if button == mouse.Button.middle: if pressed: - window_title = WindowUtil.get_window_title() - self.mouse_middle_signal.emit(window_title) + self.mouse_middle_signal.emit() # 创建鼠标监听器 with mouse.Listener(on_click=on_click) as mouse_listener: mouse_listener.join() \ No newline at end of file