2017-02-09 14 views
0

私はPythonのGUIでQDateEditコントロールを使用しています。私はキーボードだけでコントロールしたいので、上向きの矢印キーを押すと、31-jan-2000から01-feb-2000に変更されます。Python QDateEditインクリメント

現在は、年、月、日を独立して変更していますが、ブロックのように変更したい場合は、暦日ごとに変更する必要があります。

gifでは、コントロールの動作を見ることができましたが、私は日、月、年を別々に変更しましたが、「日付全体」として変更することはできませんでした。

ありがとうございます。

enter image description here

+0

[OK]を、私は入れ – driconmax

+0

....あなたがこれまでに何をしたか私たちを見ます私が何を意味するかを示すgif。ありがとうございました。 – anvelascos

答えて

1

stepByを再実装することで、デフォルトの動作をオーバーライド可能です:

class DateEdit(QtGui.QDateEdit):  
    def stepBy(self, steps): 
     self.setDateTime(self.dateTime().addDays(steps)) 

カーソル年でなければならないので、しかし、これは、完全ではないかなり作業を行いますセクションを使用して連続的な増分を取得します。 月のセクションにある場合は、その年のすべての月/日だけ増分されます。 日のセクションにある場合は、その月のすべての日にのみ増加します。個人的には、これを「フィーチャ」として扱い、それをそのままにしておくと思います(実装はとても簡単なので)。

年のセクションにカーソルを強制的に置こうとすると、手動での編集が妨げられるため、使い勝手が大幅に低下します。しかし、私はあなたが手動編集を提供するために、カレンダーのポップアップを使用して、読み取り専用のライン編集を作ることができたとします

class DateEdit(QtGui.QDateEdit): 
    def __init__(self, *args, **kwargs): 
     super(DateEdit, self).__init__(*args, **kwargs) 
     self.setCalendarPopup(True) 
     edit = self.lineEdit() 
     edit.setReadOnly(True) 
     edit.selectionChanged.connect(lambda edit=edit: edit.end(False)) 

    def stepBy(self, steps): 
     self.setDateTime(self.dateTime().addDays(steps)) 
関連する問題