Skip to content

Commit db85182

Browse files
committed
bug fix:软件图标的8px圆角只有左上角有;
bug fix:<点击软件可切换启用/不启用>和<双击可以打开软件>,这两个功能在使用上有冲突,因为在click start时就切换了软件的启用状态,所以当用户想双击开启时,会同时切换软件的启用状态;
1 parent 32db064 commit db85182

File tree

2 files changed

+35
-16
lines changed

2 files changed

+35
-16
lines changed

ui/app_card.py

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,12 @@ def __init__(self, icon, name, path, parent_launcher, enabled=True):
1616
self.enabled = enabled
1717
self.is_running = False
1818

19+
# 用于解决单击双击冲突的定时器
20+
self.click_timer = QTimer()
21+
self.click_timer.setSingleShot(True)
22+
self.click_timer.timeout.connect(self.handle_single_click)
23+
self.double_click_detected = False
24+
1925
# 设置固定大小
2026
self.setFixedSize(CARD_WIDTH, CARD_HEIGHT)
2127

@@ -70,9 +76,9 @@ def __init__(self, icon, name, path, parent_launcher, enabled=True):
7076
# 将删除按钮定位到右上角
7177
self.delete_btn.move(self.width() - 22, 2)
7278

73-
# 单击切换选中状态,双击启动应用
79+
# 重写鼠标事件处理,解决单击双击冲突
7480
self.mousePressEvent = self.on_mouse_press
75-
self.mouseDoubleClickEvent = self.launch_app
81+
self.mouseDoubleClickEvent = self.on_double_click
7682

7783
# 创建状态指示器(绿色圆点)
7884
self.status_indicator = QLabel(self)
@@ -146,8 +152,26 @@ def update_style(self):
146152
""")
147153

148154
def on_mouse_press(self, event):
149-
"""处理鼠标单击事件,切换选中状态"""
155+
"""处理鼠标按下事件,延迟处理单击避免与双击冲突"""
156+
if event.button() == Qt.LeftButton:
157+
# 重置双击检测标志
158+
self.double_click_detected = False
159+
# 启动延迟定时器,200ms后处理单击(如果没有双击)
160+
self.click_timer.start(200)
161+
162+
def on_double_click(self, event):
163+
"""处理双击事件,启动应用"""
150164
if event.button() == Qt.LeftButton:
165+
# 设置双击检测标志,取消单击处理
166+
self.double_click_detected = True
167+
self.click_timer.stop()
168+
# 启动应用
169+
self.launch_app(event)
170+
171+
def handle_single_click(self):
172+
"""处理延迟的单击事件,切换启用状态"""
173+
# 只有在没有双击的情况下才处理单击
174+
if not self.double_click_detected:
151175
# 切换选中状态
152176
self.enabled = not self.enabled
153177
self.update_style()
@@ -192,7 +216,7 @@ def update_running_status(self):
192216
except Exception as e:
193217
print(f"[状态更新失败] {self.path}: {str(e)}")
194218

195-
def launch_app(self, event):
219+
def launch_app(self, event=None):
196220
"""启动应用"""
197221
if not launch_application(self.path):
198222
QMessageBox.warning(self, "启动失败", f"无法启动应用:\n{self.path}")

utils/icon_utils.py

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ def get_app_icon(path):
170170

171171

172172
def create_rounded_icon(icon, size, radius=8):
173-
"""创建圆角图标"""
173+
"""创建圆角图标(修复所有角都是圆角)"""
174174
if icon.isNull():
175175
return icon
176176

@@ -185,24 +185,19 @@ def create_rounded_icon(icon, size, radius=8):
185185

186186
painter = QPainter(rounded_pixmap)
187187
painter.setRenderHint(QPainter.Antialiasing)
188+
painter.setRenderHint(QPainter.SmoothPixmapTransform)
188189

189-
# 创建圆角路径
190+
# 使用更精确的方法创建圆角路径
191+
from PyQt5.QtCore import QRectF
192+
rect = QRectF(0, 0, size, size)
190193
path = QPainterPath()
191-
path.addRoundedRect(0, 0, size, size, radius, radius)
194+
path.addRoundedRect(rect, radius, radius, Qt.AbsoluteSize)
192195

193196
# 设置裁剪区域为圆角
194197
painter.setClipPath(path)
195198

196199
# 绘制原始图标
197-
painter.drawPixmap(0, 0, pixmap)
198-
199-
# # 绘制圆角边框(可选)
200-
# painter.setClipping(False) # 取消裁剪,绘制边框
201-
# from PyQt5.QtGui import QPen
202-
# pen = QPen(Qt.lightGray, 1)
203-
# painter.setPen(pen)
204-
# painter.setBrush(Qt.NoBrush)
205-
# painter.drawRoundedRect(0, 0, size-1, size-1, radius, radius)
200+
painter.drawPixmap(0, 0, size, size, pixmap)
206201

207202
painter.end()
208203

0 commit comments

Comments
 (0)