Программа "Определитель дней" (PyQt)

Программа позволяет

  • вычислять количество дней между двумя произвольными датами,
  • определять, какая будет дата через введенное количество дней от любой даты.
Интерфейс программы (PyQT)
from PyQt4 import QtGui, QtCore
import sys
import datetime
 
def radio_change():
        if radio1.isChecked():
                l3.hide()
                qty.hide()
                l2.show()
                date2.show()
        elif radio2.isChecked():
                l2.hide()
                date2.hide()
                l3.show()
                qty.show()
 
def date_days():
	if radio1.isChecked():
		a = date1.date() # type: <class 'PyQt4.QtCore.QDate'>
		a = a.toPyDate() # type: <class 'datetime.date'>
		b = date2.date()
		b = b.toPyDate()
		c = a-b
		c = str(c)
		if c[0] == '-': c = c[1:]
		edit_out.setText(c.split()[0])
	elif radio2.isChecked():
		a = date1.date()
		a = a.toPyDate()
		b = qty.value()
		b = datetime.timedelta(days=b)
		c = a+b
		c = str(c)		
		edit_out.setText(c)
 
app = QtGui.QApplication(sys.argv)
widget = QtGui.QWidget()
widget.setWindowTitle('Вычислитель дат и дней')
 
radio1 = QtGui.QRadioButton("Количество дней между датами")
radio2 = QtGui.QRadioButton("Дату через количество дней от установленной даты")
vbox = QtGui.QVBoxLayout()
vbox.addWidget(radio1)
vbox.addWidget(radio2)
box = QtGui.QGroupBox("Определить",widget)
box.setLayout(vbox)
box.setGeometry(10,10,450,80)
radio1.setChecked(True)
QtCore.QObject.connect(radio1,QtCore.SIGNAL("clicked()"),radio_change)
QtCore.QObject.connect(radio2,QtCore.SIGNAL("clicked()"),radio_change)
 
a = datetime.date.today()
 
l1 = QtGui.QLabel('<p align="right">Дата 1:</p>',widget)
date1 = QtGui.QDateEdit(a,widget)
l1.setGeometry(30,120,50,30)
date1.setGeometry(90,120,100,30)
date1.setDisplayFormat("yyyy-MM-dd")
date1.setDateRange(datetime.date(1,1,1),datetime.date(3000,1,1))
 
l2 = QtGui.QLabel('<p align="right">Дата 2:</p>',widget)
date2 = QtGui.QDateEdit(a,widget)
l2.setGeometry(30,150,50,30)
date2.setGeometry(90,150,100,30)
date2.setDisplayFormat("yyyy-MM-dd")
date1.setDateRange(datetime.date(1,1,1),datetime.date(3000,1,1))
 
l3 = QtGui.QLabel('<p align="right">Дни:</p>',widget)
qty = QtGui.QSpinBox(widget) # only integer
qty.setRange(-1000000,1000000)
l3.setGeometry(30,150,50,30)
qty.setGeometry(90,155,80,25)
l3.hide()
qty.hide()
 
button = QtGui.QPushButton("&Найти",widget)
button.setGeometry(20,190,60,30)
QtCore.QObject.connect(button,QtCore.SIGNAL("clicked()"),date_days)
 
edit_out = QtGui.QLineEdit(widget)
edit_out.setGeometry(90,190,90,30)
edit_out.setReadOnly(True) # but can do copy
edit_out.setFrame(False)
edit_out.setAlignment(QtCore.Qt.AlignCenter)
 
h = QtGui.QLabel('<p style="background-color:#eeeeee;"><center>\
<br> Поля можно править вручную. <br>\
 Чтобы узнать дату<br>\
 в прошлое от текущей надо<br>\
 ввести отрицательное число.<br></center></p>', widget)
h.setGeometry(200,90,250,150)
 
widget.show()
sys.exit(app.exec_())

 

Создано

Теги