Takvim açılır penceresine tıklandığında takvim sinyalleri editingFinished () ile QDateEdit

0

Soru

Takvim etkinleştirilmiş bir QDateEdit var ve düzenlemenin sonunu yakalamaya çalışıyorum:

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

Tarihi klavyeden düzenlersem, checkDate() odak, widget'ı sekme yaparak, return tuşuna basarak vb. Bıraktığında çağrılır. Ancak, takvimin görüntülenmesini zorlayan aşağı oka tıklarsam, checkDate() takvim göründüğünde hemen çağrılır ve widget odağı kaybettiğinde tekrar çağrılır. userDateChanged ile bağlantı kurmak istemiyorum çünkü bu, düzenleme kutusundaki her tuş vuruşunda sinyal veriyor.

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

Takvim widget'ını qdatetime'dan kaydedebilir ve odağın kaydırıldığı yer olup olmadığını kontrol edebilirsiniz:

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'ten devralır ve bu da Qabstractspinbox'tan devralır.keyboardTracking özellik (varsayılan: etkin):

Klavye izleme devre dışı bırakılırsa, döndürme kutusu yazarken valueChanged() ve textChanged() sinyallerini yaymaz. Daha sonra, return tuşuna basıldığında, klavye odağı kaybolduğunda veya başka bir spinbox işlevi kullanıldığında, örneğin bir ok tuşuna basıldığında sinyalleri yayar.

Aşağıdakiler, açılır pencere odağını kontrol etmeden ihtiyacınız olanı sağlayacaktır:

    the_date.setKeyboardTracking(False)

Çözümünüz doğru olsa da, açılır pencereyi dinamik olarak kontrol etmenin her zaman daha iyi olduğunu düşünün:

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

teşekkürler, kaçırdığım anahtar parça buydu. Sanırım miras zincirine daha fazla bakmam gerekiyor.
Llaves

tamamen test etmeden önce cevap verdi. QAbtractSpinBox ikisine de sahip değil valueChanged() veya textChanged() sinyaller, bu yüzden onlar tarafından miras alınmaz QDateEdit. Bu sinyaller aşağıdakilere aittir QSpinBox
Llaves

@Llaves bu referans sadece spinbox'ın davranışını açıklamak içindir, qdatetimeedit'in değiştirilmiş sinyalleri için aynı şekilde çalışır. Aradaki fark, bu arada tarih değiştiyse, odak değişikliği nedeniyle değiştirilen sinyalleri tetikleyebilecek başka bir kontrole (açılır pencere) sahip olmasıdır.
musicamante

Miras zinciri tarafından tekrar ısırıldı ve kelimenin tam anlamıyla düşündü. Ben arıyordum valueChanged veya textChanged Kaçırdım dateChanged içinde QDateTimeEdit. Sabrınız için teşekkürler.
Llaves

Diğer dillerde

Bu sayfa diğer dillerde

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