QDateEdit s kalendárom signály editingFinished (), keď sa kalendár popup je klikli

0

Otázka

Mám QDateEdit s kalendárneho povolené a som snaží zachytiť konci úprava:

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

Ak som sa upraviť dátum, od klávesnice, checkDate() sa nazýva keď zamerať listy widget podľa tabbing, biť vrátiť, atď. Ale ak kliknem na šípku nadol, ktorá sily zobrazenie kalendára, checkDate() sa nazýva hneď, keď kalendár sa zobrazí, a znova, keď widget stratí zameranie. Nechcem sa viazať na userDateChanged preto, že signály na každom stlačení tlačidla v textovom poli.

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

Môžete uložiť v kalendári widget z QDateTime a skontrolujte, či je, kde sa pozornosť sústredila:

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 sa dedí z QDateTimeEdit, ktorá zase sa dedí z QAbstractSpinBox, ktorý má keyboardTracking majetku (v predvolenom nastavení povolená):

Ak klávesnice sledovania je vypnutá, spinbox nevysiela valueChanged() a textChanged() signály, zatiaľ čo písať. Vysiela signály neskôr, keď vrátiť tlačidlo je stlačené, keď klávesnica zameranie sa stratí, alebo pri iných spinbox funkcie sa používa, napr. klávesov so šípkou.

Nasledujúce poskytne to, čo potrebujete, bez toho, kontrola popup zameranie:

    the_date.setKeyboardTracking(False)

Domnievajú sa, že keď vaše riešenie by mohlo byť správne, je vždy lepšie zistiť, či sa v popup dynamicky:

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

vďaka, to je kľúčové kus mi chýbala. Myslím, že je potrebné hľadať ďalej až dedičstva reťazca
Llaves

odpovedal pred plne testovanie. QAbtractSpinBox nemá buď valueChanged() alebo textChanged() signály, takže nie sú zdedená QDateEdit. Tieto signály patria QSpinBox
Llaves

@Llaves, že odkaz je len vysvetliť správanie spinbox, funguje to rovnakým spôsobom pre zmenu signálov QDateTimeEdit. Rozdiel je, že má ďalšiu kontrolu (popup), ktoré by mohli vyvolať zmeniť signály vzhľadom na zameranie zmeny, ak dátum zmenilo v medziobdobí.
musicamante

Uhryznutie opäť dedičstva reťazca, a myslel to doslova. Hľadal som valueChanged alebo textChangedSom vynechal dateChanged v QDateTimeEdit. Ďakujeme za vašu trpezlivosť.
Llaves

V iných jazykoch

Táto stránka je v iných jazykoch

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