def __init__(self): # Defaults self.scale = 18 self.tile_size = (self.scale, self.scale) self.emu = None self.prev_screen = 0 self.fatal = False self.run_time = 1000 # 1000/this = Freq self.color_border = "white" self.color_fill = "white" self.color_back = "black" self.controls ={ 'KP_0':0x0, 'KP_1':0x1, 'KP_2':0x2, 'KP_3':0x3, 'KP_4':0x4, 'KP_5':0x5, 'KP_6':0x6, 'KP_7':0x7, 'KP_8':0x8, 'KP_9':0x9, 'KP_Divide':0xA, 'KP_Multiply':0xB, 'KP_Subtract':0xC, 'KP_Add':0xD, 'KP_Enter':0xE, 'KP_Decimal':0xF} # Setup audio self.wave_file = pathjoin('tortilla8','sound','play.wav') self.audio_on = False if sa is None: print("SimpleAudio is missing from your system. You can install it " + \ "via 'pip install simpleaudio'. Audio has been disabled.") else: try: self.wave_obj = sa.WaveObject.from_wave_file(self.wave_file) self.play_obj = None self.audio_playing = False self.audio_on = True except FileNotFoundError: print("An error occured while initalizing audo. Audio has been disabled.") # Init TK and canvas self.root = Tk() self.root.wm_title("Tortilla8 - A Chip8 Emulator") self.root.resizable(width=False, height=False) Frame.__init__(self, self.root) self.menubar = Menu(self.root) self.root.config(menu=self.menubar) self.root.update() self.screen = Canvas(self.root, width=Nacho.X_SIZE*self.scale, height=Nacho.Y_SIZE*self.scale) self.screen.create_rectangle( 0, 0, Nacho.X_SIZE*self.scale, Nacho.Y_SIZE*self.scale, fill=self.color_back ) self.screen.pack() # Init TK Vars self.antiflicker = BooleanVar() self.antiflicker.set(True) self.lock_aspect = BooleanVar() self.lock_aspect.set(True) # Bind some functions self.root.bind("<KeyPress>", self.key_down) self.root.bind("<KeyRelease>", self.key_up) self.root.protocol("WM_DELETE_WINDOW", self.on_closing) # Populate the 'File' section filemenu = Menu(self.menubar, tearoff=0) filemenu.add_command(label="Load Rom", command=self.load) filemenu.add_command(label="Exit", command=self.on_closing) self.menubar.add_cascade(label="File", menu=filemenu) # Populate the 'Settings' section setmenu = Menu(self.menubar, tearoff=0) setmenu.add_command(label="Display", command=self.win_display_settings) setmenu.add_command(label="Emulation", command=self.win_emu_settings) if self.audio_on: setmenu.add_command(label="Audio", command=self.win_audio_settings) else: setmenu.add_command(label="Audio", command=self.win_audio_settings, state='disable') setmenu.add_checkbutton(label="Anti-Flicker", onvalue=True, offvalue=False, variable=self.antiflicker) self.menubar.add_cascade(label="Settings", menu=setmenu) # Populate the 'Help' section helpmenu = Menu(self.menubar, tearoff=0) helpmenu.add_command(label="PyPi Index", command=lambda:openweb("https://pypi.org/project/tortilla8")) helpmenu.add_command(label="Source Code", command=lambda:openweb("https://github.com/aanunez/tortilla8")) helpmenu.add_command(label="About", command=self.window_about) self.menubar.add_cascade(label="Help", menu=helpmenu)
def open_external(): openweb('https://habr.com/ru/post/266831/')
def openGithubSite(self): openweb(config.GITHUB_HOME)
def mainloop(): while True: events = pygame.event.get() for event in events: if event.type == pygame.QUIT: terminate() elif event.type == pygame.KEYDOWN and not search_field.active: mp.update(event) elif event.type == pygame.MOUSEBUTTONDOWN and mp.sprite.rect.collidepoint( event.pos): if event.button == 1: point = mp.sprite.xy_into_ll(event.pos) spot = MapSpot() lonlat = '%f,%f' % point spot.find_toponym(geocode=lonlat, ll=lonlat) if api_switcher.checked: api_switcher.switch() api_switcher.update() if spot.point and lonlat_distance(spot.point, point) <= 50: mp.sprite.set_spot(spot, focus=False) mp.sprite.update_image() buttons = pygame.mouse.get_pressed() keys = pygame.key.get_pressed() interface.update(events, buttons, keys) update_screen() mp.draw(screen) interface.draw(screen) pygame.display.flip() # input mode switcher if im_switcher.checked: interface.add(rt_label) interface.add(record_button) search_field.set_text('') interface.remove(search_field) interface.remove(search_button) else: interface.add(search_field) interface.add(search_button) rt_label.set_text('') rt_label.update() interface.remove(rt_label) interface.remove(record_button) # on search button click if search_button.pressed: request_text = search_field.text if request_text: spot = MapSpot() if api_switcher.checked: spot.find_organization(text=request_text, type='biz') else: spot.find_toponym(geocode=request_text) if spot.point: # setting this spot on map mp.sprite.set_spot(spot, focus=True) mp.sprite.update_image() # on record button click if record_button.pressed: request_text = jarvis.listen() if request_text: spot = MapSpot() if api_switcher.checked: spot.find_organization(text=request_text, type='biz') else: spot.find_toponym(geocode=request_text) if spot.point: rt_label.set_text(request_text) rt_label.update() # setting this spot on map mp.sprite.set_spot(spot, focus=True) mp.sprite.update_image() # on reset button click elif reset_button.pressed: record_button.pressed = False record_button.update() mp.sprite.set_spot(None) mp.sprite.update_image() # on home button click elif home_button.pressed: home_button.pressed = False home_button.update() mp.sprite.set_spot(mp.sprite.spot, focus=True) mp.sprite.update_image() # on help button click elif help_button.pressed: help_button.pressed = False help_button.update() openweb('http://localhost:8080/help') # on info button click elif info_button.pressed: info_button.pressed = False info_button.update() if mp.sprite.spot: text = 'No address found.' if mp.sprite.spot.toponym: text_base = mp.sprite.spot.toponym text = text_base['metaDataProperty']['GeocoderMetaData'][ 'Address']['formatted'] elif mp.sprite.spot.organization: text_base = mp.sprite.spot.organization text = text_base['properties']['CompanyMetaData'][ 'address'] jarvis.say(text) if dialog_window(): response = None if mp.sprite.spot.toponym: response = requests.get('http://localhost:8080/index', json={ 'api': 'geocoder', 'response': mp.sprite.spot.toponym }) elif mp.sprite.spot.organization: response = requests.get('http://localhost:8080/index', json={ 'api': 'geosearch', 'response': mp.sprite.spot.organization }) with open('templates/info.html', 'w', encoding='utf-8') as file: file.write(response.text) openweb('http://localhost:8080/information') clock.tick(20)
def onOpenGithubProj(self): openweb(config.GITHUB_HOME)
def on_but_register(self, event): openweb('https://sm.ms/register')