QDateEdit s kalendářem signály editingFinished (), když calendar popup je klepnutí

0

Otázka

Mám QDateEdit s kalendářem povoleno a snažím se zachytit konec úpravy:

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

Pokud jsem upravit data z klávesnice, checkDate() je volána, když se zaměřují listy widget tabbing, bít se vrátit, atd. Ale když jsem klepněte na šipku dolů, která se síly, zobrazení kalendáře, checkDate() se nazývá ihned, jakmile se zobrazí kalendář, a znovu, když widget ztratí fokus. Nechci se uvázat ke userDateChanged, protože signály, že na každý stisk klávesy v editačním okně.

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

Můžete uložit kalendář widget z QDateTime a zkontrolujte, zda to je, kde se pozornost přesunula:

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 dědí z QDateTimeEdit, která zase dědí z QAbstractSpinBox, který má keyboardTracking majetek (povoleno ve výchozím nastavení):

Pokud klávesnice sledování je zakázáno, spinbox nebude vydávat valueChanged() a textChanged() signály při psaní. To vysílá signály později, při návratu je stisknuto tlačítko, při zaměření klávesnice je ztracen, nebo když se jiné spinbox funkce se používá, např. stisknutí klávesy se šipkou.

Následující bude poskytovat to, co potřebujete, bez kontroly popup zaměření:

    the_date.setKeyboardTracking(False)

Pamatujte, že zatímco vaše řešení by mohlo být správné, je to vždy lepší zkontrolovat popup dynamicky:

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

díky, to je klíčový kus, co jsem byl chybí. Asi budu muset hledat dál nahoru dědictví řetězce
Llaves

odpověděl, než se plně testování. QAbtractSpinBox nemá ani valueChanged() nebo textChanged() signály, takže nejsou zděděny QDateEdit. Tyto signály patří QSpinBox
Llaves

@Llaves, že odkaz je jen pro vysvětlení chování spinbox, to funguje stejným způsobem změněné signály QDateTimeEdit. Rozdíl je v tom, že má další kontrolu (popup), které by mohly vyvolat změnil signály vzhledem k zaměření změnit, pokud datum se mezitím změnilo.
musicamante

Pokousaný opět o dědictví řetězce, a to doslova. Hledal jsem valueChanged nebo textChangedJsem vynechal dateChanged v QDateTimeEdit. Díky za vaši trpělivost.
Llaves

V jiných jazycích

Tato stránka je v jiných jazycích

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