QDateEdit与日历的信号editingFinished()当日历弹出击

0

的问题

我有一个QDateEdit与日历启用了,我试图捕获的底编辑:

the_date = QDateEdit(...)
<some more initialization>
the_date.setCalendarPopup(True)
the_date.editingFinished.connect(checkDate)
...
def checkDate():
  print ("checkDate called")

如果我编辑的日期从键盘 checkDate() 被称为当焦点离开的部件通过跳格,打回报,等等。 但是,如果我点击下箭头部队,显示的日历, checkDate() 被称为时立即日历中出现的和再次当小组件失去了焦点。 我不想绑到userDateChanged因为这信号在每次按键在编辑框。

pyqt5 python qdateedit
2021-11-23 23:38:16
2
0

你可以保存历件从QDateTime和检查,如果这就是重点转移:

the_date = QDateEdit(...)
<some more initialization>
the_date.setCalendarPopup(True)
calendar = the_date.calendarWidget()
the_date.editingFinished.connect(checkDate)
...
def checkDate():
  if not calendar.hasFocus()
    # do whatever it was you wanted to do when QDateEdit finished editing
2021-11-23 23:38:16
0

QDateEdit继承QDateTimeEdit,这反过来继承自 QAbstractSpinBox,其中有的 keyboardTracking 酒店(默认):

如果键盘是跟踪残疾人,蓝色小方块来实现不发valueChanged()和textChanged()信号,同时输入。 它发出的信号后,在返回的关键是压,当键盘重点是丢失,或者当其他的蓝色小方块来实现的功能是使用,例如压制一个箭头的关键。

下面将提供你所需要的,而不检查的弹出重点:

    the_date.setKeyboardTracking(False)

考虑,同时解决方案可能是正确的,它始终最好检查的弹出窗口动态:

    if not the_date.calendarWidget().hasFocus():
        # ...
2021-11-24 00:14:48

谢谢,那是关键我失踪了。 我猜我需要看得更远的继承链
Llaves

回答之前完全测试。 QAbtractSpinBox 没有任 valueChanged()textChanged() 信号的,因此他们是不是继承的 QDateEdit. 属于那些信号 QSpinBox
Llaves

@Llaves,参考只是为了解释该行为的蓝色小方块来实现,它的工作在相同的方式为改变的信号QDateTimeEdit. 不同的是,它具有进一步的控制(的弹出窗口),这可能会触发的变化的信号,由于重点的变化, 如果 该日期已经改变。
musicamante

咬再通过继承链中,并想从字面上。 我一直在寻找 valueChangedtextChanged我错过了 dateChangedQDateTimeEdit. 感谢您的耐心。
Llaves

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................