当悬停在 QLabel 中时,如何临时更改 link 的颜色?
How do I change the color of a link temporarily when hovered in a QLabel?
我想要以下行为:
我试过了,但它使 link 无法使用,并且只有当鼠标位于非常特定的位置时才会发生颜色变化:
from PyQt6.QtWidgets import QLabel, QApplication
from PyQt6.QtGui import QMouseEvent
import sys
class SpecialLinkLabel(QLabel):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.linkHovered.connect(self.change_link_color)
def mouseMoveEvent(self, event: QMouseEvent):
if 'color: #999999' in self.text():
self.setText(self.text().replace('color: #999999', 'color: #1597BB'))
return super().mouseMoveEvent(event)
def change_link_color(self):
if 'color: #1597BB' in self.text():
self.setText(self.text().replace('color: #1597BB', 'color: #999999'))
app = QApplication(sys.argv)
special_label = SpecialLinkLabel(
'Click <a href="https://random.dog/" style="color: #1597BB">here</a> for something special!</a>'
)
special_label.setOpenExternalLinks(True)
special_label.show()
sys.exit(app.exec())
不确定这是否可行。
你已经拥有了。 linkHovered
在发出时传递 URL 你只需要检查它是否包含任何 URL 或者它只是一个空字符串。如果它不是空字符串,则更改颜色,否则将其删除。
from PyQt5.QtWidgets import QLabel, QApplication
from PyQt5.QtGui import QMouseEvent, QCursor
from PyQt5 import QtCore
import sys
class SpecialLinkLabel(QLabel):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.link_text = 'Click <a href="https://google.com" style="color: {color}">here</a> for something special!</a>'
self.setText(self.link_text)
self.linkHovered.connect(self.change_link_color)
def change_link_color(self, link):
print("Hovered: ", repr(link))
self.setText(self.link_text.format(color="red") if link else self.link_text.format(color="blue"))
if link:
self.setCursor(QCursor(QtCore.Qt.PointingHandCursor))
else:
self.unsetCursor()
app = QApplication(sys.argv)
special_label = SpecialLinkLabel()
special_label.show()
sys.exit(app.exec())
我想要以下行为:
我试过了,但它使 link 无法使用,并且只有当鼠标位于非常特定的位置时才会发生颜色变化:
from PyQt6.QtWidgets import QLabel, QApplication
from PyQt6.QtGui import QMouseEvent
import sys
class SpecialLinkLabel(QLabel):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.linkHovered.connect(self.change_link_color)
def mouseMoveEvent(self, event: QMouseEvent):
if 'color: #999999' in self.text():
self.setText(self.text().replace('color: #999999', 'color: #1597BB'))
return super().mouseMoveEvent(event)
def change_link_color(self):
if 'color: #1597BB' in self.text():
self.setText(self.text().replace('color: #1597BB', 'color: #999999'))
app = QApplication(sys.argv)
special_label = SpecialLinkLabel(
'Click <a href="https://random.dog/" style="color: #1597BB">here</a> for something special!</a>'
)
special_label.setOpenExternalLinks(True)
special_label.show()
sys.exit(app.exec())
不确定这是否可行。
你已经拥有了。 linkHovered
在发出时传递 URL 你只需要检查它是否包含任何 URL 或者它只是一个空字符串。如果它不是空字符串,则更改颜色,否则将其删除。
from PyQt5.QtWidgets import QLabel, QApplication
from PyQt5.QtGui import QMouseEvent, QCursor
from PyQt5 import QtCore
import sys
class SpecialLinkLabel(QLabel):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.link_text = 'Click <a href="https://google.com" style="color: {color}">here</a> for something special!</a>'
self.setText(self.link_text)
self.linkHovered.connect(self.change_link_color)
def change_link_color(self, link):
print("Hovered: ", repr(link))
self.setText(self.link_text.format(color="red") if link else self.link_text.format(color="blue"))
if link:
self.setCursor(QCursor(QtCore.Qt.PointingHandCursor))
else:
self.unsetCursor()
app = QApplication(sys.argv)
special_label = SpecialLinkLabel()
special_label.show()
sys.exit(app.exec())