def show_map(ll, z, _map_type='map', add_params=None): global map_type, flag_update_map global _lon, _lat flag_update_map = False map_type = _map_type pygame.init() screen = pygame.display.set_mode((600, 540)) _z = z _lon, _lat = map(float, ll.split(',')) buttons_viev = DivButtons( ButtonFlag((545, 465), buts, func=lambda: chance_viev('map'), text='Схема', text_size=23, name='but_satellite', shift_text=(-4, 0)), ButtonFlag((545, 495), buts, func=lambda: chance_viev('sat'), text='Спутник', text_size=23, name='but_scheme', shift_text=(4, 0)), ButtonFlag((545, 525), buts, func=lambda: chance_viev('sat,skl'), text='Гибрид', text_size=23, name='but_gibrid', shift_text=(3, 0))) buttons_viev.elements[0].states['clicked'] = True GUI.add_element(buttons_viev) search_div = Div( TextBox((40, 5, 400, 30), '', default_text='Введите адрес...', name='tb_address'), Button('Поиск', (495, 21), (100, 30), lambda: get_coord('_lon', '_lat', 'tb_address'), 'but_search', but_color=(255, 255, 255), hovered=(190, 190, 190), size_font=24, shift_text=(21, 7))) GUI.add_element(search_div) map_file = update_static(','.join([str(_lon), str(_lat)]), _z, map_type) clock = pygame.time.Clock() while True: screen.fill((0, 0, 0)) for event in pygame.event.get(): if event.type == pygame.QUIT: os.remove(map_file) pygame.quit() sys.exit() elif event.type == pygame.KEYDOWN: if event.key == pygame.K_PAGEUP: if _z - 1 >= 2: _z -= 1 map_file = update_static( ','.join([str(_lon), str(_lat)]), _z, map_type) elif event.key == pygame.K_PAGEDOWN: if _z + 1 <= 17: _z += 1 map_file = update_static( ','.join([str(_lon), str(_lat)]), _z, map_type) elif event.key == pygame.K_RIGHT: _lon += 422.4 / (2**(_z - 1)) map_file = update_static(','.join([str(_lon), str(_lat)]), _z, map_type) elif event.key == pygame.K_LEFT: _lon -= 422.4 / (2**(_z - 1)) map_file = update_static(','.join([str(_lon), str(_lat)]), _z, map_type) elif event.key == pygame.K_UP: _lat += 178.25792 / (2**(_z - 1)) map_file = update_static(','.join([str(_lon), str(_lat)]), _z, map_type) elif event.key == pygame.K_DOWN: _lat -= 178.25792 / (2**(_z - 1)) map_file = update_static(','.join([str(_lon), str(_lat)]), _z, map_type) GUI.apply_event(event) clock.tick(60) if flag_update_map: map_file = update_static(','.join([str(_lon), str(_lat)]), _z, map_type) flag_update_map = False screen.blit(pygame.image.load(map_file), (0, 0)) GUI.update() GUI.render(screen) pygame.display.flip()
def show_map(ll, z, _map_type='map', add_params=None): global map_type, flag_update_map, address, postcode global _lon, _lat, _pt flag_update_map = False postcode = None address = None map_type = _map_type pygame.init() screen = pygame.display.set_mode((600, 540)) _z = z _lon, _lat = map(float, ll.split(',')) _pt = add_params _tb_info = TextBlock((2, 452, 490, 86), [], 24, text_color=(77, 81, 83), bg_color=(255, 255, 255), name='tb_info') GUI.add_element(_tb_info) buttons_view = DivButtons( ButtonFlag((545, 465), buts, func=lambda: change_view('map'), text='Схема', text_size=23, name='but_satellite', shift_text=(-4, 0)), ButtonFlag((545, 495), buts, func=lambda: change_view('sat'), text='Спутник', text_size=23, name='but_scheme', shift_text=(4, 0)), ButtonFlag((545, 525), buts, func=lambda: change_view('sat,skl'), text='Гибрид', text_size=23, name='but_gibrid', shift_text=(3, 0))) buttons_view.elements[0].states['clicked'] = True GUI.add_element(buttons_view) search = TextBox((40, 5, 400, 30), '', default_text='Введите адрес...', name='tb_address') search_div = Div( search, Button('X', (425, 21), (29, 28), lambda: clear_search(search, _tb_info), 'delete', but_color=(255, 255, 255), hovered=(190, 190, 190), size_font=24, shift_text=(10, 7)), Button('Поиск', (500, 21), (100, 30), lambda: get_coord('_lon', '_lat', 'tb_address', text_block=_tb_info, switch=switch.on), 'but_search', but_color=(255, 255, 255), hovered=(190, 190, 190), size_font=24, shift_text=(21, 7))) GUI.add_element(search_div) switch = Switch((411, 512, 40, 25), 'Индекс', color_switch=(62, 151, 209), color_background=(240, 248, 255), color_background_on=(240, 248, 255), func=lambda: post_code(switch.on, globals()['address']) ) # func = lambda: get_post_code() globals()['address'] GUI.add_element(switch) map_file = update_static(','.join([str(_lon), str(_lat)]), _z, map_type, _pt) clock = pygame.time.Clock() while True: screen.fill((254, 202, 131)) for event in pygame.event.get(): if event.type == pygame.QUIT: os.remove(map_file) pygame.quit() sys.exit() elif event.type == pygame.KEYDOWN: if event.key == pygame.K_PAGEUP or event.key == pygame.K_w: if _z - 1 >= 2: _z -= 1 map_file = update_static( ','.join([str(_lon), str(_lat)]), _z, map_type, _pt) elif event.key == pygame.K_PAGEDOWN or event.key == pygame.K_s: if _z + 1 <= 17: _z += 1 map_file = update_static( ','.join([str(_lon), str(_lat)]), _z, map_type, _pt) elif event.key == pygame.K_RIGHT: _lon += 422.4 / (2**(_z - 1)) map_file = update_static(','.join([str(_lon), str(_lat)]), _z, map_type, _pt) elif event.key == pygame.K_LEFT: _lon -= 422.4 / (2**(_z - 1)) map_file = update_static(','.join([str(_lon), str(_lat)]), _z, map_type, _pt) elif event.key == pygame.K_UP: _lat += 178.25792 / (2**(_z - 1)) map_file = update_static(','.join([str(_lon), str(_lat)]), _z, map_type, _pt) elif event.key == pygame.K_DOWN: _lat -= 178.25792 / (2**(_z - 1)) map_file = update_static(','.join([str(_lon), str(_lat)]), _z, map_type, _pt) GUI.apply_event(event) clock.tick(60) if flag_update_map: map_file = update_static(','.join([str(_lon), str(_lat)]), _z, map_type, _pt) flag_update_map = False screen.blit(pygame.image.load(map_file), (0, 0)) GUI.update() GUI.render(screen) pygame.display.flip()
molecules = {a.lower():[add_molecules, a] for a in MOLECULES} energy = { "fire":[add_energy, "Fire", (255, 100, 0)], "pressure":[add_energy, "Pressure", (150, 220, 220)], } molecules.update(energy) GO.append(Button([0, 0, 80, 30], (255, 200, 200), "Home", switch_home, fnt_size=18)) GO.append(Button([85, 0, 120, 30], (255, 200, 200), "ChemLab", switch_chemlab, fnt_size=18)) GO.append(Button([210, 0, 100, 30], (255, 200, 200), "Explorer", switch_explorer, fnt_size=18)) GO_CLAB.append(SearchBox([20, 150, 200, 30], molecules, "mol")) GO_CLAB.append(TextBox([1500, 50, 420, 1030], (200, 200, 200), ["Empty"])) # atom data: [atom id, pos, uniq id, bond[uniq_id]] GO_HOME.append(TextBox([500, 30, 800, 1000], (200, 200, 200), ["Welcome to the Chemistry Lab!", "This is educational software to help people 'learn' chemistry", "Got demotivated after spending three hours of modeling the molecules" ])) molc_info = [] # molecule info event = [] app_loop = True while app_loop: surface.fill( (255, 255, 255) ) event = p.event.get()
def show_map(ll="37.620070,55.756640", z=16, _map_type='map', add_params=None): global map_type, flag_update_map, address, postcode global _lat, _lon, _pt flag_update_map = False postcode = '' address = None map_type = _map_type last_type = _map_type pygame.init() screen = pygame.display.set_mode((600, 540)) _z = z _lat, _lon = map(float, ll.split(',')) _pt = add_params _tb_info = TextBlock((2, 452, 490, 86), [], 24, text_color=(77, 81, 83), bg_color=(255, 255, 255), name='tb_info') GUI.add_element(_tb_info) buttons_view = DivButtons( ButtonFlag((545, 465), buts, func=lambda: change_view('map'), text='Схема', text_size=23, name='but_satellite', shift_text=(-4, 0)), ButtonFlag((545, 495), buts, func=lambda: change_view('sat'), text='Спутник', text_size=23, name='but_scheme', shift_text=(4, 0)), ButtonFlag((545, 525), buts, func=lambda: change_view('sat,skl'), text='Гибрид', text_size=23, name='but_gibrid', shift_text=(3, 0))) buttons_view.elements[0].states['clicked'] = True GUI.add_element(buttons_view) search = TextBox((40, 5, 400, 30), '', default_text='Введите адрес...', name='tb_address') search_div = Div( search, Button('X', (425, 21), (29, 28), lambda: clear_search(search, _tb_info), 'delete', but_color=(255, 255, 255), hovered=(190, 190, 190), size_font=24, shift_text=(10, 7)), Button('Поиск', (500, 21), (100, 30), lambda: get_coord('_lat', '_lon', 'tb_address', text_block=_tb_info, switch=switch.on), 'but_search', but_color=(255, 255, 255), hovered=(190, 190, 190), size_font=24, shift_text=(21, 7))) GUI.add_element(search_div) switch = Switch( (411, 512, 40, 25), 'Индекс', color_switch=(62, 151, 209), color_background=(240, 248, 255), color_background_on=(240, 248, 255), func=lambda: post_code(switch.on, globals()['address'], _tb_info.text)) GUI.add_element(switch) map_file = update_static(','.join([str(_lat), str(_lon)]), _z, map_type, _pt) clock = pygame.time.Clock() while True: screen.fill((254, 202, 131)) for event in pygame.event.get(): if event.type == pygame.QUIT: os.remove(map_file) pygame.quit() sys.exit() elif event.type == pygame.KEYDOWN: if event.key == pygame.K_PAGEUP or event.key == pygame.K_w: if _z - 1 >= 2: _z -= 1 map_file = update_static( ','.join([str(_lat), str(_lon)]), _z, map_type, _pt) if not map_file: _z += 1 map_file = update_static( ','.join([str(_lat), str(_lon)]), _z, map_type, _pt) elif event.key == pygame.K_PAGEDOWN or event.key == pygame.K_s: if _z + 1 <= 17: _z += 1 map_file = update_static( ','.join([str(_lat), str(_lon)]), _z, map_type, _pt) if not map_file: _z -= 1 map_file = update_static( ','.join([str(_lat), str(_lon)]), _z, map_type, _pt) elif event.key == pygame.K_RIGHT: _lat += 422.4 / (2**(_z - 1)) map_file = update_static(','.join([str(_lat), str(_lon)]), _z, map_type, _pt) if not map_file: _lat -= 422.4 / (2**(_z - 1)) map_file = update_static( ','.join([str(_lat), str(_lon)]), _z, map_type, _pt) elif event.key == pygame.K_LEFT: _lat -= 422.4 / (2**(_z - 1)) map_file = update_static(','.join([str(_lat), str(_lon)]), _z, map_type, _pt) if not map_file: _lat += 422.4 / (2**(_z - 1)) map_file = update_static( ','.join([str(_lat), str(_lon)]), _z, map_type, _pt) elif event.key == pygame.K_UP: _lon += 178.25792 / (2**(_z - 1)) map_file = update_static(','.join([str(_lat), str(_lon)]), _z, map_type, _pt) if not map_file: _lon -= 178.25792 / (2**(_z - 1)) map_file = update_static( ','.join([str(_lat), str(_lon)]), _z, map_type, _pt) elif event.key == pygame.K_DOWN: _lon -= 178.25792 / (2**(_z - 1)) map_file = update_static(','.join([str(_lat), str(_lon)]), _z, map_type, _pt) if not map_file: _lon += 178.25792 / (2**(_z - 1)) map_file = update_static( ','.join([str(_lat), str(_lon)]), _z, map_type, _pt) elif event.type == pygame.MOUSEBUTTONDOWN: pos = event.pos if 40 < pos[1] < 450: try: x_k = (422.4 / (2**(_z - 1))) / 600 y_k = (178.25792 / (2**(_z - 1))) / 450 x, y = pos[0] - 300, 225 - pos[1] lat, lon = _lat + x * x_k, _lon + y * y_k clear_search(search, _tb_info) address = get_address(','.join([str(lat), str(lon)])).split(', ') _tb_info.text = [address[0], ', '.join(address[1:])] post_code(switch.on, ','.join([str(lat), str(lon)]), _tb_info.text) _pt = 'pt={},{},pm2rdm'.format(lat, lon) map_file = update_static( ','.join([str(_lat), str(_lon)]), _z, map_type, _pt) except Exception as e: print('Невозможно поставить метку') GUI.apply_event(event) if flag_update_map: map_file = update_static(','.join([str(_lat), str(_lon)]), _z, map_type, _pt) if not map_file: map_type = last_type map_file = update_static(','.join([str(_lat), str(_lon)]), _z, map_type, _pt) buttons_view.elements[0].states['clicked'] = True buttons_view.elements[1].states['clicked'] = False else: last_type = map_type flag_update_map = False screen.blit(pygame.image.load(map_file), (0, 0)) GUI.update() GUI.render(screen) pygame.display.flip()