def _setup_left_frame(self): ''' The left frame mostly consists of the tree widget ''' self.all_tests_tree = toga.Tree( ['Test'], accessors=['label'], data=self.test_suite, multiple_select=True ) self.all_tests_tree.on_select = self.on_test_selected self.problem_tests_tree = toga.Tree( ['Test'], accessors=['label'], data=TestSuiteProblems(self.test_suite), multiple_select=True ) self.problem_tests_tree.on_select = self.on_test_selected self.tree_notebook = toga.OptionContainer( content=[ ('All tests', self.all_tests_tree), ('Problems', self.problem_tests_tree) ], on_select=self.on_tab_selected )
def results_pane(self): results_pane = toga.OptionContainer(style=Pack(width=280, padding_left=20)) self.qr_image = toga.ImageView(id='qr', image=None, style=Pack(width=250, height=250, padding_bottom=10)) self.save_qr_button = toga.Button('Save QR', on_press=self.save_qr ,style=Pack(alignment=CENTER, width=250)) self.qr_box = toga.Box( children=[self.qr_image, self.save_qr_button], style=Pack(direction=COLUMN, padding=10, width=270) ) results_pane.add('QR Code', self.qr_box) self.xmp_text = toga.MultilineTextInput( style=Pack(width=270, height=350, padding=5) ) self.xmp_button = toga.Button( 'Save XMP', on_press=self.save_xmp, style=Pack(width=250, alignment=CENTER) ) self.xmp_box = toga.Box( children=[self.xmp_text, self.xmp_button], style=Pack(direction=COLUMN) ) results_pane.add('XMP', self.xmp_box) return results_pane
def test_set_content_in_constructor(self): new_container = toga.OptionContainer(style=TestStyle(), factory=toga_dummy.factory, content=[ (self.label, self.widget), (self.label2, self.widget2), (self.label3, self.widget3), ]) self.assertEqual(len(new_container.content), 3) self.assertEqual(new_container.content[0]._content, self.widget) self.assertEqual(new_container.content[1]._content, self.widget2) self.assertEqual(new_container.content[2]._content, self.widget3)
def setUp(self): super().setUp() self.on_select = mock.Mock() self.op_container = toga.OptionContainer(style=TestStyle(), factory=toga_dummy.factory, on_select=self.on_select) self.widget = toga.Box(style=TestStyle(), factory=toga_dummy.factory) self.label2, self.widget2 = "Widget 2", toga.Box( style=TestStyle(), factory=toga_dummy.factory) self.label3, self.widget3 = "Widget 3", toga.Box( style=TestStyle(), factory=toga_dummy.factory) self.label = 'New Container' self.op_container.add(self.label, self.widget)
def build(app): box = toga.Box(children=[toga.Button('My Button')]) option_container = toga.OptionContainer() tab_1_content = toga.Box( children=[toga.Button('Button 1.{}'.format(x)) for x in range(6)], style=tab_style) option_container.add('Tab 1', tab_1_content) tab_2_content = toga.Box( children=[toga.Button('Button 2.{}'.format(x)) for x in range(6)], style=tab_style) option_container.add('Tab 2', tab_2_content) tab_3_content = toga.Box( children=[toga.Button('Button 3.{}'.format(x)) for x in range(6)], style=tab_style) option_container.add('Tab 3', tab_3_content) return option_container
def startup(self): self.main_window = toga.MainWindow(title=self.name, size=(1280,800)) self.debug_label = toga.Label("Waiting For League of Legends Client.") #self.main_window.on_close = self.on_window_close container = toga.OptionContainer(on_select=self.change_option, style=Pack(flex=1)) # views self.webview_professorgg = ProfessorGG(self.client_data, style=Pack(flex=1)) container.add(self.webview_professorgg.site, toga.Box(children=[self.webview_professorgg], style=Pack(flex=1))) self.webview_professorgglivegame = ProfessorGGLiveGame(self.client_data, style=Pack(flex=1)) container.add(self.webview_professorgglivegame.site, toga.Box(children=[self.webview_professorgglivegame], style=Pack(flex=1))) self.webview_leaguefriendrunepage = LeagueFriendRunePage(self.client_data, style=Pack(flex=1)) container.add(self.webview_leaguefriendrunepage.site, toga.Box(children=[self.webview_leaguefriendrunepage], style=Pack(flex=1))) self.webview_blitzggpostgame = BlitzGG(self.client_data, style=Pack(flex=1)) container.add(self.webview_blitzggpostgame.site, toga.Box(children=[self.webview_blitzggpostgame], style=Pack(flex=1))) box = toga.Box( children=[ container, self.debug_label ], style=Pack( direction=COLUMN, padding="5", flex=1 ) ) self.main_window.content = box # Show the main window self.main_window.show()
def build(app): container = toga.OptionContainer() box1 = toga.Box() button = toga.Button('Hello world', on_press=button_handler) button.style.padding = 50 button.style.flex = 1 label = toga.NumberInput(min_value=10.5, max_value=50.6, on_change=lambda app: print(app.value)) label.text = 'Hola Mundo' selection = toga.Selection(items=['Casella', 'Pedro Infante', 'Camilo'], on_select=lambda app: print(app.value)) selection.items = ['321', '123', '456', '654', '789', '987'] box1.add(button) box1.add(label) box1.add(selection) box2 = toga.Box() image = toga.Image('../../static/images/tiberius.svg') imageview = toga.ImageView(image) slider = toga.Slider(range=(30, 50), on_slide=lambda app: print(app.value)) box2.add(imageview) box2.add(slider) container.add('Window 1', box1) container.add('Window 2', box2) return container
def startup(self): # Create the main window self.main_window = toga.MainWindow(self.name) left_container = toga.OptionContainer() left_table = toga.Table(headings=['Hello', 'World'], data=[ ('root1', 'value1'), ('root2', 'value2'), ('root3', 'value3'), ('root4', 'value4'), ]) left_tree = toga.Tree(headings=['Navigate'], data={ ('root1', ): {}, ('root2', ): { ('root2.1', ): None, ('root2.2', ): [ ('root2.2.1', ), ('root2.2.2', ), ('root2.2.3', ), ] } }) left_container.add('Table', left_table) left_container.add('Tree', left_tree) right_content = toga.Box(style=Pack(direction=COLUMN)) for b in range(0, 10): right_content.add( toga.Button('Hello world %s' % b, on_press=self.button_handler, style=Pack(padding=20))) right_container = toga.ScrollContainer() right_container.content = right_content split = toga.SplitContainer() split.content = [left_container, right_container] cmd1 = toga.Command( self.action1, 'Action 1', tooltip='Perform action 1', icon='resources/brutus', ) cmd2 = toga.Command(self.action2, 'Action 2', tooltip='Perform action 2', icon=toga.Icon.TOGA_ICON) self.main_window.toolbar.add(cmd1, cmd2) self.main_window.content = split # Show the main window self.main_window.show()
def startup(self): # Create the main window self.main_window = toga.MainWindow(self.name) self.main_window.app = self left_container = toga.OptionContainer() left_table = toga.Table(['Hello', 'World']) left_table.insert(None, 'root1', 'value1') left_table.insert(None, 'root2', 'value2') left_table.insert(None, 'root3', 'value3') left_table.insert(1, 'root4', 'value4') left_tree = toga.Tree(['Navigate']) left_tree.insert(None, None, 'root1') root2 = left_tree.insert(None, None, 'root2') left_tree.insert(root2, None, 'root2.1') root2_2 = left_tree.insert(root2, None, 'root2.2') left_tree.insert(root2_2, None, 'root2.2.1') left_tree.insert(root2_2, None, 'root2.2.2') left_tree.insert(root2_2, None, 'root2.2.3') left_container.add('Table', left_table) left_container.add('Tree', left_tree) right_content = toga.Box() for b in range(0, 10): right_content.add( toga.Button('Hello world %s' % b, on_press=self.button_handler, style=CSS(margin=20))) right_container = toga.ScrollContainer() right_container.content = right_content split = toga.SplitContainer() split.content = [left_container, right_container] cmd1 = toga.Command(self.action1, 'Action 1', tooltip='Perform action 1', icon=os.path.join(os.path.dirname(__file__), 'icons/brutus-32.png')) cmd2 = toga.Command(self.action2, 'Action 2', tooltip='Perform action 2', icon=toga.TIBERIUS_ICON) self.main_window.toolbar = [cmd1, toga.SEPARATOR, cmd2] self.main_window.content = split # Show the main window self.main_window.show()
def create_controls(self): # Vaults: Box self.app_box = toga.Box( style=Pack(direction=COLUMN, flex=1, padding=10)) global_controls.add('Vaults', self.app_box.id) # Vaults -> Top Nav: Box self.nav_box = toga.Box( style=Pack(direction=ROW, flex=1, alignment="top")) self.app_box.add(self.nav_box) global_controls.add('Vaults_TopNav', self.nav_box.id) # Vaults -> Top Nav -> RefreshVautls: Button self.refresh_vaults_button = toga.Button( TEXT['BTN_REFRESH_VAULTS'], on_press=self.on_refresh_vaults) self.nav_box.add(self.refresh_vaults_button) global_controls.add('Vaults_TopNav_RefreshVaults', self.refresh_vaults_button.id) # Vaults -> Top Nav -> CreateVault: Button create_vault_button = toga.Button('New Vault', on_press=self.on_create_vault) self.nav_box.add(create_vault_button) global_controls.add('Vaults_TopNav_NewVault', create_vault_button.id) # Vaults -> Top Nav -> DeleteVault: Button delete_vault_btn = toga.Button('Delete Vault', enabled=False, on_press=self.on_delete_vault) global_controls.add('Vaults_TopNav_DeleteVault', delete_vault_btn.id) self.nav_box.add(delete_vault_btn) # Vautls -> TableContainer: Box list_box = toga.Box(style=Pack( direction=COLUMN, flex=1, padding_top=5, alignment="top")) self.app_box.add(list_box) global_controls.add('Vaults_TableContainer', list_box.id) # Vautls -> TableContainer -> VaultsTable: Table self.vaults_table = Table(headers=HEADERS) self.vaults_table.subscribe('on_select_row', self.callback_row_selected) list_box.add(self.vaults_table.getbox()) global_controls.add_from_controls(self.vaults_table.getcontrols(), 'Vaults_TableContainer_') # Vaults -> Upload: Box add_file_box = toga.Box( style=Pack(direction=COLUMN, flex=1, padding_top=20)) self.app_box.add(add_file_box) global_controls.add('Vaults_Upload', add_file_box.id) # Vaults -> Upload -> Title: Box upload_vault_title_box = toga.Box(style=Pack(direction=COLUMN, flex=1)) add_file_box.add(upload_vault_title_box) global_controls.add('Vaults_Upload_Title', upload_vault_title_box.id) # Vaults -> Upload -> VaultName: Label upload_label = TEXT['LABEL_UPLOAD_VAULT'] % ('-') label_upload_vaultname = toga.Label(upload_label, style=STYLES['TITLE']) upload_vault_title_box.add(label_upload_vaultname) global_controls.add('Vaults_Upload_VaultName', label_upload_vaultname.id) # Vaults -> Upload -> InputFileBox input_file_box = toga.Box( style=Pack(direction=ROW, flex=1, padding_top=5)) add_file_box.add(input_file_box) global_controls.add('Vaults_Upload_InputFileBox', input_file_box.id) # Vaults -> Upload -> VaultPath: TextInput self.input_path = toga.TextInput(readonly=True, style=Pack(flex=2)) self.input_path.value = '' input_file_box.add(self.input_path) global_controls.add('Vaults_Upload_VaultPath', self.input_path.id) # Vaults -> Upload -> SearchFile: Button searchfile_upload = toga.Button('Browse', on_press=self.on_searchfile_btn, style=Pack(padding_left=5, flex=1)) input_file_box.add(searchfile_upload) global_controls.add('Vaults_Upload_SearchFileBtn', searchfile_upload.id) # Vaults -> Upload -> Button: Button self.button_upload = toga.Button('Upload', on_press=self.on_upload_file, style=Pack(padding_top=10, width=100, alignment='right')) add_file_box.add(self.button_upload) global_controls.add('Vaults_Upload_Button', self.button_upload.id) # VaultDetail: Box self.vault_box = toga.Box( style=Pack(direction=COLUMN, flex=1, padding=10)) global_controls.add('VaultDetail', self.vault_box.id) # VaultDetail -> VaultTitle: Label self.vault_title = toga.Label('Vault selected: -', style=Pack(font_size=16, padding_bottom=5)) self.vault_box.add(self.vault_title) global_controls.add('VaultDetail_VaultTitle', self.vault_title.id) # VaultDetail -> VaultPendingJobs: Label self.vault_pending_jobs = toga.Label('%s 0' % (TEXT['PENDING_INVENTORY_JOBS'])) self.vault_box.add(self.vault_pending_jobs) global_controls.add('VaultDetail_VaultPendingJobs', self.vault_pending_jobs.id) # VaultDetail -> ArchivesTable: Table self.archives_table = Table(headers=HEADERS_ARCHIVES) self.archives_table.subscribe('on_select_row', self.callback_row_selected_archive) self.vault_box.add(self.archives_table.getbox()) global_controls.add_from_controls(self.archives_table.getcontrols(), 'VaultDetail_TableContainer_') # VaultDetail -> BottomNav: Box self.bottom_nav_vault = toga.Box( style=Pack(direction=ROW, flex=1, padding_top=5)) self.vault_box.add(self.bottom_nav_vault) global_controls.add('Vaults_BottomNavVault', self.bottom_nav_vault.id) # VaultDetail -> StartInventoryJobButton: Button btn_start_inv_job = toga.Button(TEXT['BTN_START_INV_JOB'], on_press=self.on_btn_start_inv_job, enabled=False) self.bottom_nav_vault.add(btn_start_inv_job) global_controls.add('VaultDetail_StartInventoryJobButton', btn_start_inv_job.id) # VaultDetail -> CheckJobsButton: Button self.btn_check_jobs = toga.Button('Check Jobs', on_press=self.on_btn_check_jobs) self.bottom_nav_vault.add(self.btn_check_jobs) global_controls.add('VaultDetail_CheckJobsButton', self.btn_check_jobs.id) # VaultDetail -> ArchiveBox: Box self.archive_selected_box = toga.Box( style=Pack(direction=COLUMN, flex=1, padding_top=15)) self.vault_box.add(self.archive_selected_box) global_controls.add('Vaults_ArchiveBox', self.archive_selected_box.id) self.archive_selected_box._impl.set_hidden(False) # VaultDetail -> VaultTitle: Label self.archive_title = toga.Label('Archive selected: -', style=Pack(font_size=16, padding_bottom=1)) self.archive_selected_box.add(self.archive_title) global_controls.add('VaultDetail_ArchiveTitle', self.archive_title.id) # VaultDetail -> PendingDownload: Label vault_pending_archive_down = toga.Label('%s 0' % (TEXT['PENDING_ARCHIVE_JOBS'])) self.archive_selected_box.add(vault_pending_archive_down) global_controls.add('VaultDetail_PendingDownload', vault_pending_archive_down.id) # VaultDetail -> ArchiveDownloadBox: Box self.archive_download_box = toga.Box( style=Pack(direction=ROW, flex=1, padding_top=4)) self.archive_selected_box.add(self.archive_download_box) global_controls.add('Vaults_ArchiveDownloadBox', self.archive_download_box.id) # VaultDetail -> StartDownloadArchiveJobButton: Button self.btn_request_download_job = toga.Button( 'Start Download Archive Job', on_press=self.on_btn_request_download_job) self.archive_download_box.add(self.btn_request_download_job) global_controls.add('VaultDetail_StartDownloadArchiveJobButton', self.btn_request_download_job.id) # VaultDetail_DeleteArchive: Button self.btn_delete_archive = toga.Button('Delete', enabled=False, on_press=self.on_delete_archive) self.archive_download_box.add(self.btn_delete_archive) global_controls.add('VaultDetail_DeleteArchive', self.btn_delete_archive.id) # credentials fields = [ { 'name': 'account_id', 'label': 'Account ID:', 'validate': ['notnull'], }, { 'name': 'access_key', 'label': 'Access Key:', }, { 'name': 'secret_key', 'label': 'Secret Key:', }, { 'name': 'region_name', 'label': 'Region Name:', }, ] confirm = { 'label': 'Save credentials', 'callback': self.callback_create_account } self.account_form = Form(fields=fields, confirm=confirm, initial=Account.getaccount()) self.credentials_box = self.account_form.getbox() global_controls.add_from_controls(self.account_form.getcontrols(), 'Credentials_') # OnProgress: Box self.onprogress_box = toga.Box(style=STYLES['OPTION_BOX']) global_controls.add('OnProgress', self.onprogress_box.id) # OnProgress > OnProgressTable: Table self.progress_table = Table(headers=HEADERS_ON_PROGRESS) #self.progress_table.subscribe('on_select_row', self.callback_row_selected) self.onprogress_box.add(self.progress_table.getbox()) global_controls.add_from_controls(self.progress_table.getcontrols(), 'OnProgress_TableContainer_') # OnProgress_PauseUpload: Button self.btn_pause_upload = toga.Button('Pause', on_press=self.on_pause_upload) self.onprogress_box.add(self.btn_pause_upload) global_controls.add('OnProgress_PauseUpload', self.btn_pause_upload.id) # OnProgress_ResumeUpload: Button self.btn_resume_upload = toga.Button('Resume', on_press=self.on_resume_upload) self.onprogress_box.add(self.btn_resume_upload) global_controls.add('OnProgress_ResumeUpload', self.btn_resume_upload.id) # OnProgress_AbortUpload: Button self.btn_abort_upload = toga.Button('Abort', on_press=self.on_abort_upload) self.onprogress_box.add(self.btn_abort_upload) global_controls.add('OnProgress_AbortUpload', self.btn_abort_upload.id) # DownloadBox # -- downloadjob_table # -- download_buttons_box # ---- Download Archive # ---- Delete Job # -- DownloadFolderBox # ---- Input Folder Selected # ---- Btn select folder open dialog # -- Table Current downloads # DownloadBox: Box (Inside Option Download) self.downloads_box = toga.Box(style=STYLES['OPTION_BOX']) global_controls.add('DownloadBox', self.downloads_box.id) # DownloadBox > TableJobs self.downloadjob_table = Table(headers=HEADERS_DOWNLOADS_JOBS, height=200) self.downloads_box.add(self.downloadjob_table.getbox()) global_controls.add_from_controls(self.downloadjob_table.getcontrols(), 'DownloadBox_TableJobs_') # DownloadButtonsBox self.downloads_buttons_box = toga.Box( style=Pack(direction=ROW, padding_top=5)) global_controls.add('DownloadButtonsBox', self.downloads_buttons_box.id) # DownloadButtonsBox: Download Archive self.btn_download_rom_job = toga.Button( 'Download archive from Job', on_press=self.on_download_archive_from_job) self.downloads_buttons_box.add(self.btn_download_rom_job) global_controls.add('DownloadBox_BtnDownload', self.btn_download_rom_job.id) # DownloadButtonsBox: Delete Job self.btn_mark_job_as_done = toga.Button('Mark job as done', on_press=self.on_mark_as_done) self.downloads_buttons_box.add(self.btn_mark_job_as_done) global_controls.add('DownloadBox_BtnMarkAsDone', self.btn_mark_job_as_done.id) # DownloadFolderBox self.downloads_folder_box = toga.Box( style=Pack(direction=ROW, padding_top=5)) global_controls.add('DownloadFolderBox', self.downloads_folder_box.id) # Vaults_Download_Folder: TextInput self.folder_path = toga.TextInput(readonly=True, style=Pack(flex=2)) self.folder_path.value = '' self.downloads_folder_box.add(self.folder_path) global_controls.add('Vaults_Download_Folder', self.folder_path.id) # Button for open select folder dialog self.btn_dialog_select_folder = toga.Button( '...', on_press=self.on_set_folderpath_destination) self.downloads_folder_box.add(self.btn_dialog_select_folder) global_controls.add('DownloadBox_BtnOpenDialogSelectFolder', self.btn_dialog_select_folder.id) self.downloads_box.add(self.downloads_buttons_box) self.downloads_box.add(self.downloads_folder_box) # DownloadBox > TableCurrent self.current_downloads_table = Table(headers=HEADERS_DOWNLOADS_CURRENT, height=175) self.downloads_box.add(self.current_downloads_table.getbox()) global_controls.add_from_controls( self.current_downloads_table.getcontrols(), 'DownloadBox_TableCurrent_') # Main -> OptionContainer: OptionContainer self.container = toga.OptionContainer(style=Pack(padding=10, direction=COLUMN), on_select=self.on_select_option) self.container.add('Vaults', self.app_box) self.container.add('Vault Detail', self.vault_box) # container.add('Jobs', self.jobs_box) self.container.add('Uploads', self.onprogress_box) self.container.add('Downloads', self.downloads_box) self.container.add('Credentials', self.credentials_box) self.main_box.add(self.container) # disable vaults detail option #option_enabled(self.container, 1, False) global_controls.add('Main_OptionContainer', self.container.id)
def startup(self): # Set up main window self.main_window = toga.MainWindow(title=self.name) # styles style_flex = Pack(flex=1, padding=5) style_row = Pack(direction=ROW, flex=1) style_select = Pack(direction=ROW, flex=1, padding_right=10) style_col = Pack(direction=COLUMN, flex=1) # select label_select = toga.Label('Select an Option position:', style=style_flex) self.select_option = toga.Selection(style=style_flex) # buttons btn_remove = toga.Button('Remove', on_press=self.on_remove_option, style=style_flex) btn_enabled = toga.Button('Toggle enabled', on_press=self.on_enable_option, style=style_flex) # change label self.input_change_title = toga.TextInput(style=style_flex) btn_change_title = toga.Button('Change title', on_press=self.on_change_option_title, style=style_flex) box_select = toga.Box(style=style_select, children=[label_select, self.select_option]) box_actions_col1 = toga.Box(style=style_row, children=[btn_remove, btn_enabled]) box_actions_col2 = toga.Box( style=style_row, children=[self.input_change_title, btn_change_title]) box_actions = toga.Box(style=style_col, children=[box_actions_col1, box_actions_col2]) box_container_actions = toga.Box(style=style_row, children=[box_select, box_actions]) self.selected_label = toga.Label("") self.optioncontainer = toga.OptionContainer( on_select=self.on_select_tab, style=Pack(padding_bottom=20)) self._create_options() btn_add = toga.Button('Add Option', on_press=self.on_add_option) box_general_actions = toga.Box(style=Pack(padding_bottom=10), children=[btn_add]) # Outermost box outer_box = toga.Box(children=[ box_general_actions, box_container_actions, self.selected_label, self.optioncontainer, ], style=Pack( flex=1, direction=COLUMN, padding=10, )) self.commands.add( toga.Command(self.set_next_tab, "Next tab", shortcut=toga.Key.MOD_1 + toga.Key.RIGHT, group=toga.Group.COMMANDS, order=1), toga.Command(self.set_previous_tab, "Previous tab", shortcut=toga.Key.MOD_1 + toga.Key.LEFT, group=toga.Group.COMMANDS, order=1)) # Add the content on the main window self.main_window.content = outer_box # Show the main window self.main_window.show()
def setUp(self): super().setUp() self.op_container = toga.OptionContainer(style=TestStyle(), factory=toga_dummy.factory)
def startup(self): self.main_window = toga.MainWindow(title=self.name, size=(1280, 800)) container = toga.OptionContainer(on_select=self.change_option, style=Pack(flex=1)) copy_url = toga.Command(self.setClipboardData, label="Copy URL", tooltip='Copy the current URL') self.commands.add(copy_url) self.view = None if self.summoners['option'] == 'pregame': for func in [ processor_ProfessorGG, processor_OPGG, processor_LeagueFriend ]: url, script, site = func(self.summoners['data'], self.summoners['region']) webview = BrowserWebview(style=Pack(flex=1)) webview.setData(url, script) container.add(site, toga.Box(children=[webview], style=Pack(flex=1))) if not self.view: self.view = webview if func == processor_LeagueFriend: self.webview_runes = webview if self.summoners['option'] == 'postgame': for func in [processor_BlitzPostGame]: url, script, site = func(self.summoners['data'], self.summoners['region']) webview = BrowserWebview(style=Pack(flex=1)) webview.setData(url, script) #webview.url = url container.add( site, toga.Box(children=[webview], style=Pack(padding="5"))) if not self.view: self.view = webview global __DEBUG__ if __DEBUG__: self.debug_webview = toga.WebView(style=Pack(flex=1)) container.add( "DEBUG", toga.Box(children=[self.debug_webview], style=Pack(flex=1))) self.log("Started. 1") self.log("Started. 2") box = toga.Box(children=[container], style=Pack(direction=COLUMN, padding="10", flex=1)) self.main_window.content = box # start rpc if self.summoners['option'] == 'pregame': rpc_thread = threading.Thread(target=self.rpc_server) rpc_thread.start() # Show the main window self.main_window.show()
def setUp(self): self.factory = MagicMock() self.factory.OptionContainer = MagicMock(return_value=MagicMock( spec=toga_dummy.factory.OptionContainer)) self.op_container = toga.OptionContainer(factory=self.factory)
def startup(self): # Paths and files ospath = os.path.dirname(sys.argv[0]) self.CONFIG_FILE = ospath + '\\config' # Constants self.CHECKUP_TIME = 20 * 60 self.BREAK_TIME = 20 # Activity box activity_box = toga.Box( style=Pack(direction=COLUMN, background_color='aqua')) self.timer_running = False title_label = toga.Label('Eye Help', style=Pack(padding_left=50, padding_right=50, padding_top=20, font_family='monospace', font_size=30, font_weight='bold')) instruction = 'Start and stop timer to track your screen use and eye blinks' instructions_box = MultilineLabel(instruction, box_style=Pack(direction=COLUMN, padding_left=50, padding_top=10), label_style=Pack( padding_bottom=10, font_family='monospace', font_size=12), char_line=35) self.start_button = toga.Button('Start Timer!', on_press=self.begin_timer, style=Pack(padding_left=50, padding_right=50, padding_top=20, background_color='violet', height=50, font_family='monospace', font_size=20)) self.stop_button = toga.Button('Stop Timer!', on_press=self.stop_timer, style=Pack(padding_left=50, padding_right=50, padding_top=20, padding_bottom=10, background_color='violet', height=50, font_family='monospace', font_size=20), enabled=False) # https://www.healthline.com/health/how-many-times-do-you-blink-a-day blinks_label = MultilineLabel( 'It is recommended to blink 15 - 20 times in a minute', box_style=Pack(direction=COLUMN, padding_bottom=10, background_color='aqua'), label_style=Pack(padding_left=50, background_color='aqua', font_family='monospace', font_size=12), char_line=35) activity_box.add(title_label) activity_box.add(self.start_button) activity_box.add(self.stop_button) activity_box.add(instructions_box) activity_box.add(blinks_label) # Eye tips box # https://www.mayoclinic.org/diseases-conditions/eyestrain/diagnosis-treatment/drc-20372403 # https://www.health.ny.gov/prevention/tobacco_control/smoking_can_lead_to_vision_loss_or_blindness # https://www.health.harvard.edu/blog/will-blue-light-from-electronic-devices-increase-my-risk-of-macular-degeneration-and-blindness-2019040816365 self.eye_tips = [ 'Try to not to use very bright lighting as the glare can strain your eyes and make the screen harder to look at', 'Try to put light sources in places that do not directly shine on your eyes', 'Using non-prescripted eye drops can help relieve dry eyes. Try to get ones recommended by your doctor', 'Make sure you screens are at least an arms length away from your eyes', 'Improve the air quality the air by getting a humidifier or adjusting the thermostat', 'If you smoke, try to stop as it can lead to diseases related to vision loss', 'Low levels of blue light (emitted froms screens and most lights) do not affect your eyes, but high levels can be hazardous to your eyes', 'Blue light affects your biological clock (sleep cycle) so try to avoid screens and bright lights before or while you sleep', '20-20-20 Every 20 minutes focus at an object 20 feet far for at least 20 seconds', # done by timer '...' ] eye_tips_box = toga.Box(style=Pack( direction=COLUMN, padding_bottom=10, background_color='aqua')) for tip in self.eye_tips: tip_box = MultilineLabel(tip, box_style=Pack(direction=COLUMN, padding_bottom=10, background_color='wheat'), label_style=Pack(background_color='aqua', font_family='monospace', font_size=15), char_line=28) eye_tips_box.add(tip_box) eye_tips_scroll = toga.ScrollContainer(style=Pack( direction=COLUMN, padding=(5, 5), background_color='red')) eye_tips_scroll.content = eye_tips_box # Calibrate box calibrate_box = toga.Box( style=Pack(direction=COLUMN, background_color='aqua')) calibrate_info = toga.Label('You will be given instructions', style=Pack(padding_left=10, padding_top=10, font_family='monospace', font_size=15)) calibrate_button = toga.Button('Calibrate', style=Pack(padding_left=50, padding_right=50, padding_top=20, padding_bottom=20, background_color='violet', font_family='monospace', font_size=20), on_press=self.start_calibrate) calibrate_when = MultilineLabel( 'Use this if you feel that blinks are not being counted correctly', box_style=Pack(direction=COLUMN, padding_bottom=10, background_color='aqua'), label_style=Pack(padding_left=10, font_family='monospace', font_size=15)) graph_button = toga.Button('Graph Eye Aspect Ratio', style=Pack(padding_left=50, padding_right=50, padding_top=10, padding_bottom=10, background_color='violet', font_family='monospace', font_size=15), on_press=self.start_graph) EAR_definition = MultilineLabel( '*Eye aspect ratio is lower the more your eyes close', box_style=Pack(direction=COLUMN, padding_bottom=10, background_color='aqua'), label_style=Pack(padding_left=10, font_family='monospace', font_size=13)) # manual calibration is a work in progress manual_label = toga.Label('Manually calibrate (pick EAR) here', style=Pack(padding_left=10, padding_top=10, font_family='monospace', font_size=15)) manual_label2 = toga.Label('Pick a value that seems like a blink', style=Pack(padding_left=10, padding_top=10, font_family='monospace', font_size=15)) manual_input = toga.NumberInput(min_value=1, max_value=99, style=Pack(padding=(10, 50), width=50)) calibrate_box.add(calibrate_when) calibrate_box.add(calibrate_button) calibrate_box.add(calibrate_info) calibrate_box.add(graph_button) calibrate_box.add(EAR_definition) # Config box config_box = toga.Box( style=Pack(direction=COLUMN, background_color='aqua')) self.video_switch = toga.Switch('Show Video', style=Pack(padding_left=50, padding_right=50, padding_top=20, padding_bottom=20, font_family='monospace', font_size=20), is_on=self.tobool( self.read_config()[1])) save_button = toga.Button('Save Configuration', style=Pack(padding_left=50, padding_right=50, padding_top=20, padding_bottom=20, background_color='violet', font_family='monospace', font_size=20), on_press=self.save_config) reset_button = toga.Button('Reset Configuration', style=Pack(padding_left=50, padding_right=50, padding_top=20, padding_bottom=20, background_color='red', font_family='monospace', font_size=20), on_press=self.reset_config) config_box.add(self.video_switch) config_box.add(save_button) config_box.add(reset_button) # options - toolbar options = toga.OptionContainer(style=Pack(direction=ROW, background_color='snow', font_family='monospace', font_size=15)) options.add('Activity', activity_box) options.add('Eye tips', eye_tips_scroll) options.add('Calibrate', calibrate_box) options.add('Configure', config_box) main_box = toga.Box(style=Pack( padding=(10, 10), direction=COLUMN, background_color='snow')) main_box.add(options) # Create and show main window self.main_window = toga.MainWindow(title=self.formal_name, size=(640, 480), resizeable=False) self.main_window.content = main_box self.main_window.show()
def startup(self): # Set up main window self.main_window = toga.MainWindow(title=self.name) # styles style_flex = Pack(flex=1, padding=5) style_row = Pack(direction=ROW, flex=1) style_select = Pack(direction=ROW, flex=1, padding_right=10) style_col = Pack(direction=COLUMN, flex=1) # select label_select = toga.Label('Select an Option position:', style=style_flex) self.select_option = toga.Selection(style=style_flex) # buttons btn_remove = toga.Button('Remove', on_press=self.on_remove_option, style=style_flex) btn_enabled = toga.Button('Toggle enabled', on_press=self.on_enable_option, style=style_flex) # change label self.input_change_title = toga.TextInput(style=style_flex) btn_change_title = toga.Button('Change title', on_press=self.on_change_option_title, style=style_flex) box_select = toga.Box(style=style_select, children=[label_select, self.select_option]) box_actions_col1 = toga.Box(style=style_row, children=[btn_remove, btn_enabled]) box_actions_col2 = toga.Box( style=style_row, children=[self.input_change_title, btn_change_title]) box_actions = toga.Box(style=style_col, children=[box_actions_col1, box_actions_col2]) box_container_actions = toga.Box(style=style_row, children=[box_select, box_actions]) self.optioncontainer = toga.OptionContainer(style=Pack( padding_bottom=20)) self._create_options() btn_add = toga.Button('Add Option', on_press=self.on_add_option) box_general_actions = toga.Box(style=Pack(padding_bottom=10), children=[btn_add]) # Outermost box outer_box = toga.Box(children=[ box_general_actions, box_container_actions, self.optioncontainer ], style=Pack( flex=1, direction=COLUMN, padding=10, )) # Add the content on the main window self.main_window.content = outer_box # Show the main window self.main_window.show()
def startup(self): main_box = toga.Box(id="mainbox", style=Pack(direction=COLUMN, padding=5)) self.solver = solver() self.detector = detector() self.ImagePath = None self.ROIPath = None self.Preview = toga.ImageView( image=toga.Image("resources/blank_sudoku.jpg")) self.grid = [] self.hideROI = True self.imgLoaded = False self.ImgStatusLabel = None for i in range(9): self.grid.append([]) row = toga.Box(style=Pack(direction=ROW, padding=0)) for j in range(9): self.grid[i].append( toga.Button(label=" ", id='{}{}'.format(i, j), on_press=self.pressedButton, style=Pack(flex=1, background_color="white"))) row.add(self.grid[i][j]) if (j + 1) % 3 == 0 and j < 8: row.add(toga.Label(style=Pack(padding=0), text="\t")) main_box.add(row) if (i + 1) % 3 == 0 and i < 8: main_box.add(toga.Label(text="\t")) #adding solvebutton main_box.add(toga.Label(text="\t")) main_box.add( toga.Button(label="Get obvious Fields", on_press=self.obviousButton)) main_box.add(toga.Button(label="Solve", on_press=self.solveButton)) selection_box = toga.Box(id="imagebox", style=Pack(direction=ROW, padding=10)) selection_buttons = toga.Box(style=Pack(direction=COLUMN, padding=5)) selection_buttons.add( toga.Button(label="Open ", on_press=self.openButton)) selection_buttons.add( toga.Button(label="ROI ", on_press=self.switchButton, style=Pack(direction=COLUMN))) self.ImgStatusLabel = toga.Label(text="Select an Image") selection_buttons.add(toga.Label(text="")) selection_buttons.add(self.ImgStatusLabel) selection_box.add(selection_buttons) selection_box.add(self.Preview) option = toga.OptionContainer() option.add("Image", selection_box) option.add("Sudoku", main_box) #init window self.main_window = toga.MainWindow(title=self.formal_name) self.main_window.content = option self.main_window.show()
def setUp(self): super().setUp() self.op_container = toga.OptionContainer(factory=toga_dummy.factory)
def startup(self): """ Construct and show the Toga application. Usually, you would add your application to a main content box. We then create a main window (with a name matching the app), and show the main window. """ main_box = EddingtonBox(style=Pack(direction=COLUMN)) main_box.add(HeaderBox()) self.input_file_box = InputFileBox( on_choose_record=self.choose_records) self.input_file_box.on_input_file_change = self.reset_fitting_data self.input_file_box.on_csv_read = self.read_csv self.input_file_box.on_excel_read = self.read_excel self.input_file_box.on_select_excel_file = self.select_default_sheet main_box.add(self.input_file_box) self.data_columns_box = DataColumnsBox( on_columns_change=self.on_data_columns_change) self.data_columns_box.add( toga.Button("Explore", on_press=self.explore, style=Pack(padding_left=SMALL_PADDING))) main_box.add(self.data_columns_box) self.fitting_function_box = FittingFunctionBox( on_fitting_function_load=self.on_fitting_function_load) self.fitting_function_box.add( toga.Button(label="Fit", on_press=self.fit), toga.Button(label="Load module", on_press=self.load_module), ) main_box.add(self.fitting_function_box) self.initial_guess_box = ParametersBox( on_parameters_change=self.reset_fitting_result) self.initial_guess_box.add(toga.Label(text="Initial Guess:")) main_box.add(self.initial_guess_box) self.plot_boxes = {} self.can_plot_map = {} self.add_plot_configuration_box( option_label="Data", button_label="Plot data", plot_method=lambda **kwargs: plot_data( data=self.data_columns_box.fitting_data, **kwargs), can_plot=self.can_plot_data, suffix="Data", has_legend=False, ) self.add_plot_configuration_box( option_label="Initial guess", button_label="Plot initial guess", plot_method=lambda **kwargs: plot_fitting( func=self.fitting_function_box.fitting_function, data=self.data_columns_box.fitting_data, a=self.initial_guess_box.a0, **kwargs, ), suffix="Initial Guess", can_plot=self.can_plot_initial_guess, ) self.add_plot_configuration_box( option_label="Fit", button_label="Plot fit", plot_method=lambda **kwargs: plot_fitting( func=self.fitting_function_box.fitting_function, data=self.data_columns_box.fitting_data, a=self.fitting_result.a, **kwargs, ), suffix="Fitting", can_plot=self.can_plot_fit, ) self.add_plot_configuration_box( option_label="Residuals", button_label="Plot residuals", plot_method=lambda **kwargs: plot_residuals( func=self.fitting_function_box.fitting_function, data=self.data_columns_box.fitting_data, a=self.fitting_result.a, **kwargs, ), suffix="Residuals", can_plot=self.can_plot_fit, has_legend=False, ) self.plot_options_container = toga.OptionContainer(style=Pack(flex=5)) self.plot_options_container.app = self for label, box in self.plot_boxes.items(): self.plot_options_container.add(label, box) main_box.add(self.plot_options_container) self.output_box = OutputBox(on_save_output=self.on_save_output) main_box.add(self.output_box) main_box.add(FooterBox()) self.main_window = toga.MainWindow(title=self.formal_name, size=MAIN_WINDOW_SIZE) self.main_window.content = main_box self.check_latest_version() self.commands.add( # File group toga.Command( self.input_file_box.select_file, label="Upload data file", shortcut=toga.Key.MOD_1 + "o", group=toga.Group.FILE, order=1, ), toga.Command( self.load_module, label="Load module", shortcut=toga.Key.MOD_1 + "m", group=toga.Group.FILE, order=2, ), toga.Command( self.choose_records, label="Choose records", shortcut=toga.Key.MOD_1 + "d", group=toga.Group.FILE, order=3, ), toga.Command( self.output_box.choose_output_dir, label="Choose output directory", shortcut=toga.Key.MOD_1 + "u", group=toga.Group.FILE, order=4, ), toga.Command( self.on_save_output, label="Save plots and results", shortcut=toga.Key.MOD_1 + "s", group=toga.Group.FILE, order=5, ), toga.Command( lambda widget: self.open_latest_version_webpage(), label="Install Eddington-GUI latest version", group=toga.Group.FILE, order=6, enabled=self.has_newer_version, ), toga.Command( self.fit, label="Fit result", shortcut=toga.Key.MOD_1 + "e", group=PLOT_GROUP, ), toga.Command( lambda _: self.set_font_size(FontSize.SMALL), "Set small font size", group=toga.Group.VIEW, order=FontSize.SMALL.value, ), toga.Command( lambda _: self.set_font_size(FontSize.MEDIUM), "Set medium font size", group=toga.Group.VIEW, order=FontSize.MEDIUM.value, ), toga.Command( lambda _: self.set_font_size(FontSize.LARGE), "Set large font size", group=toga.Group.VIEW, order=FontSize.LARGE.value, ), ) self.set_font_size(FontSize.DEFAULT) if not has_matplotlib: self.main_window.info_dialog( "Error", (f"Error loading matplotlib.\nPlease go to {self.faq_url}" " and see how to solve this problem"), ) webbrowser.open(self.faq_url) self.main_window.show() if self.has_newer_version and self.main_window.question_dialog( "Update is available", (f"A new version of {self.formal_name} is available! " "would you like to download it?"), ): self.open_latest_version_webpage()
import toga container = toga.OptionContainer() table = toga.Table(['Hello', 'World']) tree = toga.Tree(['Navigate']) container.add('Table', table) container.add('Tree', tree) def build(app): return container toga.App('First App', 'org.pybee.helloworld', startup=build).main_loop()
def startup(self): # Create main window self.main_window = toga.MainWindow(self.name) icons = os.path.join(os.path.dirname(__file__), 'icons') # dice number window self.roll_dice = '' self.die_window = toga.Window('die_num', title='How many dice to roll', closeable=False, minimizable=False) self.dice_number = toga.Slider(range=(1,10), window=self.die_window) # Character Attributes on the left self.left_content = toga.Slider() self.left_container = toga.ScrollContainer(content=self.left_content, horizontal=False) # Other attributes on the right self.right_container = toga.OptionContainer() self.right_table = toga.Table(headings=['Throws', 'Values']) self.right_tree = toga.Tree(headings=['Spells', 'Equipment']) self.right_container.add('Table', self.right_table) self.right_container.add('Tree', self.right_tree) # Split left and right boxes formed above self.split = toga.SplitContainer() self.split.content = [self.left_container, self.right_container] # Make dice toolbar cmd4 = toga.Command(self.dice4, 'Roll D4', tooltip='Roll a four sided die', icon=os.path.join(icons, 'd4.png'), order=1) cmd6 = toga.Command(self.dice6, 'Roll D6', tooltip='Roll a six sided die', icon=os.path.join(icons, 'd6.png'), order=2) cmd8 = toga.Command(self.dice8, 'Roll D8', tooltip='Roll a eight sided die', icon=os.path.join(icons, 'd8.png'), order=3) cmd10 = toga.Command(self.dice10, 'Roll D10', tooltip='Roll a 10 sided die', icon=os.path.join(icons, 'd10.png'), order=4) cmd12 = toga.Command(self.dice12, 'Roll D12', tooltip='Roll a twelve sided die', icon=os.path.join(icons, 'd12.png'), order=5) cmd20 = toga.Command(self.dice20, 'Roll D20', tooltip='Roll a twenty sided die', icon=os.path.join(icons, 'd20.png'), order=6) # Show main window self.main_window.toolbar.add(cmd4, cmd6, cmd8, cmd10, cmd12, cmd20) self.main_window.toolbar.add(die_slider) self.main_window.content = self.split self.main_window.show()