QDateEdit z edycji dźwięków kalendarza zakończone() po kliknięciu okna podręcznego kalendarza

0

Pytanie

Mam QDateEdit z włączonym kalendarzem i staram się uchwycić koniec edycji:

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

Jeśli nie uderzać redagować datę z klawiatury, checkDate() wywoływana, gdy ostrość opuszcza widget za pomocą karty, naciśnięcie przycisku wstecz itp. Ale jeśli nacisnę strzałkę w dół, aby przyspieszyć wyświetlanie kalendarza, checkDate() wywoływana jest natychmiast po ukazaniu się kalendarza i ponownie, gdy widget traci ostrość. Nie chcę przywiązywać się do userDateChanged, bo to sygnalizuje o każdym naciśnięciu klawisza w oknie edycji.

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

Możesz zapisać widget kalendarza z QDateTime i sprawdzić czy nie przesunął się czy ostrość właśnie tam:

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 jest dziedziczona od QDateTimeEdit, który, z kolei, jest dziedziczona od QAbstractSpinBox, który makeyboardTracking właściwość (domyślnie włączone):

Jeśli śledzenie klawiatury wyłączone, spin-boks nie daje sygnał valueChanged() i TextChanged() podczas wprowadzania tekstu. On daje sygnały później, po naciśnięciu klawisza powrotu, w przypadku utraty fokusu klawiatury lub przy użyciu innych funkcji spinbox, na przykład, po naciśnięciu klawisza ze strzałką.

Poniżej znajdziesz to, czego potrzebujesz, bez sprawdzania ostrości okienko:

    the_date.setKeyboardTracking(False)

Należy pamiętać, że choć rozwiązanie może być dobre, zawsze lepiej sprawdzać wyskakującego okna dynamicznie:

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

dzięki, to jest to, czego mi brakowało. Myślę, że trzeba patrzeć dalej w łańcuchu dziedziczenia
Llaves

odpowiedział do pełnego testu. QAbtractSpinBox nie ma ani jednego, ani drugiego valueChanged() lub textChanged() sygnały, więc nie są dziedziczone QDateEdit. Sygnały te należą do QSpinBox
Llaves

@Llaves ten link jest przeznaczona tylko dla wyjaśnienia zachowania spin-boksu, to działa tak samo dla zmienionych sygnałów QDateTimeEdit. Różnica polega na tym, że ma dodatkowy element zarządzania (okienko), który może wywołać zmienione sygnały z powodu zmiany ostrości, jeśli przez ten czas data się zmieniła.
musicamante

Ponownie ugryziony przez łańcuch dziedziczenia i myślący dosłownie. Szukałem valueChanged lub textChangedSpóźniłem się dateChanged w QDateTimeEdit. Dziękuję za cierpliwość.
Llaves

W innych językach

Ta strona jest w innych językach

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