class Ui_SetHomeWidget(QtWidgets.QDialog): def __init__(self): # in: options is type(list) of names for each option to input QtWidgets.QDialog.__init__(self) self.info = {} self.geo_locator = Geo() self.setupUi() def setupUi(self): grid = QtWidgets.QGridLayout() grid.setSpacing(5) int_validator = QtGui.QIntValidator() self.city_label = QtWidgets.QLabel("Where are you going?") self.address_input = QtWidgets.QLineEdit() grid.addWidget(self.city_label, 1, 0) grid.addWidget(self.address_input, 1, 1) self.lat_label = QtWidgets.QLabel("Latitude:") self.lat_input = QtWidgets.QSpinBox() grid.addWidget(self.lat_label, 2, 0) grid.addWidget(self.lat_input, 2, 1) self.address_input.editingFinished.connect(self.address_event) self.lat_input.editingFinished.connect(self.lat_lon_event) self.lon_input.editingFinished.connect(self.lat_lon_event) self.double_only = QtGui.QDoubleValidator() self.lat_input.setValidator(self.double_only) self.lon_input.setValidator(self.double_only) self.buttons = QtWidgets.QDialogButtonBox() self.buttons.addButton("Submit", QtWidgets.QDialogButtonBox.AcceptRole) self.buttons.addButton("Cancel", QtWidgets.QDialogButtonBox.RejectRole) grid.addWidget(self.buttons) self.setLayout(grid) # self.setGeometry(300, 300, 300, 300) self.setWindowTitle("Enter Information") self.buttons.accepted.connect(self.submit_close) self.buttons.rejected.connect(self.reject) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHeightForWidth(self.sizePolicy().hasHeightForWidth()) self.show() def address_event(self): if not self.address_input.text(): return lat, lon = self.geo_locator.address_to_lat_lon( self.address_input.text()) if lat: self.lat_input.setText( lat) # prevents none return from wiping text if lon: self.lon_input.setText(lon) def lat_lon_event(self): if not self.lat_input.text() or not self.lon_input.text(): return address = self.geo_locator.lat_lon_to_address( float(self.lat_input.text()), float(self.lon_input.text())) if address: self.address_input.setText(address) def submit_close(self): self.info['city'] = self.address_input.text() self.info['lat'] = float(self.lat_input.text()) self.info['lon'] = float(self.lon_input.text()) self.accept() def exec_(self): super(Ui_SetHomeWidget, self).exec_() return self.info
class Ui_AddPersonWidget(QtWidgets.QDialog): def __init__(self, options): # in: options is type(list) of names for each option to input QtWidgets.QDialog.__init__(self) self.obj_list = [ ] # storage for dynamic variables since can't name them all..# . self.info = {} self.options = options self.setupUi() self.address_input = self.obj_list[2 * self.options.index('Address') + 1] self.lat_input = self.obj_list[2 * self.options.index('Lat') + 1] self.lon_input = self.obj_list[2 * self.options.index('Lon') + 1] self.geo_locator = Geo() self.address_input.editingFinished.connect(self.address_event) self.lat_input.editingFinished.connect(self.lat_lon_event) self.lon_input.editingFinished.connect(self.lat_lon_event) def setupUi(self): y_cnt = 1 grid = QtWidgets.QGridLayout() grid.setSpacing(5) for i in self.options: name = QtWidgets.QLabel(i) user_input = QtWidgets.QLineEdit() if name.text().lower() == 'date added': user_input.setText(datetime.date.today().strftime("%B %d, %Y")) self.obj_list.append(name) self.obj_list.append(user_input) grid.addWidget(name, y_cnt, 0) grid.addWidget(user_input, y_cnt, 1) y_cnt += 1 self.buttons = QtWidgets.QDialogButtonBox() self.buttons.addButton("Submit", QtWidgets.QDialogButtonBox.AcceptRole) self.buttons.addButton("Cancel", QtWidgets.QDialogButtonBox.RejectRole) grid.addWidget(self.buttons) self.setLayout(grid) self.setGeometry(300, 300, 100 * y_cnt, 300) self.setWindowTitle("Enter Information") self.buttons.accepted.connect(self.submit_close) self.buttons.rejected.connect(self.reject) self.show() def address_event(self): if not self.address_input.text(): return try: lat, lon = self.geo_locator.address_to_lat_lon( self.address_input.text()) except TypeError: print("error, address not recognized, please check spelling") return self.obj_list[2 * self.options.index('Lat') + 1].setText(str(lat)) self.obj_list[2 * self.options.index('Lon') + 1].setText(str(lon)) def lat_lon_event(self): lat, lon = self._get_lat_lon() if not lat or not lon: return address = self.geo_locator.lat_lon_to_address(lat, lon) self.address_input.setText(address) def _get_lat_lon(self): lat = self.lat_input.text() if not self.lat_input.text() else float( self.lat_input.text()) lon = self.lon_input.text() if not self.lon_input.text() else float( self.lon_input.text()) return lat, lon def submit_close(self): #TODO: save input data to self.info first if not self.obj_list[1].text(): print("Name required.") return for index in range(0, len(self.obj_list), 2): self.info[self.obj_list[index].text()] = self.obj_list[index + 1].text() self.accept() def exec_(self): super(Ui_AddPersonWidget, self).exec_() return self.info
class Ui_FindNearbyWidget(QtWidgets.QDialog): def __init__(self): # in: options is type(list) of names for each option to input QtWidgets.QDialog.__init__(self) self.info = {} self.geo_locator = Geo() self.location_coordinates = None self.setupUi() def setupUi(self): grid = QtWidgets.QGridLayout() grid.setSpacing(5) self.city_label = QtWidgets.QLabel( "Where are you located? (Address/City)") self.address_input = QtWidgets.QLineEdit() grid.addWidget(self.city_label, 1, 0) grid.addWidget(self.address_input, 1, 1) self.label_num_people = QtWidgets.QLabel("Number of nearest people:") self.spinBox_num_people = QtWidgets.QSpinBox() grid.addWidget(self.label_num_people, 2, 0) grid.addWidget(self.spinBox_num_people, 2, 1) self.address_input.editingFinished.connect(self.address_event) self.buttons = QtWidgets.QDialogButtonBox() self.buttons.addButton("Submit", QtWidgets.QDialogButtonBox.AcceptRole) self.buttons.addButton("Cancel", QtWidgets.QDialogButtonBox.RejectRole) grid.addWidget(self.buttons) self.setLayout(grid) self.setWindowTitle("Enter Information") self.buttons.accepted.connect(self.submit_close) self.buttons.rejected.connect(self.reject) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHeightForWidth(self.sizePolicy().hasHeightForWidth()) self.show() def address_event(self): if not self.address_input.text(): return lat, lon = self.geo_locator.address_to_lat_lon( self.address_input.text()) if lat: self.info['lat'] = lat if lon: self.info['lon'] = lon def lat_lon_event(self): if not self.lat_input.text() or not self.lon_input.text(): return address = self.geo_locator.lat_lon_to_address( float(self.lat_input.text()), float(self.lon_input.text())) if address: self.address_input.setText(address) def submit_close(self): self.info['num people'] = self.spinBox_num_people.value() self.accept() def exec_(self): super(Ui_SetHomeWidget, self).exec_() return self.info