我正在创建一个小型PyQt应用程序,并且陷入了MouseOver效应。
我有一个QMainWindow,它有三个按钮,名为createProfileButton、downloadPackagesButton和installPackagesButton。这些都是QPushButton型的
现在我已经创建了一个标签,当有人将鼠标悬停在这些按钮上时,它将保存文本。我查了一下文件,知道它可以用过载的方式来处理。
世界银行(
按钮的方法。这意味着我必须为这三个按钮中的每一个扩展QPushButton,而每个按钮都必须扩展为一个类的对象。我试着寻找鼠标悬停或从按钮上移开时发出的信号,但没有结果。我在网上得到的帮助就是实现了这两种方法。
扩展一个类并创建一个类不是过火了吗?信号会很好,不幸的是,我找不到任何信号。
因此,我检查了整个继承层次结构,没有发现FocusIn和FocusOut的信号。
发布于 2010-02-03 18:42:28
正如您所述,此功能不存在信号。你有两个基本的选择。
选项1 -子类:
class FocusEmittingButton(QPushButton):
#...
def focusInEvent(self, event):
# emit your signal然后,可以在客户端代码中连接到该信号。此外,如果有必要,可以使用designer的Promote To特性将每个按钮提升到FocusEmittingButton类型。您只需要子类一次,然后确保不同的按钮都是相同的类型。
选项2 -使用QApplication.focusChanged
您还可以利用QApplication.focusChanged(oldQWidget, newQWidget)。这样做,您就不需要子类和覆盖焦点事件。相反,您可以连接到QApplication.focusChanged信号,然后在处理程序中进行响应。
发布于 2010-07-17 22:25:29
在父部件中还有另一种接收焦点信号的方法。可以添加事件筛选器:
class MyParent(QWidget):
def __init__(self):
#...
self.mybutton.installEventFilter()
def eventFilter(self, obj, event):
if obj is self.mybutton and event.type() == QEvent.FocusOut:
#...
return QWidget.eventFilter(self, obj, event)https://stackoverflow.com/questions/2194158
复制相似问题