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_()
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()
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())
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()
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
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()
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)
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_())
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()
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)
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()
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) # 设置为水平方向