Example #1
0
    def addDateToBill(self, complaintno: int):
        if (len(self.ui.quotationsTbl.selectionModel().selectedRows())) == 0:
            return
        complaintno = int(
            self.ui.quotationsTbl.selectionModel().selectedRows()[0].data())
        addDateDialogBox = QDialog()
        addDateDialogBox.setGeometry(500, 500, 300, 120)
        # monthComBox.move(60, 50)
        selectDateBox = QDateEdit(addDateDialogBox)
        selectDateBox.setDate(datetime.datetime.now())
        selectDateBox.setDisplayFormat("d/M/yyyy")
        # selectDateBox.
        enterBtn = QPushButton("Enter", addDateDialogBox)
        enterBtn.clicked.connect(lambda: self.addDateToExcelAndDatabase(
            complaintno,
            selectDateBox.date().toString("d/MMM/yyyy")))

        enterBtn.move(150, 50)
        okButton = QPushButton("OK", addDateDialogBox)
        okButton.clicked.connect(lambda: addDateDialogBox.close())

        okButton.move(150, 90)
        selectDateBox.move(60, 50)

        addDateDialogBox.setWindowTitle("Enter Date to Complaint No.: " +
                                        str(complaintno))
        addDateDialogBox.setWindowModality(Qt.ApplicationModal)
        addDateDialogBox.exec_()
Example #2
0
    def init_interface(self):
        font = QFont("SansSerif", 14)

        QToolTip.setFont(font)

        btn_no_action = QPushButton("Button: No action", self)
        btn_no_action.setToolTip("Button tooltip on hover.")
        btn_no_action.resize(150, 50)  # width height
        btn_no_action.move(0, 0)  # left right

        btn_quit = QPushButton("Button: Quit app", self)
        btn_quit.resize(150, 50)
        btn_quit.move(0, 55)
        btn_quit.clicked.connect(QCoreApplication.instance().quit)

        btn_call_func = QPushButton("Button: Call func", self)
        btn_call_func.resize(150, 50)
        btn_call_func.move(0, 55 * 2)
        btn_call_func.clicked.connect(self.say_hello)

        textbox = QLineEdit(self)
        textbox.setObjectName("textbox_obj")
        textbox.move(160, 5)
        textbox.resize(150, 50)

        btn_read_text = QPushButton("Button: Read text", self)
        btn_read_text.resize(150, 50)
        btn_read_text.move(0, 55 * 3)
        btn_read_text.clicked.connect(self.read_text)

        date = QDateEdit(self)
        date.move(0, 55 * 4)

        self.setToolTip("Window tooltip on hover.")
        self.setGeometry(0, 0, 350, 350)  # left top width height
        self.setWindowTitle("Window title here.")
        self.show()
Example #3
0
class WindowClass(QWidget):
    def __init__(self, parent=None):

        super(WindowClass, self).__init__(parent)
        self.btn = QPushButton(self)  #self参数则让该按钮显示当前窗体中
        self.btn.setText("点击获取日期信息")
        self.btn.clicked.connect(self.showdate)

        self.dateEdit = QDateEdit(self)
        self.timeEdit = QTimeEdit(self)
        self.dateTimeEdit = QDateTimeEdit(self)
        self.dateEdit.setCalendarPopup(True)
        #self.timeEdit.setCalendarPopup(True)#弹出界面是失效的注意;
        #self.dateTimeEdit.setCalendarPopup(True)#时间是无法选择的
        self.dateEdit.move(10, 200)
        self.timeEdit.move(10, 100)
        self.dateTimeEdit.move(10, 300)
        self.dateEdit.setDisplayFormat("yyyy-MM-dd")
        self.timeEdit.setDisplayFormat("HH:mm:ss")
        self.dateTimeEdit.setDisplayFormat("yyyy-MM-dd HH:mm:ss")
        self.setWindowTitle("QDateEdit和QDateTimeEdit控件使用")

    def showdate(self):
        print(self.dateEdit.text())
Example #4
0
class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        con = sqlite3.connect("Launch_Data.db")
        self.cur = con.cursor()
        self.setGeometry(0, 0, 1500, 800)
        self.setWindowTitle('Моделирование движения ракеты')
        layout = QVBoxLayout(
        )  # установка стиля расположения UI элементов вертикально

        # создание интерфэйса
        # Поле для ввода широты
        self.Latitudelabel = QLabel(self)
        self.Latitudelabel.setText("Latitude")
        self.Latitudelabel.move(20, 30)
        self.Latitudelabel.resize(120, 20)
        layout.addWidget(self.Latitudelabel)

        self.LatitudeInput = QLineEdit(self)
        self.LatitudeInput.setText('70')
        self.LatitudeInput.move(80, 30)
        self.LatitudeInput.resize(125, 20)
        layout.addWidget(self.LatitudeInput)
        # при изменений значения поля ввода вызывается функция adjustLatitude
        self.LatitudeInput.textChanged.connect(self.adjustLatitude)

        # поля для ввода долготы
        self.LongitudeLabel = QLabel(self)
        self.LongitudeLabel.setText("Longitude")
        self.LongitudeLabel.move(20, 60)
        layout.addWidget(self.LongitudeLabel)

        self.LongitudeInput = QLineEdit(self)
        self.LongitudeInput.setText('-90')
        self.LongitudeInput.move(80, 60)
        self.LongitudeInput.resize(125, 20)
        layout.addWidget(self.LongitudeInput)
        self.LongitudeInput.textChanged.connect(self.adjustLongitude)

        # поля для ввода высоты над уровнем моря
        self.ElevationLabel = QLabel(self)
        self.ElevationLabel.setText("Elevation")
        self.ElevationLabel.move(20, 90)
        layout.addWidget(self.ElevationLabel)

        self.ElevationInput = QLineEdit(self)
        self.ElevationInput.setText('560')
        self.ElevationInput.move(80, 90)
        self.ElevationInput.resize(125, 20)
        layout.addWidget(self.ElevationInput)

        # поля для ввода угла наклона ракеты
        self.InclinationLabel = QLabel(self)
        self.InclinationLabel.setText("Inclination")
        layout.addWidget(self.InclinationLabel)

        self.InclinationInput = QLineEdit(self)
        self.InclinationInput.setText('85')
        layout.addWidget(self.InclinationInput)
        self.InclinationInput.textChanged.connect(self.adjustInclination)

        # поля для ввода даты запуска
        self.DateLabel = QLabel(self)
        self.DateLabel.move(20, 120)
        self.DateLabel.setText("Date")
        layout.addWidget(self.DateLabel)

        # текущяя дата
        now = datetime.datetime.now()
        self.DateInput = QDateEdit(self)
        self.DateInput.setDate(now)
        self.DateInput.move(80, 120)
        self.DateInput.resize(125, 20)
        layout.addWidget(self.DateInput)
        self.DateInput.dateTimeChanged.connect(self.adjustDate)

        # кнопка для получения графиков об атмосферных условиях в ту дату
        self.EnvironmentInfo = QPushButton("Environment")
        self.EnvironmentInfo.move(20, 150)
        layout.addWidget(self.EnvironmentInfo)
        self.EnvironmentInfo.clicked.connect(self.EnvironmentD)

        # группирование все радио кнопок для выбора ввида мотора
        self.motorgroup = QButtonGroup()

        self.m7450 = QRadioButton("Cesaroni 7450M2505")
        self.m7450.move(20, 180)
        self.motorgroup.addButton(self.m7450)
        layout.addWidget(self.m7450)
        # заранее активирование одной радио кнопки
        self.m7450.setEnabled(True)
        # каждый раз при выборе этой радикнопки вызывается функция для установки текущего выбора
        self.m7450.toggled.connect(lambda: self.setMotor(self.m7450.text()))

        self.j360 = QRadioButton("Cesaroni J360")
        self.j360.move(20, 210)
        self.motorgroup.addButton(self.j360)
        layout.addWidget(self.j360)
        self.j360.toggled.connect(lambda: self.setMotor(self.j360.text()))

        self.m1300 = QRadioButton("Cesaroni M1300")
        self.motorgroup.addButton(self.m1300)
        layout.addWidget(self.m1300)
        self.m1300.toggled.connect(lambda: self.setMotor(self.m1300.text()))

        self.m1400 = QRadioButton("Cesaroni M1400")
        self.motorgroup.addButton(self.m1400)
        layout.addWidget(self.m1400)
        self.m1400.toggled.connect(lambda: self.setMotor(self.m1400.text()))

        self.m1540 = QRadioButton("Cesaroni M1540")
        self.motorgroup.addButton(self.m1540)
        layout.addWidget(self.m1540)
        self.m1540.toggled.connect(lambda: self.setMotor(self.m1540.text()))

        self.m1670 = QRadioButton("Cesaroni M1670")
        self.motorgroup.addButton(self.m1670)
        layout.addWidget(self.m1670)
        self.m1670.toggled.connect(lambda: self.setMotor(self.m1670.text()))

        self.m3100 = QRadioButton("Cesaroni M3100")
        self.motorgroup.addButton(self.m3100)
        layout.addWidget(self.m3100)
        self.m3100.toggled.connect(lambda: self.setMotor(self.m3100.text()))

        self.j115 = QRadioButton("Hypertek J115")
        self.motorgroup.addButton(self.j115)
        layout.addWidget(self.j115)
        self.j115.toggled.connect(lambda: self.setMotor(self.j115.text()))

        # кнопка для вывода графика сопротивления со временем мотора
        self.motorinfo = QPushButton("Motor")
        layout.addWidget(self.motorinfo)
        # при нажатий вызывается функция для вывода графика
        self.motorinfo.clicked.connect(self.motorInfo)

        # группирование всех радио кнопок для выбора ракеты
        self.rocketgroup = QButtonGroup()

        self.caldene = QRadioButton("Caldene")
        self.rocketgroup.addButton(self.caldene)
        layout.addWidget(self.caldene)
        self.caldene.toggled.connect(
            lambda: self.setRocket(self.caldene.text()))
        # заранее выбор одной из радио кнопок
        self.caldene.setEnabled(True)

        # создание радио кнопок для выбора вида ракеты
        self.calisto = QRadioButton("Calisto")
        self.rocketgroup.addButton(self.calisto)
        layout.addWidget(self.calisto)
        # при выборе вызов функций меняющий текущий вид ракеты
        self.calisto.toggled.connect(
            lambda: self.setRocket(self.calisto.text()))

        self.europia = QRadioButton("Euporia")
        self.rocketgroup.addButton(self.europia)
        layout.addWidget(self.europia)
        self.europia.toggled.connect(
            lambda: self.setRocket(self.europia.text()))

        self.jiboia = QRadioButton("Jiboia")
        self.rocketgroup.addButton(self.jiboia)
        layout.addWidget(self.jiboia)
        self.jiboia.toggled.connect(lambda: self.setRocket(self.jiboia.text()))

        self.keron = QRadioButton("Keron")
        self.rocketgroup.addButton(self.keron)
        layout.addWidget(self.keron)
        self.keron.toggled.connect(lambda: self.setRocket(self.keron.text()))

        self.mandioca = QRadioButton("Mandioca")
        self.rocketgroup.addButton(self.mandioca)
        layout.addWidget(self.mandioca)
        self.mandioca.toggled.connect(
            lambda: self.setRocket(self.mandioca.text()))

        # кнопка при нажатий выдаёт график траекторий полёта ракеты
        self.trajectory = QPushButton("Trajectory")
        layout.addWidget(self.trajectory)
        self.trajectory.clicked.connect(self.GetTrajectory)

        # кнопка при нажатий выдаёт график кинематических данных полёта
        self.kinematics = QPushButton("Kinematics data")
        layout.addWidget(self.kinematics)
        self.kinematics.clicked.connect(self.GetKinematics)

        # кнопка при нажатий выдаёт график скоростный данных
        self.altitude = QPushButton("Altitude data")
        layout.addWidget(self.altitude)
        self.altitude.clicked.connect(self.GetAltitude)

        # кнопка при нажатий выдаёт график данных об энергий во время полёта
        self.energy = QPushButton("Energy Data")
        layout.addWidget(self.energy)
        self.energy.clicked.connect(self.GetEnergy)

        # "растягиваем" расположение чтобы элементы UI оказались на верхней стороне окна
        layout.addStretch(1)
        # добавляем новый стиль горизонтального расположения
        horlayout = QHBoxLayout()
        # "растягиваем" горизонтальное расположение чтобы UI оказался на правой стороне
        horlayout.addStretch(1)
        # соедениям оба стиля расположения в одно
        horlayout.addLayout(layout)
        # устанавливаем расположение
        self.setLayout(horlayout)

    # функция проверяет поле широты на попадание в диапозон -90,90 иначе меняет значение на полях
    def adjustLatitude(self):
        latitude = self.LatitudeInput.text()
        if latitude != '' and latitude != '-':
            latitude = int(latitude)
            if latitude < -90:
                self.LatitudeInput.setText("-90")
            elif latitude > 90:
                self.LatitudeInput.setText("90")

    # функция проверяет поле долготы на попадание в диапозон -180,180 иначе меняет значение на полях
    def adjustLongitude(self):
        longitude = self.LongitudeInput.text()
        if longitude != '' and longitude != '-':
            longitude = int(longitude)
            if longitude < -180:
                self.LongitudeInput.setText("-180")
            elif longitude > 180:
                self.LongitudeInput.setText("180")

    # функция проверяет поле угла наклона ракеты на попадание в диапозон 0,90 иначе меняет значение на полях
    def adjustInclination(self):
        inclination = self.InclinationInput.text()
        if inclination != '' and inclination != '-':
            inclination = int(inclination)
            if inclination < 0:
                self.InclinationInput.setText("0")
            elif inclination > 90:
                self.InclinationInput.setText("90")

    # функция проверяет введенный год на попадание в диапозон 2017,2020 иначе меняет значение года
    def adjustDate(self):
        date = self.DateInput.date()
        if date.year() < 2017:
            date.setDate(2017, date.month(), date.day())
        elif date.year() > 2020:
            date.setDate(2020, date.month(), date.day())
        self.DateInput.setDate(date)

    # функция выводящее график об атмосферных данных в введенную дату и в введенных координатах
    def EnvironmentD(self):
        self.setEnvironment()
        self.Env.info()

    # функция инициализируещее атмосферные данные в модуле Environment
    def setEnvironment(self):
        self.longitude = int(self.LongitudeInput.text())
        self.elevation = int(self.ElevationInput.text())
        self.date = self.DateInput.date()
        self.latitude = int(self.LatitudeInput.text())

        # подстраивание значений под диапозоны имеющихся данных
        if self.latitude > -90 and self.latitude < -30:
            self.Env = Environment(
                railLength=5.2,
                date=(self.date.year() - 2, self.date.month(), self.date.day(),
                      6),
                latitude=-7.5 + 3 * (-90 - self.latitude) / -60,
                longitude=324 + (2.25 * (-180 - self.longitude) / -360),
                elevation=self.elevation)
            # получение значения файла о погоде из базы данных
            weatherfile = self.cur.execute(
                '''SELECT File_Path FROM WeatherFiles WHERE File_Path LIKE "%CLBI%" AND Year=?''',
                (self.date.year(), )).fetchone()

            self.Env.setAtmosphericModel(type='Reanalysis',
                                         file=weatherfile[0],
                                         dictionary='ECMWF')
        elif self.latitude >= -30 and self.latitude < 30:
            self.Env = Environment(
                railLength=5.2,
                date=(self.date.year() - 2, self.date.month(), self.date.day(),
                      6),
                latitude=-3.75 + 5.25 * (-30 - self.latitude) / -60,
                longitude=314.25 + 3 * (-180 - self.longitude) / -360,
                elevation=self.elevation)

            weatherfile = self.cur.execute(
                '''SELECT File_Path FROM WeatherFiles WHERE File_Path LIKE "%Alcantara%" AND Year=?''',
                (self.date.year(), )).fetchone()

            self.Env.setAtmosphericModel(type='Reanalysis',
                                         file=weatherfile[0],
                                         dictionary='ECMWF')
        elif self.latitude >= 30 and self.latitude <= 90:
            self.Env = Environment(
                railLength=5.2,
                date=(self.date.year() - 2, self.date.month(), self.date.day(),
                      6),
                latitude=31.5 + 3 * (90 - self.latitude) / 60,
                longitude=252 + 2.25 * (-180 - self.longitude) / -360,
                elevation=self.elevation)
            weatherfile = self.cur.execute(
                '''SELECT File_Path FROM WeatherFiles WHERE File_Path LIKE "%Spaceport%" AND Year=?''',
                (self.date.year(), )).fetchone()

            self.Env.setAtmosphericModel(type='Reanalysis',
                                         file=weatherfile[0],
                                         dictionary='ECMWF')

    # функция назначает имя текущего выбранного мотора из группы радиокнопок
    def setMotor(self, name):
        name = name.split()
        name = '_'.join(name)
        self.motorName = name

    # функция инициализирует модель ракеты внутри модуля SolidMotor
    def setMotorModel(self):
        motorfile = self.cur.execute(
            'SELECT File_Path FROM Motors WHERE Motor_Name=?',
            (self.motorName, )).fetchone()
        motorfile = str(motorfile[0])
        self.motor_model = SolidMotor(thrustSource=motorfile,
                                      burnOut=3.9,
                                      grainNumber=5,
                                      grainSeparation=5 / 1000,
                                      grainDensity=1815,
                                      grainOuterRadius=33 / 1000,
                                      grainInitialInnerRadius=15 / 1000,
                                      grainInitialHeight=120 / 1000,
                                      nozzleRadius=33 / 1000,
                                      throatRadius=11 / 1000,
                                      interpolationMethod='linear')

    # функция выводит график сопротивления мотора
    def motorInfo(self):
        self.setMotorModel()
        self.motor_model.info()

    # функция назначает текущее имя выбранного типа ракеты
    def setRocket(self, name):
        self.rocketName = name

    # функция инициализирует модель ракеты с помощью модуля Rocket
    def setRocketModel(self):
        self.inclination = int(self.InclinationInput.text())
        # получение файла толчка из базы данных
        thrustcurve = self.cur.execute(
            'SELECT File_Path FROM Rockets WHERE Rocket_Name=?',
            (self.rocketName, )).fetchone()
        thrustcurve = str(thrustcurve[0])
        self.RocketModel = Rocket(
            motor=self.motor_model,
            radius=127 / 2000,
            mass=19.197 - 2.956,
            inertiaI=6.60,
            inertiaZ=0.0351,
            distanceRocketNozzle=-1.255,
            distanceRocketPropellant=-0.85704,
            powerOffDrag="data/calisto/powerOffDragCurve.csv",
            powerOnDrag=thrustcurve)
        self.RocketModel.setRailButtons([0.2, -0.5])
        # добавление деталей в модель ракеты по модулю Rocket
        NoseCone = self.RocketModel.addNose(length=0.55829,
                                            kind="vonKarman",
                                            distanceToCM=0.71971)

        FinSet = self.RocketModel.addFins(4,
                                          span=0.100,
                                          rootChord=0.120,
                                          tipChord=0.040,
                                          distanceToCM=-1.04956)

        Tail = self.RocketModel.addTail(topRadius=0.0635,
                                        bottomRadius=0.0435,
                                        length=0.060,
                                        distanceToCM=-1.194656)
        # добавление парашютов
        Main = self.RocketModel.addParachute('Main',
                                             CdS=10.0,
                                             trigger=self.mainTrigger,
                                             samplingRate=105,
                                             lag=1.5,
                                             noise=(0, 8.3, 0.5))

        Drogue = self.RocketModel.addParachute('Drogue',
                                               CdS=1.0,
                                               trigger=self.drogueTrigger,
                                               samplingRate=105,
                                               lag=1.5,
                                               noise=(0, 8.3, 0.5))

        self.TestFlight = Flight(rocket=self.RocketModel,
                                 environment=self.Env,
                                 inclination=self.inclination,
                                 heading=0)

    # функции активаций парашютов
    def drogueTrigger(self, p, y):
        return True if y[5] < 0 else False

    def mainTrigger(self, p, y):
        return True if y[5] < 0 and y[2] < 800 else False

    # функция выдаёт траекторию ракеты
    def GetTrajectory(self):
        self.setMotorModel()
        self.setEnvironment()
        self.setRocketModel()
        self.TestFlight.plot3dTrajectory()

    # функция выдаёт график кинематических данных
    def GetKinematics(self):
        self.setMotorModel()
        self.setEnvironment()
        self.setRocketModel()
        self.TestFlight.plotLinearKinematicsData()

    # функция выдаёт график скоростных данных
    def GetAltitude(self):
        self.setMotorModel()
        self.setEnvironment()
        self.setRocketModel()
        self.TestFlight.plotAttitudeData()

    # функция выдаёт график энергий во время полёта
    def GetEnergy(self):
        self.setMotorModel()
        self.setEnvironment()
        self.setRocketModel()
        self.TestFlight.plotEnergyData()
Example #5
0
class MainApp(QMainWindow):
    """Esta será la aplicación principal"""
    def __init__(self, parent=None, *args):
        super(MainApp, self).__init__(parent=parent)
        '''
		configuración de la pantalla
		'''
        self.setFixedSize(
            850,
            600)  #El tamaño por defecto de la pantalla sin permitir ajustes
        self.setWindowTitle("Parámetros de la fotografía aérea"
                            )  #Establece el título de la ventana
        self.setStyleSheet("background-color: rgb(85, 255, 127)"
                           )  #Establece el color de fondo
        self.setWindowIcon(QIcon(
            "iconos/main_window.png"))  #se establece un ícono para la pantalla
        '''
		Configuración del título
		'''
        self.label_t = QLabel("Definir los parámetros de la fotografía aérea",
                              self)  #instanciamos un label
        self.label_t.setGeometry(
            0, 20, 800, 40)  #definimos las propiedades geométricas del label
        self.label_t.setAlignment(
            Qt.AlignHCenter)  #Aliniamos el label en el centro de la pantalla
        self.label_t.setFont(QFont(
            'Times', 24))  #Definimos la fuente del texto del label
        '''
		Configuración de los labels e inputs
		'''

        #label 1 entidad
        self.label_e = QLabel("Entidad de donde proviene la fotografía:", self)
        self.label_e.setGeometry(50, 100, 800, 30)
        self.label_e.setAlignment(Qt.AlignLeft)
        self.label_e.setFont(QFont('Times', 12))
        #input 1 entidad
        self.input_e = QLineEdit(
            self)  #instanciamos un objeto para realizar una entrada
        self.input_e.move(600, 100)  #movemos el input a estas coordenadas
        self.input_e.resize(200, 25)  #Definimos el tamaño de el campo de texto
        self.input_e.setStyleSheet(
            "background-color: #fff")  #el color del campo de texto será blanco
        self.input_e.setMaxLength(
            50)  #definimos la cantidad maxima de carácteres a recibir

        #label 2 número de vuelo
        self.label_n_v = QLabel("Número de vuelo:", self)
        self.label_n_v.setGeometry(50, 150, 800, 30)
        self.label_n_v.setAlignment(Qt.AlignLeft)
        self.label_n_v.setFont(QFont('Times', 12))
        #input 2 número de vuelo
        self.input_n_v = QLineEdit(self)
        self.input_n_v.move(600, 150)
        self.input_n_v.resize(200, 25)
        self.input_n_v.setStyleSheet("background-color: #fff")
        self.input_n_v.setValidator(
            QIntValidator(0, 30000, self)
        )  #Validamos que solo se acepten valores numéricos con un rango de 0 a 30000

        #label 3 faja de vuelo
        self.label_f_v = QLabel("Faja de vuelo:", self)
        self.label_f_v.setGeometry(50, 200, 800, 30)
        self.label_f_v.setAlignment(Qt.AlignLeft)
        self.label_f_v.setFont(QFont('Times', 12))
        #input 3 faja de vuelo
        self.input_f_v = QLineEdit(self)
        self.input_f_v.move(600, 200)
        self.input_f_v.resize(200, 25)
        self.input_f_v.setStyleSheet("background-color: #fff")
        self.input_f_v.setMaxLength(50)

        #label 4 escala de la fotografía
        self.label_e_f = QLabel("Escala de la fotografía 1:", self)
        self.label_e_f.setGeometry(50, 250, 800, 30)
        self.label_e_f.setAlignment(Qt.AlignLeft)
        self.label_e_f.setFont(QFont('Times', 12))
        #input 4 escala de la fotografía
        self.input_e_f = QLineEdit(self)
        self.input_e_f.move(600, 250)
        self.input_e_f.resize(200, 25)
        self.input_e_f.setStyleSheet("background-color: #fff")
        self.input_e_f.setValidator(QIntValidator(0, 300000, self))

        #label 5 altura del vuelo
        self.label_a_v = QLabel("Altura del vuelo (en metros):", self)
        self.label_a_v.setGeometry(50, 300, 800, 30)
        self.label_a_v.setAlignment(Qt.AlignLeft)
        self.label_a_v.setFont(QFont('Times', 12))
        #input 5 altura del vuelo
        self.input_a_v = QLineEdit(self)
        self.input_a_v.move(600, 300)
        self.input_a_v.resize(200, 25)
        self.input_a_v.setStyleSheet("background-color: #fff")
        self.input_a_v.setValidator(QIntValidator(0, 300000, self))

        #label 6 distancia focal
        self.label_d_f = QLabel("Distancia focal:", self)
        self.label_d_f.setGeometry(50, 350, 800, 30)
        self.label_d_f.setAlignment(Qt.AlignLeft)
        self.label_d_f.setFont(QFont('Times', 12))
        #input 6 distancia focal
        self.input_d_f = QLineEdit(self)
        self.input_d_f.move(600, 350)
        self.input_d_f.resize(200, 25)
        self.input_d_f.setStyleSheet("background-color: #fff")
        self.input_d_f.setValidator(QDoubleValidator(0.0, 1000000.0, 4, self))

        #label 7 altura del terreno sobre el nivel del mar
        self.label_a_t_m = QLabel("Altura del terreno/nivel del mar:", self)
        self.label_a_t_m.setGeometry(50, 400, 800, 30)
        self.label_a_t_m.setAlignment(Qt.AlignLeft)
        self.label_a_t_m.setFont(QFont('Times', 12))
        #input 7 altura del terreno sobre el nivel del mar
        self.input_a_t_m = QLineEdit(self)
        self.input_a_t_m.move(600, 400)
        self.input_a_t_m.resize(200, 25)
        self.input_a_t_m.setStyleSheet("background-color: #fff")
        self.input_a_t_m.setValidator(QIntValidator(0, 300000, self))

        #label 8 fecha en que se tomn_v la fotografía
        self.label_f_f = QLabel("Fecha en que se tomó la fotografía:", self)
        self.label_f_f.setGeometry(50, 450, 800, 30)
        self.label_f_f.setAlignment(Qt.AlignLeft)
        self.label_f_f.setFont(QFont('Times', 12))
        #input 8 fecha en que se tomó la fotografía
        self.input_f_f = QDateEdit(self)
        self.input_f_f.move(600, 450)
        self.input_f_f.resize(200, 25)
        self.input_f_f.setStyleSheet("background-color: #fff")
        '''
		configuración del boton
		'''
        #boton de aceptar
        self.btn_acept = QPushButton("Aceptar", self)  #instanciamos un boton
        self.btn_acept.setGeometry(0, 0, 100, 50)
        self.btn_acept.move(375, 500)
        self.btn_acept.setStyleSheet("background-color: rgb(255, 255, 0)")
        self.btn_acept.clicked.connect(
            self.slot_aceptar
        )  #definimos que evento realizará al ser presionado

        self.label_er = QLabel(
            "", self
        )  #definimos un label de error en caso de no todos los campos estén llenos
        self.label_er.setGeometry(20, 575, 800, 30)
        self.label_er.setAlignment(Qt.AlignHCenter)
        self.label_er.setFont(QFont('Times', 12))
        self.label_er.setStyleSheet("color: red")

        #Este es el evento que se va a ejecutar si se da en aceptar
    def slot_aceptar(self):
        #Creamos una lista con los textos de los campos para verificiar si están vacíos o no
        self.campos = []
        self.campos.extend([
            self.input_e.text(),
            self.input_n_v.text(),
            self.input_f_v.text(),
            self.input_e_f.text(),
            self.input_a_v.text(),
            self.input_d_f.text(),
            self.input_a_t_m.text(),
            self.input_f_f.text()
        ])

        #Recorremos la lista anteriormente creada
        for i in self.campos:
            '''
			ya que cada valor de i es un texto podemos preguntar si ese texto esta vacío o no
			de tal forma que aquí preguntamos si el texto es falso, es decir no hay texto, entonces
			mande un mensaje de error
			'''
            if not i:
                return self.label_er.setText(
                    "Uno o más campos están vacíos, Vuelve a intentarlo")
        else:
            '''
			Una vez verificado que los campos están llenos, validamos que el valor de la altura 
			del terreno sobre el mar es mayor a la altura de la fotografía, si esto no es así
			mandamos un mensaje de error pidiendo que se ingresen valores validos
			'''
            if int(self.campos[4]) >= int(self.campos[-2]):
                return self.label_er.setText(
                    "La altura del vuelo no puede ser mayor o igual a la altura del terreno sobre  el mar"
                )
            else:
                #Creamos un objeto de tipo CalApp para posteriormente mostrarla
                self.w = CalApp(
                    self.campos)  #Mandamos la lista de campos como parámetro
                self.w.show()  #mostramos la pantalla
Example #6
0
class nuevoCliente(QDialog):
    def __init__(self, parent=None):
        super(nuevoCliente, self).__init__()

        self.setWindowIcon(QIcon("Imagenes/new.jpg"))
        self.setWindowTitle("Новый клиент")
        self.setWindowFlags(Qt.WindowCloseButtonHint | Qt.MSWindowsFixedSizeDialogHint)
        self.setFixedSize(320, 478)

        self.initUI()

    def initUI(self):

        self.groupBoxDatosGenerales = QGroupBox("Новый клиент", self)
        self.groupBoxDatosGenerales.setFixedSize(300, 223)
        self.groupBoxDatosGenerales.move(10, 13)

        labelNombre = QLabel("<font color='#FF3300'>*</font> Имя",
                             self.groupBoxDatosGenerales)
        labelNombre.move(15, 28)

        self.lineEditNombre = QLineEdit(self.groupBoxDatosGenerales)
        self.lineEditNombre.setValidator(QRegExpValidator(QRegExp("[a-zA-Z ]+"),
                                                          self.lineEditNombre))
        self.lineEditNombre.setMaxLength(30)
        self.lineEditNombre.setFixedWidth(270)
        self.lineEditNombre.setFocus()
        self.lineEditNombre.move(15, 46)

        labelApellido = QLabel("<font color='#FF3300'>*</font> Фамилия",
                               self.groupBoxDatosGenerales)
        labelApellido.move(15, 74)

        self.lineEditApellido = QLineEdit(self.groupBoxDatosGenerales)
        self.lineEditApellido.setValidator(QRegExpValidator(QRegExp("[a-zA-Z ]+"),
                                                            self.lineEditApellido))
        self.lineEditApellido.setMaxLength(30)
        self.lineEditApellido.setFixedWidth(270)
        self.lineEditApellido.move(15, 92)

        labelSexo = QLabel("<font color='#FF3300'>*</font> Пол", self.groupBoxDatosGenerales)
        labelSexo.move(15, 120)

        self.comboBoxSexo = QComboBox(self.groupBoxDatosGenerales)
        self.comboBoxSexo.addItems(["М", "Ж"])
        self.comboBoxSexo.setCurrentIndex(-1)
        self.comboBoxSexo.setFixedWidth(270)
        self.comboBoxSexo.move(15, 138)

        labelFechaNacimiento = QLabel("<font color='#FF3300'>*</font> Дата рождения",
                                      self.groupBoxDatosGenerales)
        labelFechaNacimiento.move(15, 166)

        self.dateEditFechaNacimiento = QDateEdit(self.groupBoxDatosGenerales)
        self.dateEditFechaNacimiento.setDate(QDate.currentDate())
        self.dateEditFechaNacimiento.setMaximumDate(QDate.currentDate())
        self.dateEditFechaNacimiento.setDisplayFormat("dd/MM/yyyy")
        self.dateEditFechaNacimiento.setCalendarPopup(True)
        self.dateEditFechaNacimiento.setCursor(Qt.PointingHandCursor)
        self.dateEditFechaNacimiento.setFixedWidth(270)
        self.dateEditFechaNacimiento.move(15, 184)

        self.groupBoxUbicacion = QGroupBox("Проживание", self)
        self.groupBoxUbicacion.setFixedSize(300, 86)
        self.groupBoxUbicacion.move(10, 250)

        labelPais = QLabel("<font color='#FF3300'>*</font> Страна", self.groupBoxUbicacion)
        labelPais.move(15, 28)

        self.lineEditPais = QLineEdit(self.groupBoxUbicacion)
        self.lineEditPais.setMaxLength(30)
        self.lineEditPais.setFixedWidth(270)
        self.lineEditPais.move(15, 48)

        self.groupBoxContacto = QGroupBox("Контакты", self)
        self.groupBoxContacto.setFixedSize(300, 86)
        self.groupBoxContacto.move(10, 350)

        labelTelCel = QLabel("<font color='#FF3300'>*</font> Номер телефона",
                             self.groupBoxContacto)
        labelTelCel.move(15, 28)

        self.lineEditTelCel = QLineEdit(self.groupBoxContacto)
        self.lineEditTelCel.setInputMask("9999999999999999; ")
        self.lineEditTelCel.setFixedWidth(270)
        self.lineEditTelCel.move(15, 48)

        # ==========================================================

        labelInformacion = QLabel("<font color='#FF3300'>*</font> Обязательные поля.", self)
        labelInformacion.move(10, 445)

        buttonAceptar = QPushButton("Сохранить", self)
        buttonAceptar.setCursor(Qt.PointingHandCursor)
        buttonAceptar.move(154, 445)

        buttonCerrar = QPushButton("Закрыть", self)
        buttonCerrar.setCursor(Qt.PointingHandCursor)
        buttonCerrar.move(236, 445)

        buttonAceptar.clicked.connect(self.Aceptar)
        buttonCerrar.clicked.connect(self.close)

    def Aceptar(self):
        nombre = " ".join(self.lineEditNombre.text().split()).title()
        apellido = " ".join(self.lineEditApellido.text().split()).title()
        sexo = self.comboBoxSexo.currentText()
        fecNacimiento = self.dateEditFechaNacimiento.text()
        pais = " ".join(self.lineEditPais.text().split()).title()
        telCel = self.lineEditTelCel.text()

        if not nombre:
            self.lineEditNombre.setFocus()
        elif not apellido:
            self.lineEditApellido.setFocus()
        elif not sexo:
            self.comboBoxSexo.setFocus()
        elif not pais:
            self.lineEditPais.setFocus()
        elif not telCel:
            self.lineEditTelCel.setFocus()
        else:
            if QFile.exists("DB_SIACLE/DB_SIACLE.db"):
                conexion = sqlite3.connect("DB_SIACLE/DB_SIACLE.db")
                cursor = conexion.cursor()

                try:
                    datos = [nombre, apellido, sexo, fecNacimiento, pais, telCel]
                    cursor.execute("INSERT INTO CLIENTES (NOMBRE, APELLIDO, SEXO, "
                                   "FECHA_NACIMIENTO, PAIS, TELEFONO_CELULAR) "
                                   "VALUES (?,?,?,?,?,?)", datos)

                    conexion.commit()
                    conexion.close()

                    self.lineEditNombre.clear()
                    self.lineEditApellido.clear()
                    self.comboBoxSexo.setCurrentIndex(-1)
                    self.dateEditFechaNacimiento.setDate(QDate.currentDate())
                    self.lineEditPais.clear()
                    self.lineEditTelCel.clear()

                    QMessageBox.information(self, "Новый клиент", "Клиент зарегестрирован.   ",
                                            QMessageBox.Ok)
                except:
                    conexion.close()
                    QMessageBox.critical(self, "Новый клиент", "Неизвестная ошибка.   ",
                                         QMessageBox.Ok)
            else:
                QMessageBox.critical(self, "Новый клиент", "База данных не найдена."
                                                           "   ", QMessageBox.Ok)

            self.lineEditNombre.setFocus()
Example #7
0
class actualizarCliente(QDialog):
    def __init__(self, indice, datos, parent=None):
        super(actualizarCliente, self).__init__()

        self.parent = parent
        self.indice = indice
        self.datos = datos

        self.setWindowIcon(QIcon("Imagenes/ch.png"))
        self.setWindowTitle("Обновление клиента")
        self.setWindowFlags(Qt.WindowCloseButtonHint | Qt.MSWindowsFixedSizeDialogHint)
        self.setFixedSize(320, 478)

        self.initUI()

    def initUI(self):

        self.groupBoxDatosGenerales = QGroupBox("Общие данные ", self)
        self.groupBoxDatosGenerales.setFixedSize(300, 223)
        self.groupBoxDatosGenerales.move(10, 13)

        labelNombre = QLabel("<font color='#FF3300'>*</font> Имя",
                             self.groupBoxDatosGenerales)
        labelNombre.move(15, 28)

        self.lineEditNombre = QLineEdit(self.groupBoxDatosGenerales)
        self.lineEditNombre.setValidator(QRegExpValidator(QRegExp("[a-zA-Z ]+"),
                                                          self.lineEditNombre))
        self.lineEditNombre.setMaxLength(30)
        self.lineEditNombre.setFixedWidth(270)
        self.lineEditNombre.setFocus()
        self.lineEditNombre.move(15, 46)

        labelApellido = QLabel("<font color='#FF3300'>*</font> Фамилия",
                               self.groupBoxDatosGenerales)
        labelApellido.move(15, 74)

        self.lineEditApellido = QLineEdit(self.groupBoxDatosGenerales)
        self.lineEditApellido.setValidator(QRegExpValidator(QRegExp("[a-zA-Z ]+"),
                                                            self.lineEditApellido))
        self.lineEditApellido.setMaxLength(30)
        self.lineEditApellido.setFixedWidth(270)
        self.lineEditApellido.move(15, 92)

        labelSexo = QLabel("<font color='#FF3300'>*</font> Пол", self.groupBoxDatosGenerales)
        labelSexo.move(15, 120)

        self.comboBoxSexo = QComboBox(self.groupBoxDatosGenerales)
        self.comboBoxSexo.addItems(["М", "Ж"])
        self.comboBoxSexo.setCurrentIndex(-1)
        self.comboBoxSexo.setFixedWidth(270)
        self.comboBoxSexo.move(15, 138)

        labelFechaNacimiento = QLabel("<font color='#FF3300'>*</font> Дата рождения",
                                      self.groupBoxDatosGenerales)
        labelFechaNacimiento.move(15, 166)

        self.dateEditFechaNacimiento = QDateEdit(self.groupBoxDatosGenerales)
        self.dateEditFechaNacimiento.setDate(QDate.currentDate())
        self.dateEditFechaNacimiento.setMaximumDate(QDate.currentDate())
        self.dateEditFechaNacimiento.setDisplayFormat("dd/MM/yyyy")
        self.dateEditFechaNacimiento.setCalendarPopup(True)
        self.dateEditFechaNacimiento.setCursor(Qt.PointingHandCursor)
        self.dateEditFechaNacimiento.setFixedWidth(270)
        self.dateEditFechaNacimiento.move(15, 184)

        self.groupBoxUbicacion = QGroupBox("Проживание", self)
        self.groupBoxUbicacion.setFixedSize(300, 86)
        self.groupBoxUbicacion.move(10, 250)

        labelPais = QLabel("<font color='#FF3300'>*</font> Страна", self.groupBoxUbicacion)
        labelPais.move(15, 28)

        self.lineEditPais = QLineEdit(self.groupBoxUbicacion)
        self.lineEditPais.setMaxLength(30)
        self.lineEditPais.setFixedWidth(270)
        self.lineEditPais.move(15, 48)

        self.groupBoxContacto = QGroupBox("Контакты", self)
        self.groupBoxContacto.setFixedSize(300, 86)
        self.groupBoxContacto.move(10, 350)

        labelTelCel = QLabel("<font color='#FF3300'>*</font> Номер телефона",
                             self.groupBoxContacto)
        labelTelCel.move(15, 28)

        self.lineEditTelCel = QLineEdit(self.groupBoxContacto)
        self.lineEditTelCel.setInputMask("9999999999999999; ")
        self.lineEditTelCel.setFixedWidth(270)
        self.lineEditTelCel.move(15, 48)

        labelInformacion = QLabel("<font color='#FF3300'>*</font> Обязательные поля.", self)
        labelInformacion.move(10, 445)

        buttonActualizar = QPushButton("Обновить", self)
        buttonActualizar.setCursor(Qt.PointingHandCursor)
        buttonActualizar.move(154, 445)

        buttonCerrar = QPushButton("Закрыть", self)
        buttonCerrar.setCursor(Qt.PointingHandCursor)
        buttonCerrar.move(236, 445)

        buttonActualizar.clicked.connect(self.Actualizar)
        buttonCerrar.clicked.connect(self.close)

        self.cargarDatos(self.datos)

    def cargarDatos(self, datos):

        self.lineEditNombre.setText(datos[1])
        self.lineEditApellido.setText(datos[2])

        itemsComboBox = [self.comboBoxSexo.itemText(i) for i in range(self.comboBoxSexo.count())]
        if datos[3] in itemsComboBox:
            posicionItem = itemsComboBox.index(datos[3])
            self.comboBoxSexo.setCurrentIndex(posicionItem)
        else:
            self.comboBoxSexo.setCurrentIndex(-1)

        self.dateEditFechaNacimiento.setDate(QDate.fromString(datos[4], "dd/MM/yyyy"))
        self.lineEditPais.setText(datos[5])
        self.lineEditTelCel.setText(datos[6])

        return

    def Actualizar(self):
        nombre = " ".join(self.lineEditNombre.text().split()).title()
        apellido = " ".join(self.lineEditApellido.text().split()).title()
        sexo = self.comboBoxSexo.currentText()
        fecNacimiento = self.dateEditFechaNacimiento.text()
        pais = " ".join(self.lineEditPais.text().split()).title()
        telCel = self.lineEditTelCel.text()

        if not nombre:
            self.lineEditNombre.setFocus()
        elif not apellido:
            self.lineEditApellido.setFocus()
        elif not sexo:
            self.comboBoxSexo.setFocus()
        elif not pais:
            self.lineEditPais.setFocus()
        elif not telCel:
            self.lineEditTelCel.setFocus()
        else:
            if QFile.exists("DB_SIACLE/DB_SIACLE.db"):
                conexion = sqlite3.connect("DB_SIACLE/DB_SIACLE.db")
                cursor = conexion.cursor()

                try:
                    datos = [nombre, apellido, sexo, fecNacimiento, pais, telCel,
                             self.datos[0]]

                    cursor.execute("UPDATE CLIENTES SET NOMBRE = ?, APELLIDO = ?, SEXO = ?, "
                                   "FECHA_NACIMIENTO = ?, PAIS = ?, TELEFONO_CELULAR = ? "
                                   "WHERE ID = ?", datos)

                    conexion.commit()
                    conexion.close()

                    nuevos_datos = (str(self.datos[0]), nombre, apellido, sexo, fecNacimiento,
                                    pais, telCel)
                    self.parent.tabla.removeRow(self.indice)

                    numFilas = self.parent.tabla.rowCount()
                    self.parent.tabla.insertRow(numFilas)

                    for indice, dato in enumerate(nuevos_datos):
                        dato = QTableWidgetItem(dato)
                        if indice == 0:
                            dato.setTextAlignment(Qt.AlignCenter)

                        self.parent.tabla.setItem(numFilas, indice, dato)

                    self.lineEditNombre.clear()
                    self.lineEditApellido.clear()
                    self.comboBoxSexo.setCurrentIndex(-1)
                    self.dateEditFechaNacimiento.setDate(QDate.currentDate())
                    self.lineEditPais.clear()
                    self.lineEditTelCel.clear()

                    QMessageBox.information(self, "Обновление клиента ", "Клиент обновлен."
                                                                         "   ", QMessageBox.Ok)

                    self.close()
                except:
                    conexion.close()
                    QMessageBox.critical(self, "Обновление клиента", "Неизвестная ошибка.   ",
                                         QMessageBox.Ok)
            else:
                QMessageBox.critical(self, "Обновление клиента", "База не найдена "
                                                                 "datos.   ", QMessageBox.Ok)
class App(QMainWindow):
    def __init__(self):
        super().__init__()
        self.title = 'PyQt5 textbox - pythonspot.com'
        self.left = 20
        self.top = 40
        self.width = 4000
        self.height = 3400
        self.initUI()
        data1r = 0
        data2r = 0

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        # Create textbox

        self.label = QLabel('Nome Azione', self)
        self.label.move(100, 160)
        self.label.show()

        self.nome = QLineEdit(self)
        self.nome.move(300, 160)
        self.nome.show()

        self.dat1 = QDateEdit(self)
        self.dat1.move(500, 160)
        self.dat1.show()

        self.dat2 = QDateEdit(self)
        self.dat2.move(800, 160)
        self.dat2.show()

        # Create a button in the window
        self.button = QPushButton('Show text', self)
        self.button.move(400, 260)

        # connect button to function on_click
        self.button.clicked.connect(self.on_click)
        self.show()

    @pyqtSlot()
    def on_click(self):
        textboxValue = self.nome.text()
        data1g = self.dat1.text()
        data1r = datetime.datetime.strptime(data1g,
                                            "%d/%m/%Y").strftime("%Y-%m-%d")

        data2g = self.dat2.text()
        data2r = datetime.datetime.strptime(data2g,
                                            "%d/%m/%Y").strftime("%Y-%m-%d")

        print(data1r)
        print(data2r)

        if (textboxValue == ""):

            QMessageBox.question(self, 'Message - pythonspot.com',
                                 "You typed  Blank: " + textboxValue,
                                 QMessageBox.Ok, QMessageBox.Ok)
            self.textbox.setText("")
        else:
            QMessageBox.question(self, 'Message - pythonspot.com',
                                 "You typed: " + textboxValue, QMessageBox.Ok,
                                 QMessageBox.Ok)
            grafica(textboxValue, data1r, data2r)
Example #9
0
class Table(QWidget):
    def __init__(self):
        super().__init__()
        self.title = 'grafiko_kreator'
        self.left = 20
        self.top = 50
        self.width = 2600
        self.height = 1000
        self.number_of_hours = 0
        self.number_of_days = QDate.daysInMonth(QDate.currentDate())
        self.workers_number = 3
        self.slaveowners_number = 3
        self.sunday_dates = []
        self.date_box = QDateEdit()
        self.date = QDate.currentDate()
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        self.createTable()
        self.askfordate()
        self.number_of_wokers()
        self.number_of_slaveowners()
        self.update_table_button()
        self.workers_label()
        self.slaveowners_label()
        # Add box layout, add table to box layout and add box layout to widget
        self.Vlayout = QVBoxLayout()
        self.Hlayout = QHBoxLayout()

        self.Vlayout.addWidget(self.tableWidget)
        self.Vlayout.addLayout(self.Hlayout)
        self.Hlayout.addWidget(self.workers_box)
        self.Hlayout.addWidget(self.w_label)
        self.Hlayout.addWidget(self.slaveowners_box)
        self.Hlayout.addWidget(self.s_label)
        self.Hlayout.addWidget(self.update_button)
        self.Hlayout.addWidget(self.update_button)
        self.Vlayout.addWidget(self.date_box)
        self.setLayout(self.Vlayout)
        self.tableWidget.itemChanged.connect(self.isLast)
        # Show widget
        self.show()

    def createTable(self):
        # Create table
        number_of_rows = self.slaveowners_number + self.workers_number + 1
        number_of_columns = self.number_of_days + 2
        date = self.date
        self.tableWidget = QTableWidget()
        self.tableWidget.setRowCount(number_of_rows)
        self.tableWidget.setColumnCount(number_of_columns)
        horizontal_labels = []
        vertical_labels = []
        horizontal_labels.append('Pracownik/dzień')
        vertical_labels.append('')

        for i in range(number_of_columns - 2):
            horizontal_labels.append(str(i + 1))
        for i in range(number_of_columns):
            vertical_labels.append(str(i + 1))
        horizontal_labels.append('suma')
        self.tableWidget.setHorizontalHeaderLabels(horizontal_labels)
        self.tableWidget.setVerticalHeaderLabels(vertical_labels)
        for i in range(number_of_rows):
            self.tableWidget.setRowHeight(i, 20)
        for i in range(number_of_columns):
            self.tableWidget.setColumnWidth(i, 80)
        self.tableWidget.move(0, 0)

        # table selection change
        for i in range(1, self.number_of_days + 1):
            date.setDate(date.year(), date.month(), i)
            self.tableWidget.setItem(
                0, i, QTableWidgetItem(QDate.shortDayName(date.dayOfWeek())))
            # print(QDate.longDayName(date.dayOfWeek()))
        self.tableWidget.resizeColumnToContents(0)
        self.tableWidget.resizeRowsToContents()
        self.sundays()
        self.how_many_hours()
        self.count()

        self.show()

    def sundays(self):
        number_of_rows = self.slaveowners_number + self.workers_number + 1
        self.sunday_dates = []
        current_day_number = 0
        self.tableWidget.selectRow(0)
        for currentQTableWidgetItem in self.tableWidget.selectedItems():
            current_day_number += 1
            if currentQTableWidgetItem.text() == 'niedz.':
                self.sunday_dates.append(current_day_number)
        for j in range(len(self.sunday_dates) - 1):
            for i in range(number_of_rows):
                self.tableWidget.setItem(i + 1, self.sunday_dates[j],
                                         QTableWidgetItem("x"))

    def change_item(self, row, column, value):
        if value != 'y':
            self.tableWidget.setItem(row, column, QTableWidgetItem(str(value)))
        elif value == 'y':
            self.tableWidget.setItem(row, column, QTableWidgetItem(str(11.5)))
            self.tableWidget.item(row, column).setBackground(
                QtGui.QColor(255, 0, 0))

    def number_of_wokers(self):
        self.workers_box = QLineEdit()
        self.workers_box.setMaximumWidth(200)

    def number_of_slaveowners(self):
        self.slaveowners_box = QLineEdit()
        self.slaveowners_box.setMaximumWidth(200)

    def update_table_button(self):
        self.update_button = QPushButton('update')
        self.update_button.setMaximumWidth(200)

    def workers_label(self):
        self.w_label = QLabel('Ile pracowników')

    def slaveowners_label(self):
        self.s_label = QLabel('ile prowadzących zmiany')

    def askfordate(self):
        self.date_box.setDate(QDate.currentDate())
        self.date_box.setMaximumSize(200, 50)
        self.date_box.move(0, 300)
        self.date_box.show()
        self.date_box.setCalendarPopup(True)
        # self.date_box.dateChanged.connect(self.createTable)

    def how_many_hours(self):
        hours_count = 0
        working_date = self.date
        for i in range(working_date.daysInMonth()):
            working_date.setDate(working_date.year(), working_date.month(),
                                 i + 1)
            if working_date.dayOfWeek() > 0 and working_date.dayOfWeek() < 6:
                hours_count += 8
        self.number_of_hours = hours_count

    @pyqtSlot()
    def isLast(self):
        try:
            self.tableWidget.currentItem().setBackground(
                QtGui.QColor(255, 255, 255))
            column = self.tableWidget.currentItem().column()
            if column == self.number_of_days + 1:
                pass
            else:
                self.count()
        except:
            column = self.tableWidget.currentColumn()
            pass

    def count(self):
        for row in range(self.slaveowners_number + self.workers_number):
            suma = 0
            for column in range(self.number_of_days):
                try:
                    suma += float(
                        self.tableWidget.item(row + 1, column + 1).text())
                except:
                    pass
            self.tableWidget.selectColumn(column + 2)
            self.tableWidget.setItem(row + 1, column + 2,
                                     QTableWidgetItem(str(suma)))


#
# if __name__ == '__main__':
#     app = QApplication(sys.argv)
#     ex = Table()
#     sys.exit(app.exec_())
Example #10
0
class Addstocks(QWidget):

    def __init__(self, pf):
        self.counter = 0
        self.pf = pf
        super(Addstocks, self).__init__()
        self.setMinimumSize(QSize(300, 230))
        self.resize(550, 320)
        self.setWindowTitle("Add stocks")

        self.setAutoFillBackground(True)
        p = self.palette()
        p.setColor(self.backgroundRole(), Qt.darkCyan)  # darkcyan
        self.setPalette(p)

        label1 = QLabel("Enter a stock ticker:", self)
        self.ticker = QLineEdit(self)
        self.ticker.move(270, 20)
        self.ticker.resize(200, 32)
        label1.move(20, 25)

        label2 = QLabel("How many shares?", self)
        self.amount = QLineEdit(self)
        self.amount.move(270, 80)
        self.amount.resize(200, 32)
        label2.move(20, 85)

        label3 = QLabel("When you bought it?", self)
        self.date = QDateEdit(self)
        self.date.move(270, 140)
        self.date.resize(200, 32)
        self.date.setDate(QDate.currentDate())

        label3.move(20, 145)
        self.date.editingFinished.connect(self.date_method)

        pybutton = QPushButton('Add a stock', self)
        pybutton.clicked.connect(self.click)
        pybutton.resize(200, 32)
        pybutton.move(270, 200)

        pybutton2 = QPushButton('Finished', self)
        pybutton2.clicked.connect(self.click1)
        pybutton2.resize(200, 32)
        pybutton2.move(270, 260)

    def date_method(self):
        # Change the date received by the user into a correct form
        self.counter += 1
        value = self.date.date()
        self.day = value.toPyDate()

    def click(self):
        # Finds the ticker from Yahoo Finance and checks that the number of stocks owned is legit.
        # Also checks that the date chosen is a legitimate.
        # self.counter is used because editingFinished.connect does not work if the user does not touch the
        # date picker at all. Thus, the program needs to have a date even though the date_method has not been
        # activated.
        if self.counter == 0:
            value = QDate.currentDate()
            self.day = value.toPyDate()
        today = date.today()
        delta = today - self.day
        if delta.days < 0:
            QMessageBox.about(self, "Error", "The date you gave is incorrect.")
        else:
            self.stock = self.ticker.text()
            self.am = self.amount.text()
            tc = yf.Ticker(self.stock)
            pricedata = tc.history(period='5y')['Close']
            if len(pricedata) > 0:
                try:
                    self.am = float(self.am)
                    if self.am < 0.01:
                        QMessageBox.about(self, "Error", "Incorrect amount!")
                    else:
                        self.pf.add_stock(self.stock, self.am, self.day)
                        QMessageBox.about(self, "Success", "Stock added!")
                        self.amount.clear()
                        self.ticker.clear()
                except ValueError:
                    QMessageBox.about(self, "Error", "Incorrect amount!")

            else:
                QMessageBox.about(self, "Error", "Did not find any data for that stock.")

    def click1(self):
        #counts the different ratios for the portfolio and launches the new window
        self.pf.pf_value()
        self.pf.pf_returns()
        self.pf.get_greeks()
        self.pf.count_sharpe()
        self.next_window = Infopage(self.pf)
        self.next_window.show()
        self.close()
Example #11
0
class ReportGen(PageWindow):
    def __init__(self):
        super().__init__()
        self.initUI()
        self.createWidgets()

    def initUI(self):
        self.setWindowTitle("Report Generation")
        self.setFixedSize(400, 590)
        # Set the central widget and the general layout
        self.generalLayout = QVBoxLayout()
        self._centralWidget = QWidget(self)
        self.setCentralWidget(self._centralWidget)
        self._centralWidget.setLayout(self.generalLayout)

    def createWidgets(self):
        self.logSelector=QComboBox(self)
        self.logSelector.resize(110,40)
        self.logSelector.move(140,40)
        self.logSelector.addItem("Resident Log")
        self.logSelector.addItem("Visitor Log")
        self.datepicker=QDateEdit(self)
        self.datepicker.setCalendarPopup(True)
        self.datepicker.move(145,120)
        
        self.datepicker.setDate(dt.today())
        self.startTime=QTimeEdit(self)
        self.startTime.move(65,200)
        self.endTime=QTimeEdit(self)
        self.endTime.move(225,200)
        self.genButton=QPushButton("Generate",self)
        self.genButton.move(145,280)
        self.backButton=QPushButton("Back",self)
        self.backButton.move(145,340)
        self.backButton.clicked.connect(self.goBack)
        self.genButton.clicked.connect(self.repGen)
    def goBack(self):
        self.goto("welcome")

    def repGen(self):
        #print("Hey")
        log=self.logSelector.currentText()
        date=str(self.datepicker.date().toPyDate())
        #print(date)
        start=str(self.startTime.time().toPyTime())
        end=str(self.endTime.time().toPyTime())
        vbox=QVBoxLayout()
        table=QTableWidget()
        #print("Heyo")
        #print(log+" "+date+" "+start+" "+end)
        repList=getRepData(log,date,start,end)
        rows=len(repList)
        print(repList)
        table.setRowCount(rows+1)
        if(log=="Resident Log"):
            #print("hey")
            table.setColumnCount(4)
            table.setItem(0,0,QTableWidgetItem("Vehicle No."))
            table.setItem(0,1,QTableWidgetItem("Flat No."))
            table.setItem(0,2,QTableWidgetItem("Entry Time"))
            table.setItem(0,3,QTableWidgetItem("Exit Time"))
            table.resize(650,400)
            
        else:
            table.setColumnCount(5)
            table.setItem(0,0,QTableWidgetItem("Vehicle No."))
            table.setItem(0,1,QTableWidgetItem("Visitor Name"))
            table.setItem(0,2,QTableWidgetItem("Flat No."))
            table.setItem(0,3,QTableWidgetItem("Entry Time"))
            table.setItem(0,4,QTableWidgetItem("Exit Time"))
            table.resize(800,400)

        try:
            i=1
            j=0
            for row in repList:
                for j in range(len(row)):
                    #print(j+" "+row[j])
                    table.setItem(i,j,QTableWidgetItem(row[j]))
                i+=1
        except Exception as e:
            print(e)
        
        table.horizontalHeader().setDefaultSectionSize(155)
        table.show()
        vbox.addWidget(table)
        self.setLayout(vbox)
Example #12
0
class nuevoCliente(QDialog):
    def __init__(self, parent=None):
        super(nuevoCliente, self).__init__()

        self.setWindowIcon(QIcon("Imagenes/Qt.png"))
        self.setWindowTitle("Nuevo cliente")
        self.setWindowFlags(Qt.WindowCloseButtonHint | Qt.MSWindowsFixedSizeDialogHint)
        self.setFixedSize(320, 478)

        self.initUI()

    def initUI(self):

      # =========== WIDGETS GROUPBOX DATOS GENERALES =============
        
        self.groupBoxDatosGenerales = QGroupBox("Datos generales", self)
        self.groupBoxDatosGenerales.setFixedSize(300, 223)
        self.groupBoxDatosGenerales.move(10, 13)

        labelNombre = QLabel("<font color='#FF3300'>*</font> Nombre",
                             self.groupBoxDatosGenerales)
        labelNombre.move(15, 28)

        self.lineEditNombre = QLineEdit(self.groupBoxDatosGenerales)
        self.lineEditNombre.setValidator(QRegExpValidator(QRegExp("[a-zA-Zá-úÁ-ÚñÑ ]+"),
                                                          self.lineEditNombre))
        self.lineEditNombre.setMaxLength(30)
        self.lineEditNombre.setFixedWidth(270)
        self.lineEditNombre.setFocus()
        self.lineEditNombre.move(15, 46)

        labelApellido = QLabel("<font color='#FF3300'>*</font> Apellido",
                               self.groupBoxDatosGenerales)
        labelApellido.move(15, 74)

        self.lineEditApellido = QLineEdit(self.groupBoxDatosGenerales)
        self.lineEditApellido.setValidator(QRegExpValidator(QRegExp("[a-zA-Zá-úÁ-ÚñÑ ]+"),
                                                            self.lineEditApellido))
        self.lineEditApellido.setMaxLength(30)
        self.lineEditApellido.setFixedWidth(270)
        self.lineEditApellido.move(15, 92)

        labelSexo = QLabel("<font color='#FF3300'>*</font> Sexo", self.groupBoxDatosGenerales)
        labelSexo.move(15, 120)

        self.comboBoxSexo = QComboBox(self.groupBoxDatosGenerales)
        self.comboBoxSexo.addItems(["Masculino", "Femenino"])
        self.comboBoxSexo.setCurrentIndex(-1)
        self.comboBoxSexo.setFixedWidth(270)
        self.comboBoxSexo.move(15, 138)

        labelFechaNacimiento = QLabel("<font color='#FF3300'>*</font> Fecha de nacimiento",
                                      self.groupBoxDatosGenerales)
        labelFechaNacimiento.move(15, 166)

        self.dateEditFechaNacimiento = QDateEdit(self.groupBoxDatosGenerales)
        self.dateEditFechaNacimiento.setDate(QDate.currentDate())
        self.dateEditFechaNacimiento.setMaximumDate(QDate.currentDate())
        self.dateEditFechaNacimiento.setDisplayFormat("dd/MM/yyyy")
        self.dateEditFechaNacimiento.setCalendarPopup(True)
        self.dateEditFechaNacimiento.setCursor(Qt.PointingHandCursor)
        self.dateEditFechaNacimiento.setFixedWidth(270)
        self.dateEditFechaNacimiento.move(15, 184)
        
      # ============== WIDGETS GROUPBOX UBICACIÓN ================
        
        self.groupBoxUbicacion = QGroupBox("Ubicación", self)
        self.groupBoxUbicacion.setFixedSize(300, 86)
        self.groupBoxUbicacion.move(10, 250)

        labelPais = QLabel("<font color='#FF3300'>*</font> País", self.groupBoxUbicacion)
        labelPais.move(15, 28)

        self.lineEditPais = QLineEdit(self.groupBoxUbicacion)
        self.lineEditPais.setMaxLength(30)
        self.lineEditPais.setFixedWidth(270)
        self.lineEditPais.move(15, 48)

      # ============== WIDGETS GROUPBOX CONTACTO =================
        
        self.groupBoxContacto = QGroupBox("Contacto", self)
        self.groupBoxContacto.setFixedSize(300, 86)
        self.groupBoxContacto.move(10, 350)

        labelTelCel = QLabel("<font color='#FF3300'>*</font> Teléfono o celular",
                             self.groupBoxContacto)
        labelTelCel.move(15, 28)

        self.lineEditTelCel = QLineEdit(self.groupBoxContacto)
        self.lineEditTelCel.setInputMask("9999999999999999; ")
        self.lineEditTelCel.setFixedWidth(270)
        self.lineEditTelCel.move(15, 48)

      # ==========================================================

        labelInformacion = QLabel("<font color='#FF3300'>*</font> Campos obligatorios.", self)
        labelInformacion.move(10, 445)

      # ======================== BOTONES =========================

        buttonAceptar = QPushButton("Aceptar", self)
        buttonAceptar.setCursor(Qt.PointingHandCursor)
        buttonAceptar.move(154, 445)

        buttonCerrar = QPushButton("Cerrar", self)
        buttonCerrar.setCursor(Qt.PointingHandCursor)
        buttonCerrar.move(236, 445)

      # ==================== EVENTOS BOTONES =====================

        buttonAceptar.clicked.connect(self.Aceptar)
        buttonCerrar.clicked.connect(self.close)

  # ========================= FUNCIONES ==========================
        
    def Aceptar(self):
        nombre = " ".join(self.lineEditNombre.text().split()).title()
        apellido = " ".join(self.lineEditApellido.text().split()).title()
        sexo = self.comboBoxSexo.currentText()
        fecNacimiento = self.dateEditFechaNacimiento.text()
        pais = " ".join(self.lineEditPais.text().split()).title()
        telCel = self.lineEditTelCel.text()

        if not nombre:
            self.lineEditNombre.setFocus()
        elif not apellido:
            self.lineEditApellido.setFocus()
        elif not sexo:
            self.comboBoxSexo.setFocus()
        elif not pais:
            self.lineEditPais.setFocus()
        elif not telCel:
            self.lineEditTelCel.setFocus()
        else:
            if QFile.exists("DB_SIACLE/DB_SIACLE.db"):
                conexion = sqlite3.connect("DB_SIACLE/DB_SIACLE.db")
                cursor = conexion.cursor()
                    
                try:
                    datos = [nombre, apellido, sexo, fecNacimiento, pais, telCel]
                    cursor.execute("INSERT INTO CLIENTES (NOMBRE, APELLIDO, SEXO, "
                                   "FECHA_NACIMIENTO, PAIS, TELEFONO_CELULAR) "
                                   "VALUES (?,?,?,?,?,?)", datos)

                    conexion.commit()
                    conexion.close()

                    self.lineEditNombre.clear()
                    self.lineEditApellido.clear()
                    self.comboBoxSexo.setCurrentIndex(-1)
                    self.dateEditFechaNacimiento.setDate(QDate.currentDate())
                    self.lineEditPais.clear()
                    self.lineEditTelCel.clear()

                    QMessageBox.information(self, "Nuevo cliente", "Cliente registrado.   ",
                                            QMessageBox.Ok)
                except:
                    conexion.close()
                    QMessageBox.critical(self, "Nuevo cliente", "Error desconocido.   ",
                                         QMessageBox.Ok)
            else:
                QMessageBox.critical(self, "Nuevo cliente", "No se encontro la base de datos."
                                     "   ", QMessageBox.Ok)

            self.lineEditNombre.setFocus()
Example #13
0
class actualizarCliente(QDialog):
    def __init__(self, indice, datos, parent=None):
        super(actualizarCliente, self).__init__()

        self.parent = parent
        self.indice = indice
        self.datos = datos
        
        self.setWindowIcon(QIcon("Imagenes/Qt.png"))
        self.setWindowTitle("Actualizar cliente")
        self.setWindowFlags(Qt.WindowCloseButtonHint | Qt.MSWindowsFixedSizeDialogHint)
        self.setFixedSize(320, 478)

        self.initUI()

    def initUI(self):

      # =========== WIDGETS GROUPBOX DATOS GENERALES =============
        
        self.groupBoxDatosGenerales = QGroupBox("Datos generales", self)
        self.groupBoxDatosGenerales.setFixedSize(300, 223)
        self.groupBoxDatosGenerales.move(10, 13)

        labelNombre = QLabel("<font color='#FF3300'>*</font> Nombre",
                             self.groupBoxDatosGenerales)
        labelNombre.move(15, 28)

        self.lineEditNombre = QLineEdit(self.groupBoxDatosGenerales)
        self.lineEditNombre.setValidator(QRegExpValidator(QRegExp("[a-zA-Zá-úÁ-ÚñÑ ]+"),
                                                          self.lineEditNombre))
        self.lineEditNombre.setMaxLength(30)
        self.lineEditNombre.setFixedWidth(270)
        self.lineEditNombre.setFocus()
        self.lineEditNombre.move(15, 46)

        labelApellido = QLabel("<font color='#FF3300'>*</font> Apellido",
                               self.groupBoxDatosGenerales)
        labelApellido.move(15, 74)

        self.lineEditApellido = QLineEdit(self.groupBoxDatosGenerales)
        self.lineEditApellido.setValidator(QRegExpValidator(QRegExp("[a-zA-Zá-úÁ-ÚñÑ ]+"),
                                                            self.lineEditApellido))
        self.lineEditApellido.setMaxLength(30)
        self.lineEditApellido.setFixedWidth(270)
        self.lineEditApellido.move(15, 92)

        labelSexo = QLabel("<font color='#FF3300'>*</font> Sexo", self.groupBoxDatosGenerales)
        labelSexo.move(15, 120)

        self.comboBoxSexo = QComboBox(self.groupBoxDatosGenerales)
        self.comboBoxSexo.addItems(["Masculino", "Femenino"])
        self.comboBoxSexo.setCurrentIndex(-1)
        self.comboBoxSexo.setFixedWidth(270)
        self.comboBoxSexo.move(15, 138)

        labelFechaNacimiento = QLabel("<font color='#FF3300'>*</font> Fecha de nacimiento",
                                      self.groupBoxDatosGenerales)
        labelFechaNacimiento.move(15, 166)

        self.dateEditFechaNacimiento = QDateEdit(self.groupBoxDatosGenerales)
        self.dateEditFechaNacimiento.setDate(QDate.currentDate())
        self.dateEditFechaNacimiento.setMaximumDate(QDate.currentDate())
        self.dateEditFechaNacimiento.setDisplayFormat("dd/MM/yyyy")
        self.dateEditFechaNacimiento.setCalendarPopup(True)
        self.dateEditFechaNacimiento.setCursor(Qt.PointingHandCursor)
        self.dateEditFechaNacimiento.setFixedWidth(270)
        self.dateEditFechaNacimiento.move(15, 184)
        
      # ============== WIDGETS GROUPBOX UBICACIÓN ================
        
        self.groupBoxUbicacion = QGroupBox("Ubicación", self)
        self.groupBoxUbicacion.setFixedSize(300, 86)
        self.groupBoxUbicacion.move(10, 250)

        labelPais = QLabel("<font color='#FF3300'>*</font> País", self.groupBoxUbicacion)
        labelPais.move(15, 28)

        self.lineEditPais = QLineEdit(self.groupBoxUbicacion)
        self.lineEditPais.setMaxLength(30)
        self.lineEditPais.setFixedWidth(270)
        self.lineEditPais.move(15, 48)

      # ============== WIDGETS GROUPBOX CONTACTO =================
        
        self.groupBoxContacto = QGroupBox("Contacto", self)
        self.groupBoxContacto.setFixedSize(300, 86)
        self.groupBoxContacto.move(10, 350)

        labelTelCel = QLabel("<font color='#FF3300'>*</font> Teléfono o celular",
                             self.groupBoxContacto)
        labelTelCel.move(15, 28)

        self.lineEditTelCel = QLineEdit(self.groupBoxContacto)
        self.lineEditTelCel.setInputMask("9999999999999999; ")
        self.lineEditTelCel.setFixedWidth(270)
        self.lineEditTelCel.move(15, 48)

      # ==========================================================

        labelInformacion = QLabel("<font color='#FF3300'>*</font> Campos obligatorios.", self)
        labelInformacion.move(10, 445)

      # ======================== BOTONES =========================

        buttonActualizar = QPushButton("Actualizar", self)
        buttonActualizar.setCursor(Qt.PointingHandCursor)
        buttonActualizar.move(154, 445)

        buttonCerrar = QPushButton("Cerrar", self)
        buttonCerrar.setCursor(Qt.PointingHandCursor)
        buttonCerrar.move(236, 445)

      # ==================== EVENTOS BOTONES =====================

        buttonActualizar.clicked.connect(self.Actualizar)
        buttonCerrar.clicked.connect(self.close)

      # ================= FUNCIONES AUTOMÁTICAS ==================

        self.cargarDatos(self.datos)
        
  # ========================= FUNCIONES ==========================

    def cargarDatos(self, datos):
        # datos = ["Id", "Nombre", "Apellido", "Sexo", "Fecha de nacimiento", "País",
        #          "Teléfono o celular"]
        
        self.lineEditNombre.setText(datos[1])
        self.lineEditApellido.setText(datos[2])

        itemsComboBox = [self.comboBoxSexo.itemText(i) for i in range(self.comboBoxSexo.count())]
        if datos[3] in itemsComboBox:
            posicionItem = itemsComboBox.index(datos[3])
            self.comboBoxSexo.setCurrentIndex(posicionItem)
        else:
            self.comboBoxSexo.setCurrentIndex(-1)

        self.dateEditFechaNacimiento.setDate(QDate.fromString(datos[4], "dd/MM/yyyy"))
        self.lineEditPais.setText(datos[5])
        self.lineEditTelCel.setText(datos[6])

        return
        
    def Actualizar(self):
        nombre = " ".join(self.lineEditNombre.text().split()).title()
        apellido = " ".join(self.lineEditApellido.text().split()).title()
        sexo = self.comboBoxSexo.currentText()
        fecNacimiento = self.dateEditFechaNacimiento.text()
        pais = " ".join(self.lineEditPais.text().split()).title()
        telCel = self.lineEditTelCel.text()

        if not nombre:
            self.lineEditNombre.setFocus()
        elif not apellido:
            self.lineEditApellido.setFocus()
        elif not sexo:
            self.comboBoxSexo.setFocus()
        elif not pais:
            self.lineEditPais.setFocus()
        elif not telCel:
            self.lineEditTelCel.setFocus()
        else:
            if QFile.exists("DB_SIACLE/DB_SIACLE.db"):
                conexion = sqlite3.connect("DB_SIACLE/DB_SIACLE.db")
                cursor = conexion.cursor()
                    
                try:
                    datos = [nombre, apellido, sexo, fecNacimiento, pais, telCel,
                             self.datos[0]]

                    cursor.execute("UPDATE CLIENTES SET NOMBRE = ?, APELLIDO = ?, SEXO = ?, "
                                   "FECHA_NACIMIENTO = ?, PAIS = ?, TELEFONO_CELULAR = ? "
                                   "WHERE ID = ?", datos)
                    
                    conexion.commit()
                    conexion.close()

                    nuevos_datos = (str(self.datos[0]), nombre, apellido, sexo, fecNacimiento,
                                    pais, telCel)
                    self.parent.tabla.removeRow(self.indice)

                    numFilas = self.parent.tabla.rowCount()
                    self.parent.tabla.insertRow(numFilas)
                            
                    for indice, dato in enumerate(nuevos_datos):
                        dato = QTableWidgetItem(dato)
                        if indice == 0:
                            dato.setTextAlignment(Qt.AlignCenter)

                        self.parent.tabla.setItem(numFilas, indice, dato)

                    self.lineEditNombre.clear()
                    self.lineEditApellido.clear()
                    self.comboBoxSexo.setCurrentIndex(-1)
                    self.dateEditFechaNacimiento.setDate(QDate.currentDate())
                    self.lineEditPais.clear()
                    self.lineEditTelCel.clear()

                    QMessageBox.information(self, "Actualizar cliente", "Cliente actualizado."
                                            "   ", QMessageBox.Ok)

                    self.close()
                except:
                    conexion.close()
                    QMessageBox.critical(self, "Actualizar cliente", "Error desconocido.   ",
                                         QMessageBox.Ok)
            else:
                QMessageBox.critical(self, "Actualizar cliente", "No se encontro la base de "
                                     "datos.   ", QMessageBox.Ok)
 def create_date_edit(window, x, pos):
     date_edit = QDateEdit(self)
     date_edit.move(x, y_gap + pos * y_step)
     date_edit.resize(150, 24)
     return date_edit
class App(QWidget):

    def __init__(self):
        super().__init__()
        self.title = 'grafiko_kreator'
        self.left = 20
        self.top = 50
        self.width = 2600
        self.height = 1000
        self.number_of_hours = 0
        self.number_of_days = QDate.daysInMonth(QDate.currentDate())
        self.workers_number = 3
        self.slaveowners_number = 3
        self.date_box = QDateEdit()
        self.date = QDate.currentDate()
        self.initUI()


    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        self.createTable()
        self.askfordate()
        self.number_of_wokers()
        self.number_of_slaveowners()
        self.update_table_button()
        self.workers_label()
        self.slaveowners_label()
        # Add box layout, add table to box layout and add box layout to widget
        self.Vlayout = QVBoxLayout()
        self.Hlayout = QHBoxLayout()

        self.Vlayout.addWidget(self.tableWidget)
        self.Vlayout.addLayout(self.Hlayout)
        self.Hlayout.addWidget(self.workers_box)
        self.Hlayout.addWidget(self.w_label)
        self.Hlayout.addWidget(self.slaveowners_box)
        self.Hlayout.addWidget(self.s_label)
        self.Hlayout.addWidget(self.update_button)
        self.Hlayout.addWidget(self.update_button)
        self.Vlayout.addWidget(self.date_box)
        self.setLayout(self.Vlayout)

        # Show widget
        self.show()

    def createTable(self):
        # Create table
        number_of_rows = self.slaveowners_number + self.workers_number+1
        number_of_columns = self.number_of_days+2
        date = self.date
        self.tableWidget = QTableWidget()
        self.tableWidget.setRowCount(number_of_rows)
        self.tableWidget.setColumnCount(number_of_columns)
        horizontal_labels = []
        vertical_labels = []
        horizontal_labels.append('Pracownik/dzień')
        vertical_labels.append('')
        sunday_dates = []
        current_day_number = 0
        for i in range (number_of_columns-2):
            horizontal_labels.append(str(i+1))
        for i in range (number_of_columns):
            vertical_labels.append(str(i+1))
        horizontal_labels.append('suma')
        self.tableWidget.setHorizontalHeaderLabels(horizontal_labels)
        self.tableWidget.setVerticalHeaderLabels(vertical_labels)
        for i in range (number_of_rows):
            self.tableWidget.setRowHeight(i,20)
        for i in range (number_of_columns):
            self.tableWidget.setColumnWidth(i,80)
        self.tableWidget.move(0, 0)

        # table selection change
        for i in range(1,self.number_of_days+1):
            date.setDate(date.year(),date.month(),i)
            self.tableWidget.setItem(0,i,QTableWidgetItem(QDate.shortDayName(date.dayOfWeek())))
            #print(QDate.longDayName(date.dayOfWeek()))
        self.tableWidget.doubleClicked.connect(self.on_click)
        self.tableWidget.resizeColumnToContents(0)
        self.tableWidget.resizeRowsToContents()
        self.tableWidget.selectRow(0)
        for currentQTableWidgetItem in self.tableWidget.selectedItems():
            current_day_number +=1
            if currentQTableWidgetItem.text() == 'niedz.':
                sunday_dates.append(current_day_number)
        for j in range (len(sunday_dates)-1):
            for i in range (number_of_rows):
                self.tableWidget.setItem(i+1,sunday_dates[j],QTableWidgetItem("x"))

        self.tableWidget.itemChanged.connect(self.isLast)
        self.how_many_hours()
        self.give_full_hours()
        self.show()

    def number_of_wokers(self):
        self.workers_box = QLineEdit()
        self.workers_box.setMaximumWidth(200)


    def number_of_slaveowners(self):
        self.slaveowners_box = QLineEdit()
        self.slaveowners_box.setMaximumWidth(200)

    def update_table_button(self):
        self.update_button = QPushButton('update')
        self.update_button.setMaximumWidth(200)
        self.update_button.clicked.connect(self.update_rows)

    def workers_label(self):
        self.w_label = QLabel('Ile pracowników')

    def slaveowners_label(self):
        self.s_label = QLabel('ile prowadzących zmiany')

    def askfordate(self):
        self.date_box.setDate(QDate.currentDate())
        self.date_box.setMaximumSize(200,50)
        self.date_box.move(0,300)
        self.date_box.show()
        self.date_box.setCalendarPopup(True)
        self.date_box.dateChanged.connect(self.update_date)
        #self.date_box.dateChanged.connect(self.createTable)

    def how_many_hours(self):
        hours_count = 0
        working_date = self.date
        for i in range (working_date.daysInMonth()):
            working_date.setDate(working_date.year(), working_date.month(), i+1)
            if working_date.dayOfWeek()>0 and working_date.dayOfWeek()<6:
                hours_count+=8
        print(hours_count)
        self.number_of_hours = hours_count

    def give_free_days(self):
        propability_table = []
        for i in range(self.number_of_days):
            for j in range(self.slaveowners_number+self.workers_number):
                try:
                    if self.tableWidget.item(i,j).text()=='x':
                        propability_table.append(1)
                except:
                    pass
        


    def give_full_hours(self):
        for i in range(self.workers_number+self.slaveowners_number):
            hours_for_person = self.number_of_hours
            number_of_free_days = self.number_of_days-int(round(hours_for_person/11.5,0))
            assigned_free_days = 0
            j=0
            # for j in range(self.number_of_days):
            while hours_for_person > 0 and assigned_free_days<number_of_free_days:
                two_free = False
                two_work = False
                try:
                    two_free = (self.tableWidget.item(i + 1, j - 1).text() == self.tableWidget.item(i + 1, j).text()=='x')
                    two_work = (self.tableWidget.item(i + 1, j - 1).text() == self.tableWidget.item(i + 1, j).text()=='11.5')
                except:
                    pass
                try:

                    if (self.tableWidget.item(i+1,j+1).text())=='x' and assigned_free_days-number_of_free_days!=0:
                        assigned_free_days+=1
                        j+=1
                    else:
                        j+=1
                except:
                    is_ramdomly_free = random.random() < (number_of_free_days-assigned_free_days)/((self.number_of_days-j)+np.power(10.0,-100))
                    if is_ramdomly_free and assigned_free_days-number_of_free_days!=0 and not two_free or two_work:
                        self.tableWidget.setItem(i+1,j+1,QTableWidgetItem(str('x')))
                        j+=1
                        assigned_free_days+=1
                    elif self.is_enough_today(j+1) and assigned_free_days-number_of_free_days!=0 and not two_free or two_work:
                        self.tableWidget.setItem(i + 1, j + 1, QTableWidgetItem(str('x')))
                        j+=1
                        assigned_free_days+=1
                    elif not self.is_enough_today(j+1):
                        self.tableWidget.setItem(i+1,j+1,QTableWidgetItem(str(11.5)))
                        hours_for_person-=11.5
                        j+=1
                    else:
                        self.tableWidget.setItem(i + 1, j + 1, QTableWidgetItem(str('x')))
                        j += 1
                        assigned_free_days += 1
            self.tableWidget.setItem(i+1,j,QTableWidgetItem(str(hours_for_person)))
        self.isLast()

    def is_enough_today(self,day):
        number_of_todays_workers = 0
        for i in range (self.slaveowners_number+self.workers_number):
            try:
                if self.tableWidget.item(i,day).text()=='11.5':
                    number_of_todays_workers+=1
            except:
                pass
        return number_of_todays_workers > 2

    @pyqtSlot()
    def isLast(self):
        try:
            column = self.tableWidget.currentItem().column()
            if column == self.number_of_days+1:
                pass
            else:
                self.count()
        except:
            pass
    def on_click(self):
        print("\n")
        for currentQTableWidgetItem in self.tableWidget.selectedItems():
            print(currentQTableWidgetItem.row(), currentQTableWidgetItem.column(), currentQTableWidgetItem.text())

    def update_rows(self):
        self.slaveowners_number = int(self.slaveowners_box.text())
        self.workers_number = int(self.workers_box.text())
        rows = self.slaveowners_number+self.workers_number
        difference = self.tableWidget.rowCount()-(rows+2)
        for i in range(abs(difference+1)):
            if (difference<0):
                self.tableWidget.insertRow(i+1)
            if (difference>0):
                self.tableWidget.removeRow(self.tableWidget.rowCount()-1)
        vertical_labels = []
        vertical_labels.append('')
        for i in range(rows):
            vertical_labels.append(str(i + 1))

        self.tableWidget.setVerticalHeaderLabels(vertical_labels)
        self.tableWidget.resizeRowsToContents()

    def count(self):
        suma = 0

        row = self.tableWidget.currentItem().row()
        #print(type(int(self.tableWidget.currentItem().text())))
        for i in range(self.number_of_days+1):
            try:
                 suma+=float(self.tableWidget.item(row,i).text())

            except:
                pass
        try:
            self.tableWidget.selectColumn(self.number_of_days+1)
            self.tableWidget.setItem(row,self.number_of_days+1,QTableWidgetItem(str(suma)))
        except:
            pass
        # self.tableWidget.setItem(row,self.number_of_days,QTableWidgetItem(suma))

    def update_date(self):
        current_day_number = 0
        sunday_dates = []
        days = QDate.daysInMonth(self.date_box.date())
        columns = days+1
        number_of_rows = self.workers_number+self.slaveowners_number
        self.date=self.date_box.date()
        date = self.date
        difference = self.number_of_days-(days)
        for i in range(abs(difference)):
            if (difference<0):
                print(difference)
                self.tableWidget.insertColumn(i)
            if (difference>0):
                print(difference)
                self.tableWidget.removeColumn(days-i)
        self.number_of_days = days
        self.tableWidget.clear()

        horizontal_labels = []
        horizontal_labels.append('Pracownik/dzień')
        for i in range(days):
            horizontal_labels.append(str(i + 1))
        horizontal_labels.append('suma')
        self.tableWidget.setHorizontalHeaderLabels(horizontal_labels)
        for i in range(self.tableWidget.rowCount()):
            self.tableWidget.setRowHeight(i, 20)
        for i in range(days+1):
            self.tableWidget.setColumnWidth(i, 80)
        for i in range(1, days+1):
           date.setDate(date.year(), date.month(), i)
           self.tableWidget.setItem(0, i, QTableWidgetItem(QDate.shortDayName(date.dayOfWeek())))

        self.tableWidget.selectRow(0)
        for currentQTableWidgetItem in self.tableWidget.selectedItems():
            current_day_number += 1
            if currentQTableWidgetItem.text() == 'niedz.':
                sunday_dates.append(current_day_number)
        for j in range(len(sunday_dates) - 1):
            for i in range(number_of_rows):
                self.tableWidget.setItem(i + 1, sunday_dates[j], QTableWidgetItem("x"))
        self.tableWidget.resizeColumnToContents(0)
        self.tableWidget.resizeRowsToContents()
        self.how_many_hours()
        self.show()
    def create_ui(self):
        # 1.文字标签
        # QLabel(显示的文字, 父标签/放到哪个窗口上)
        label1 = QLabel('用户名:', self)
        # 一般不常用的移动坐标
        label1.move(50, 10)

        # 2.按钮
        btn1 = QPushButton('登录', self)
        btn1.move(50, 50)
        # css语法:选择器{属性1:属性值1; 属性2:属性值2;..}
        # color - 字体颜色,对应的值:颜色单词, rbg(255, 0, 0)
        #
        btn1.setStyleSheet('QPushButton{}')
        btn2 = QRadioButton('男', self)
        btn2.move(50, 100)
        btn3 = QCheckBox('篮球', self)
        btn3.move(50, 150)
        btn4 = QCommandLinkButton('hello', 'hellowword', self)
        btn4.move(50, 200)

        b1 = QDialogButtonBox.StandardButton.Ok
        b2 = QDialogButtonBox.StandardButton.Cancel
        btn5 = QDialogButtonBox(b2, self)
        btn5.move(50, 300)

        # 3.输入框
        input1 = QLineEdit(self)
        input1.move(150, 10)
        input2 = QLineEdit('admin', self)
        input2.move(150, 50)
        input1.setText('张三')
        # 富文本
        input3 = QTextEdit('张三', self)
        input3.move(50, 300)
        # 设置成只读
        input3.setReadOnly(True)
        # 只能显示纯文本
        input4 = QPlainTextEdit(self)
        input4.move(300, 10)
        # 输入数值
        input5 = QSpinBox(self)
        input5.move(100, 100)
        input5.setMinimum(10)
        input5.setMaximum(20)
        input5.setValue(15)
        print(input5.value())  # 获取当前值
        # 输入小数
        input6 = QDoubleSpinBox(self)
        input6.move(100, 150)
        # 下拉菜单
        input7 = QComboBox(self)
        input7.addItems(['item1', 'item2'])
        input7.move(150, 200)
        print(input7.currentText())  # 获取当前选中的选项,适用input8
        input8 = QFontComboBox(self)
        input8.move(350, 300)
        input8.setCurrentIndex(2)
        print(input8.currentText())
        label1.setFont(input8.currentFont())
        # 日期选择
        input9 = QDateEdit(date.today(), self)
        input9.move(300, 400)
        # 选择颜色
        input10 = QColorDialog(self)
        input10.move(400, 400)
        # input10.show()

        input11 = QDial(self)
        input11.move(300, 200)

        input12 = QSlider(self)
        input12.move(430, 350)
        input12.setMaximum(100)
        input12.setMinimum(-100)
        input12.setValue(20)
        input12.setOrientation(Qt.Horizontal)  # 设置为水平方向