QDateEdit cu calendar semnale editingFinished() atunci când calendar popup este apasat

0

Problema

Am o QDateEdit cu calendarul activate și sunt încercarea de a captura sfârșitul de editare:

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

Dacă aș edita data de la tastatura, checkDate() este numit atunci când se concentreze frunze widget-ul de tab, lovind schimb, etc. Dar dacă am faceți clic pe săgeata în jos care forțele de afișare a calendarului, checkDate() este numit imediat atunci când calendarul apare, și din nou, atunci când widget-ul pierde se concentreze. Nu vreau să lega la userDateChanged pentru că semnalele de pe fiecare apăsare de tastă în caseta de editare.

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

Puteți salva calendar widget-ul de QDateTime și verificați dacă asta e în cazul în care accentul s-a mutat:

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 moștenește de la QDateTimeEdit, care, la rândul său, moștenește de la QAbstractSpinBox, care are keyboardTracking proprietate (activat în mod implicit):

Dacă tastatura de urmărire este dezactivat, cîmp cu incrementare, nu emit valueChanged() și textChanged() semnalele în timp ce tastați. Acesta emite semnale mai târziu, atunci când tasta enter este apăsat, atunci când focalizarea tastaturii este pierdut, sau atunci când alte cîmp cu incrementare funcționalitate este folosit, de exemplu, apăsați o tastă săgeată.

Următoarele vă va oferi ceea ce aveți nevoie, fără a verifica popup focus:

    the_date.setKeyboardTracking(False)

Considerăm că, în timp ce soluția ar putea fi corectă, este întotdeauna mai bine pentru a verifica pentru pop-up dinamic:

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

multumesc, asta e piesa-cheie-mi lipsea. Cred că am nevoie să se uite mai departe moștenirea lanț
Llaves

răspuns pe deplin, înainte de testare. QAbtractSpinBox nu are nici valueChanged() sau textChanged() semnale, astfel încât acestea nu sunt moștenite de QDateEdit. Aceste semnale aparțin QSpinBox
Llaves

@Llaves de referință este doar pentru a explica comportamentul de cîmp cu incrementare, funcționează în același mod pentru schimbat semnalele de QDateTimeEdit. Diferența este că acesta are un control ulterior (pop-up), care ar putea declanșa schimbat semnalele din cauza accentul schimba, dacă data s-a schimbat între timp.
musicamante

Muscat din nou de moștenire lanț, și gândindu-se la propriu. Am fost în căutarea pentru valueChanged sau textChangedAm ratat dateChanged în QDateTimeEdit. Vă mulțumim pentru răbdare.
Llaves

În alte limbi

Această pagină este în alte limbi

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