如何捕获 PyQt 中 Qt 小部件派生的小部件中的所有鼠标事件?

发布于 2024-08-11 05:45:00 字数 123 浏览 4 评论 0原文

特别是,我继承自 QCalendarWidget,我想重写 mousePressEvent 方法来过滤允许选择的日期(不相交的集合,而不是简单的范围)。但是当我重写该方法时,它不会捕获任何将发送到日历内的子小部件的事件。我该怎么做?

In particular, I'm inheriting from QCalendarWidget and I want to override the mousePressEvent method to filter what dates are allowed to be selected (disjoint set, not a simple range). But when I override the method, it doesn't catch any events that are going to child widgets inside the calendar. How can I do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

才能让你更想念 2024-08-18 05:45:00

我很惊讶覆盖 mousePressEvent 对于 QCalendarWidget 不起作用。它适用于大多数其他小部件。查看 QCalendarWidget 的文档后,我注意到有一个点击信号。如果你连接它就可以了。

import sys

from PyQt4 import QtGui, QtCore

class MyCalendar(QtGui.QCalendarWidget):
    def __init__(self):
        QtGui.QCalendarWidget.__init__(self)
        self.connect(self, QtCore.SIGNAL("clicked(QDate)"), self.on_click)
        self.prev_date = self.selectedDate()

    def on_click(self, date):
        if self.should_ignore(date):
            self.setSelectedDate(self.prev_date)
            return
        self.prev_date = date

    def should_ignore(self, date):
        """ Do whatever here """
        return date.day() > 15

app = QtGui.QApplication(sys.argv)
cal = MyCalendar()
cal.show()
app.exec_()

我以前从未检查过 QCalendarWidget。非常可爱的小部件。

I'm surprised that overriding mousePressEvent doesn't work for a QCalendarWidget. It works for most other widgets. After looking at the docs for QCalendarWidget, I notice there's a clicked signal. If you connect that it works.

import sys

from PyQt4 import QtGui, QtCore

class MyCalendar(QtGui.QCalendarWidget):
    def __init__(self):
        QtGui.QCalendarWidget.__init__(self)
        self.connect(self, QtCore.SIGNAL("clicked(QDate)"), self.on_click)
        self.prev_date = self.selectedDate()

    def on_click(self, date):
        if self.should_ignore(date):
            self.setSelectedDate(self.prev_date)
            return
        self.prev_date = date

    def should_ignore(self, date):
        """ Do whatever here """
        return date.day() > 15

app = QtGui.QApplication(sys.argv)
cal = MyCalendar()
cal.show()
app.exec_()

I'd never checked out QCalendarWidget before. Pretty sweet little widget.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文