예제 #1
0
def get_user_input_gui():

    submit_flag = False

    log_records_dir = logging_options['log_records_dir']
    log_records_dir_browse = (Path.cwd(), log_records_dir)[Path(log_records_dir).is_dir()]
    quiet_console = logging_options['quiet_console']
    console_level = logging_options['console_level']
    enable_console_file = logging_options['enable_console_file']
    console_file_name = logging_options['console_file_name']
    enable_verbose_file = logging_options['enable_verbose_file']
    verbose_level = logging_options['verbose_level']
    verbose_file_name = logging_options['verbose_file_name']

    layout = [[sg.Text('Quiet Console:', size=(14, 1)), sg.Check(text='', default=quiet_console, key='-CONSOLE LOGGING-', pad=(2, 1)),
               sg.Text('Will not display in the console. Will still output in console log if enabled')],
              [sg.Text('Console Logging:', size=(14, 1)), sg.Check(text='', default=enable_console_file, key='-CONSOLE FILE-', pad=(2, 1)),
               sg.Text('Level:'), sg.Combo(default_value=console_level, values=['DEBUG', 'INFO', 'WARNING', 'ERROR'], size=(10, 0), key='-CONSOLE LEVEL-'),
               sg.Text('Console File Name:', size=(14, 1)), sg.InputText(key='-CONSOLE FILE NAME-', default_text=console_file_name)],
              [sg.Text('Verbose Logging:', size=(14, 1)), sg.Check(text='', default=enable_verbose_file, key='-VERBOSE FILE-', pad=(2, 1)),
               sg.Text('Level:'), sg.Combo(default_value=verbose_level, values=['DEBUG', 'INFO', 'WARNING', 'ERROR'], size=(10, 0), key='-VERBOSE LEVEL-'),
               sg.Text('Verbose File Name:', size=(14, 1)), sg.InputText(key='-VERBOSE NAME-', default_text=verbose_file_name)],
              [sg.Text('Log File Directory:', size=(14, 1)), sg.InputText(key='-lOG DIR-', default_text=log_records_dir, size=(84, 0)),
               sg.FolderBrowse(button_text='...', target='-lOG DIR-', initial_folder=log_records_dir_browse, pad=(1, 0))],

              [sg.Submit(), sg.Cancel()]]

    window = sg.Window('Setup Logging', layout)

    while True:
        event, values = window.read()
        # End program if user closes window or
        # presses the Cancel button
        if event == "Cancel" or event == sg.WIN_CLOSED:
            break
        if "Submit" in event:
            logging_options['log_records_dir'] = values['-lOG DIR-']
            logging_options['quiet_console'] = values['-CONSOLE LOGGING-']
            logging_options['console_level'] = values['-CONSOLE LEVEL-']
            logging_options['enable_console_file'] = values['-CONSOLE FILE-']
            logging_options['console_file_name'] = values['-CONSOLE FILE NAME-']
            logging_options['enable_verbose_file'] = values['-VERBOSE FILE-']
            logging_options['verbose_level'] = values['-VERBOSE LEVEL-']
            logging_options['verbose_file_name'] = values['-VERBOSE NAME-']
            with open(logging_options_fn, 'w') as opt_file:
                toml.dump(logging_options, opt_file)
            submit_flag = True
            break
    window.close()

    return submit_flag
    def _create_layout(self):
        """Create a layout that matches the rack"""
        layout = [[sg.Text('Select, Port, Activity, Light', size=(20,1))]]

        for port_number in self.rack.ports:
            row = [sg.Check(text = None, key='_C{}_'.format(port_number), enable_events=True),
                   sg.Text('Port {}'.format(port_number)), 
                   LEDIndicator('_A{}_'.format(port_number)), 
                   LEDIndicator('_LED{}_'.format(port_number)),
                  ]
            layout.append(row)
        # Finally append the exit botton
        layout.append([sg.Button('Exit')])
        return layout
예제 #3
0
def start_scorer_windows():
    scorer_layout = [[
        Sg.Text("Current Question:"),
        Sg.Text("N/A", key="current_question"),
        Sg.Text("Question Value:"),
        Sg.Text("0000", key="question_value")
    ], [Sg.Text("       +       -     Other")]]
    for i in range(len(players)):
        scorer_layout.append([
            Sg.Text(players[i] + ":"),
            Sg.Radio("",
                     group_id="player_{}".format(i + 1),
                     key="player_{}_add".format(i + 1)),
            Sg.Radio("",
                     group_id="player_{}".format(i + 1),
                     key="player_{}_subtract".format(i + 1)),
            Sg.Radio("",
                     default=True,
                     group_id="player_{}".format(i + 1),
                     key="player_{}_other".format(i + 1)),
            Sg.Input(key="player_{}_input".format(i + 1), size=(6, 1))
        ])
    scorer_layout.extend([[
        Sg.Text("Save to File:"),
        Sg.Input(key="filename", size=(18, 1)),
        Sg.FileSaveAs(file_types=(("Text Document", "*.txt"), ("all files",
                                                               "*.*")))
    ], [Sg.Check("Keep client window on top", key="keep_on_top")],
                          [
                              Sg.Button("Update",
                                        key="update",
                                        bind_return_key=True),
                              Sg.Button("Start Client", key="client_start"),
                              Sg.Button("Save To File", key="save_to_file")
                          ]])
    scorer_window = Sg.Window("Jeopardy Score Host",
                              scorer_layout,
                              resizable=True,
                              finalize=True)
    client_window, client_event, client_values = None, None, None
    scores = {
        "players": players,
        "scores": ["0" for _ in range(len(players))],
        "previous_scores": ["0" for _ in range(len(players))]
    }
    question_value = 0
    board = json.loads(open("board.json").read())
    while True:
        scorer_event, scorer_values = scorer_window.read(100)
        if scorer_event is None:
            return
        elif scorer_event == "client_start" and not client_window:
            scorer_window["client_start"].update(disabled=True)
            scorer_window["keep_on_top"].update(disabled=True)
            client_window = make_client_window(scores,
                                               scorer_values["keep_on_top"])
        elif scorer_event == "update":
            scores["previous_scores"] = scores["scores"][:]
            for i in range(len(scores["scores"])):
                if scorer_values["player_" + str(i + 1) + "_add"]:
                    scores["scores"][i] = str(
                        int(scores["scores"][i]) + question_value)
                elif scorer_values["player_" + str(i + 1) + "_subtract"]:
                    scores["scores"][i] = str(
                        int(scores["scores"][i]) - question_value)
                else:
                    add_to_score = scorer_values["player_" + str(i + 1) +
                                                 "_input"]
                    if add_to_score.isnumeric() or (
                            len(add_to_score) > 1 and add_to_score[0] == "-"
                            and add_to_score[1:].isnumeric()):
                        scores["scores"][i] = str(
                            int(scores["scores"][i]) + int(add_to_score))
                scorer_window["player_" + str(i + 1) + "_add"](False)
                scorer_window["player_" + str(i + 1) + "_subtract"](False)
                scorer_window["player_" + str(i + 1) + "_other"](True)
                scorer_window["player_" + str(i + 1) + "_input"]("")
            if client_window is not None:
                table_data = []
                for i in range(len(players)):
                    row = [
                        players[i], scores["scores"][i],
                        scores["previous_scores"][i]
                    ]
                    table_data.append(row)
                client_window["score_table"].update(values=table_data)
        elif scorer_event == "save_to_file":
            if scorer_values["filename"] != "":
                open(scorer_values["filename"], "w").write(str(scores))
        current_question = open("SlideNotes.txt").read().strip("\n")
        scorer_window["current_question"](current_question)
        question_value = board[current_question]
        scorer_window["question_value"](str(question_value))
        if current_question == "DD":
            for i in range(len(scores["players"])):
                scorer_window["player_" + str(i + 1) +
                              "_add"].update(disabled=True)
                scorer_window["player_" + str(i + 1) +
                              "_subtract"].update(disabled=True)
        else:
            for i in range(len(scores["players"])):
                scorer_window["player_" + str(i + 1) +
                              "_add"].update(disabled=False)
                scorer_window["player_" + str(i + 1) +
                              "_subtract"].update(disabled=False)
예제 #4
0
def questionnaireUi():
    houseLay = [[
        sg.T('家庭成员:'),
        sg.InputCombo(['1', '2', '3', '4', '5', '6+'], '1'),
        sg.T('(人)')
    ], [sg.Check('冬季是否用暖气取暖?')],
                [sg.T('居住面积:'),
                 sg.I('10', (5, None)),
                 sg.T('(平方米)')],
                [sg.T('每月用电:'),
                 sg.I('50', (5, None)),
                 sg.T('(度/月)')],
                [sg.T('每月用气:'),
                 sg.I('10', (5, None)),
                 sg.T('(立方米/月)')],
                [sg.T('每月用水:'),
                 sg.I('10', (5, None)),
                 sg.T('(吨/月)')], [sg.Button('下一步')]]

    trafficLay = [[sg.T('飞机:'),
                   sg.I('0', (5, None)),
                   sg.T('(千米/年)')],
                  [sg.T('火车:'),
                   sg.I('500', (5, None)),
                   sg.T('(千米/年)')],
                  [sg.T('公交:'),
                   sg.I('10', (5, None)),
                   sg.T('(千米/天)')],
                  [sg.T('地铁:'),
                   sg.I('10', (5, None)),
                   sg.T('(站/天)')],
                  [sg.T('小车:'),
                   sg.I('0', (5, None)),
                   sg.T('(千米/天)')],
                  [sg.T('电梯:'),
                   sg.I('10', (5, None)),
                   sg.T('(层/天)')], [sg.Button('下一步')]]

    lifeLay = [[sg.T('每周消耗塑料袋子:'),
                sg.I('10', (5, None)),
                sg.T('(个/周)')],
               [sg.T('每周用一次性筷子:'),
                sg.I('10', (5, None)),
                sg.T('(双/周)')],
               [sg.T('每半年新购买衣服:'),
                sg.I('4', (5, None)),
                sg.T('(件/半年)')],
               [sg.T('每天摄取的主食量:'),
                sg.I('2', (5, None)),
                sg.T('(碗/天)')],
               [sg.T('每天摄取的肉食量:'),
                sg.I('1', (5, None)),
                sg.T('(盘/天)')],
               [sg.T('上班使用电脑时间:'),
                sg.I('4', (5, None)),
                sg.T('(小时/天)')],
               [sg.T('每天收发电子邮件:'),
                sg.I('2', (5, None)),
                sg.T('(封/天)')],
               [sg.T('每天使用搜索次数:'),
                sg.I('10', (5, None)),
                sg.T('(次/天)')],
               [sg.T('每月买书籍或杂志:'),
                sg.I('2', (5, None)),
                sg.T('(册/月)')],
               [sg.T('平均每月打印纸张:'),
                sg.I('20', (5, None)),
                sg.T('(张/月)')], [sg.Button('下一步')]]

    habitLay = [[sg.T('自行车代步:'),
                 sg.I('0', (5, None)),
                 sg.T('(千米/天)')], [sg.Check('节能灯泡 (在同等亮度下,节能灯比钨丝灯节能20%)')],
                [sg.Check('我习惯随手关灯')], [sg.Check('我不使电器处于待机状态')],
                [sg.Check('我习惯淋浴而非盆浴')], [sg.Check('我循环使用至少30%的家庭废旧物品')],
                [sg.Check('太阳能热水器')], [sg.OK('计算')]]

    houseWin = sg.Window('住宅', houseLay)
    houseEvent, houseVal = houseWin.Read()
    if houseEvent == '下一步':
        houseWin.Close()

        trafficWin = sg.Window('交通', trafficLay)
        trafficEvent, trafficVal = trafficWin.Read()
        if trafficEvent == '下一步':
            trafficWin.Close()

            lifeWin = sg.Window('生活', lifeLay)
            lifeEvent, lifeVal = lifeWin.Read()
            if lifeEvent == '下一步':
                lifeWin.Close()

                habitWin = sg.Window('习惯', habitLay)
                habitEvent, habitVal = habitWin.Read()
                if habitEvent in (None, '计算'):
                    habitWin.Close()

                return houseVal.values(), trafficVal.values(), lifeVal.values(
                ), habitVal.values()
예제 #5
0
def the_gui():

    sg.theme('Default1')
    textWidth = 23
    inputWidth = 6
    window, settings = None, load_settings(SETTINGS_FILE, DEFAULT_SETTINGS)

    layout = [
        [
            sg.Text('Number of Trials', size=(textWidth, 1)),
            sg.Input(100, size=(inputWidth, 1), key='-NumTrials-')
        ],
        [
            sg.Text('Sample Rate (Hz)', size=(textWidth, 1)),
            sg.Input(default_text=20000,
                     size=(inputWidth, 1),
                     key='-SampleRate-'),
            sg.Check('Downsample?', default=True, key='-DownSample-')
        ],
        [
            sg.Text('Trial Duration (s)', size=(textWidth, 1)),
            sg.Input(default_text=7,
                     size=(inputWidth, 1),
                     key='-TrialDuration-')
        ],
        [
            sg.Text('False Alarm Timeout (s)', size=(textWidth, 1)),
            sg.Input(default_text=3,
                     size=(inputWidth, 1),
                     key='-FalseAlarmTimeout-')
        ],
        [
            sg.Check('Play Tone?', default=True, key='-PlayTone-'),
            sg.Check('Enable punish?', default=False, key='-EnablePunish-')
        ],
        [
            sg.Text('Time to Tone/Reward Window (from full force; s)',
                    size=(textWidth, 1)),
            sg.Input(default_text=3, size=(inputWidth, 1), key='-TimeToTone-'),
            sg.Check('Vary this?', key='-VaryTone-')
        ],
        [
            sg.Check('Abort if lick detected between start of trial and tone?',
                     key='-AbortEarlyLick-')
        ],
        [
            sg.Text('Reward Window Duration (s)', size=(textWidth, 1)),
            sg.Input(default_text=1,
                     size=(inputWidth, 1),
                     key='-RewardWindowDuration-'),
            sg.Check('Reward All Go Trials?', key='-RewardAllGos-')
        ],
        [
            sg.Text('Go Probability', size=(textWidth, 1)),
            sg.Input(default_text=0.5,
                     size=(inputWidth, 1),
                     key='-GoProbability-'),
            sg.Check('Alternate trials?', key='-Alternate-')
        ],
        [
            sg.Text('Force (mN)', size=(textWidth, 1)),
            sg.Input(default_text=50, size=(inputWidth, 1), key='-Force-'),
            sg.Check('Vary force?', key='-VaryForce-')
        ],
        [
            sg.Text('Force Ramp Time (s)', size=(textWidth, 1)),
            sg.Input(default_text=1,
                     size=(inputWidth, 1),
                     key='-ForceRampTime-')
        ],
        [
            sg.Text('Step Duration (s)', size=(textWidth, 1)),
            sg.Input(default_text=3,
                     size=(inputWidth, 1),
                     key='-StepDuration-'),
            sg.Check('Continue to Nogo?', key='-EnableContinuous-')
        ],
        [
            sg.Text('Save Path', size=(textWidth, 1)),
            sg.Input(os.path.normpath('E://DATA/Behavior/'),
                     size=(20, 1),
                     key='-SavePath-'),
            sg.Check('Save?', default=True, key='-Save-')
        ],
        [
            sg.Text('Animal ID', size=(textWidth, 1)),
            sg.Input(size=(20, 1), key='-Animal-')
        ],
        [
            sg.Button('Run Task', size=(30, 2)),
            sg.Button('Dispense Reward', size=(30, 2))
        ],
        [
            sg.Button('Update Parameters'),
            sg.Button('Exit'),
            sg.Button('Setup DAQ'),
            sg.Input(key='Load Parameters', visible=False, enable_events=True),
            sg.FileBrowse(
                'Load Parameters',
                initial_folder='Z:\\HarveyLab\\Tier1\\Alan\\Behavior'),
            sg.Button('Test Lick Monitor')
        ], [sg.Output(size=(70, 20), key='-OUTPUT-')]
    ]

    window = sg.Window('Sustained Detection Task', layout)
    event, values = window.read(10)
    taskParameters = updateParameters(values)

    while True:
        event, values = window.read()
        print(event)
        if event in (sg.WIN_CLOSED, 'Exit'):
            break
        if event == 'Update Parameters':
            taskParameters = updateParameters(values)
            print('parameters updated')

        if event == 'Setup DAQ':
            event, values = create_settings_window(settings).read(close=True)
            if event == 'Save':
                save_settings(SETTINGS_FILE, settings, values)
        if event == 'Run Task':
            taskParameters = updateParameters(values)
            print('parameters updated')
            try:
                if daqStatus != 'task':
                    do_task.close()
                    ai_task, di_task, ao_task, do_task, daqStatus = setupDaq(
                        settings, taskParameters)
            except NameError:
                ai_task, di_task, ao_task, do_task, daqStatus = setupDaq(
                    settings, taskParameters)
            threading.Thread(target=runTask,
                             args=(ai_task, di_task, ao_task, do_task,
                                   taskParameters),
                             daemon=True).start()
        if event == 'Dispense Reward':
            try:
                if daqStatus != 'dispenseReward':
                    ai_task.close()
                    di_task.close()
                    ao_task.close()
                    do_task.close()
                    do_task, daqStatus = setupDaq(settings, taskParameters,
                                                  'dispenseReward')
            except NameError:
                do_task, daqStatus = setupDaq(settings, taskParameters,
                                              'dispenseReward')
            dispense(do_task, taskParameters)
        if event == 'Load Parameters':
            print(f'Updating parameters from {values["Load Parameters"]}')
            try:
                tempParameters = pickle.load(
                    values['Load Parameters'])['taskParameters']
                window.Element('-NumTrials-').Update(
                    value=tempParameters['numTrials'])
                window.Element('-SampleRate-').Update(
                    value=tempParameters['Fs'])
                window.Element('-DownSample-').Update(
                    value=tempParameters['downSample'])
                window.Element('-TrialDuration-').Update(
                    value=tempParameters['trialDuration'])
                window.Element('-FalseAlarmTimeout-').Update(
                    value=tempParameters['falseAlarmTimeout'])
                if 'playTone' in tempParameters.keys():
                    window.Element('-PlayTone-').Update(
                        value=tempParameters['playTone'])
                else:
                    window.Element('-PlayTone-').Update(value=True)
                window.Element('-TimeToTone-').Update(
                    value=tempParameters['timeToTone'])
                window.Element('-VaryTone-').Update(
                    value=tempParameters['varyTone'])
                if 'abortEarlyLick' in tempParameters.keys():
                    window.Element('-AbortEarlyLick-').Update(
                        value=tempParameters['abortEarlyLick'])
                else:
                    window.Element('-AbortEarlyLick-').Update(value=False)
                window.Element('-RewardWindowDuration-').Update(
                    value=tempParameters['rewardWindowDuration'])
                window.Element('-RewardAllGos-').Update(
                    value=tempParameters['rewardAllGos'])
                window.Element('-GoProbability-').Update(
                    value=tempParameters['goProbability'])
                window.Element('-Alternate-').Update(
                    value=tempParameters['alternate'])
                if 'varyForce' in tempParameters.keys():
                    window.Element('-VaryForce-').Update(
                        value=tempParameters['varyForce'])
                else:
                    window.Element('-VaryForce-').Update(value=False)
                window.Element('-Force-').Update(value=tempParameters['force'])
                window.Element('-ForceRampTime-').Update(
                    value=tempParameters['forceTime'])
                window.Element('-StepDuration-').Update(
                    value=tempParameters['forceDuration'])
                window.Element('-EnableContinuous-').Update(
                    value=tempParameters['forceContinuous'])
            except:
                'invalid file'
    window.close()
예제 #6
0
def main():
    layout = [
        [
            # TODO output only stores one line, have it write like stdout
            sg.Output(
                size=(90, 25),
                echo_stdout_stderr=True,
                tooltip="Results of the dice rolled",
                key="-OUTPUT-",
            )
        ],
        [
            # TODO find way to make to auto-clear this field when clicked on
            sg.Input(20,
                     size=(8, 1),
                     tooltip="Amount of sides on the dice",
                     key="-SIDES-"),
            # TODO disable if 'repeat' chosen and vice versa
            sg.Input(
                1,
                size=(8, 1),
                tooltip=
                "Times to roll the dice. Disabled if Repeat button enabled",
                key="-COUNT-",
            ),
            # TODO these need to be able to be unchecked
            #      but remain in radio group to be one or the other
            sg.Radio(
                "Adv.",
                "adv_or_disadv",
                tooltip="Roll two d20 and choose the higher roll",
            ),
            sg.Radio(
                "Disadv.",
                "adv_or_disadv",
                tooltip="Roll two d20 and choose the lower roll",
            ),
            sg.Check(
                "Sum rolls",
                auto_size_text=True,
                tooltip="Sum all rolls. Only valid with 'Count'",
            ),
            sg.Submit(
                "Roll!",
                auto_size_button=True,
                tooltip="Roll the dice with the parameters given",
            ),
        ],
    ]

    window = sg.Window(
        "Dice",
        layout,
        auto_size_text=True,
        auto_size_buttons=True,
        size=(600, 400),
        element_justification="center",
    )

    while True:
        event, values = window.read()
        if event in (sg.WINDOW_CLOSED, "Exit"):
            break
        if event == "Roll!":
            sides = int(values["-SIDES-"])
            count = int(values["-COUNT-"])
            window["-OUTPUT-"].update(roll_dice(sides, count))
            window.Refresh()

    window.close()
예제 #7
0
def make_window_test_model_params(models_list):
    """
    Creates window layout for performing testing of the model

    :param models_list: list of all created models' names
    :type models_list: list[str]
    :return: window with functionality of setting parameters for testing the model
    :rtype: PySimpleGUI.PySimpleGUI.Window
    """
    layout = [
        [
            sg.Button("Back", enable_events=True, key="-BACK-")
        ],
        [
            sg.T(' ' * 21),
            sg.Text("Model")
        ],
        [
            sg.DropDown(models_list, tooltip="Select model to test", size=(35, 10), enable_events=True, key="-MODEL-")
        ],
        [
            sg.T(' ')
        ],
        [
            sg.T(' ' * 3),
            sg.Text("Distribution of test and train sets"),
        ],
        [
            sg.Slider(range=(1, 100), orientation='h', size=(30, 10), default_value=25,
                      enable_events=True,  key="-TEST SIZE-")
        ],
        [
            sg.Text("Test set size:"),
            sg.Text("000", enable_events=True, key="-TEST-"),
            sg.Text("Training set size:"),
            sg.Text("000", enable_events=True, key="-TRAINING-"),
        ],
        [
            sg.T(' ')
        ],
        [
            sg.Text("Measures of quality")
        ],
        [
            sg.Check("Coefficient of determination", default=True, key="-R SQUARE-"),
        ],
        [
            sg.Check("Mean error of point's position", default=True, key="-MEAN ERROR-"),
        ],
        [
            sg.Check("Explained variance", default=True, key="-EXPLAINED VARIANCE-"),
        ],
        [
            sg.T(' ')
        ],
        [
            sg.T(' ' * 20),
            sg.Button("Test model", enable_events=True, key="-SUBMIT BUTTON-")
        ],
    ]

    return sg.Window("Test params", layout, finalize=True)
import PySimpleGUI as sg
import TextFileMergerFnFile

sg.theme('BluePurple')
layout  = [ [sg.Text('Folder of text files:*')],
            [sg.InputText('',key='input_folderpath',size=(80,1),disabled=True,enable_events=True),
             sg.FolderBrowse('Browse',key='fb_infilefolder',enable_events=True)],
            [sg.Text('Output File path:')],
            [sg.InputText('',key='output_folderpath',size=(80,1),disabled=True,enable_events=True),
             sg.FolderBrowse('Browse',key='fb_outfilefolder')],
            [sg.Check('Remove empty lines from the output file**',key='_CHK_EMTYLINE_REMOVE_',default=False)],
            [sg.Text('Output Text FileName (No extension please!!) : '),sg.InputText('',size=(45,1),key='output_filename',enable_events = True)],
            [sg.Text('Status :',key='resultLabel',size=(6,1),justification='Left',text_color='Green'),
             sg.InputText('',key='resultbox',disabled=True,size=(30,1),text_color='Green')],
            [sg.Button('Submit',key='btn_submit',disabled=True),sg.Button('Reset',key='btn_reset'),
             sg.Button('Exit',key='btn_exit')],
            [sg.Text('How to use the tool:',text_color='Red')],
            [sg.Text('1. Place all text files(.txt) to be merged in a folder\n'
                     '2. Browse the folder as "Folder of text files" \n'
                     '3. Browse output file folder as "Output File path"\n'
                     '   This is optional. In case output folder is not provided, Output file will be placed at same location as Application\n'
                     '4. **Checking this option will remove all empty lines from the file**\n'
                     '5. Default output file name would be - Output_MergedFile.txt\n'
                     '6. Click Submit button to merge files\n',text_color='Red')]]

window = sg.Window('Text File Merger',layout)

while True:
    event, values = window.read()
    if event in (None, 'Exit', 'btn_exit'):   # if user closes window or clicks Exit
        break
예제 #9
0
def addition_popup(md: MemoData) -> bool:
    result = False
    pass_pin_col_lay = [
        [sg.Txt(**pass_txt), sg.In(**pass_in)],
        [sg.Check(**pass_check)],
    ]
    pass_pin_elem = sg.Col(pass_pin_col_lay, **pass_pin_col)

    used_err_col_lay = [
        [sg.Txt(**used_err_txt)],
    ]
    used_err_pin_elem = sg.Col(used_err_col_lay, **used_err_col)

    empty_err_col_lay = [
        [sg.Txt(**empty_err_txt)],
    ]

    empty_err_pin_elem = sg.Col(empty_err_col_lay, **empty_err_col)

    w = sg.Window(
        title="add memo",
        layout=[
            [sg.Txt("title:"), sg.In(**title_in)],
            [sg.Txt("lock:"),
             sg.Btn(**on_btn),
             sg.Btn(**off_btn)],
            [sg.pin(pass_pin_elem)],
            [sg.pin(used_err_pin_elem)],
            [sg.pin(empty_err_pin_elem)],
            [sg.Cancel(**cancel_btn), sg.OK(**ok_btn)],
        ],
        size=(255, 180),
        keep_on_top=True,
        disable_close=True,
        modal=True,
    )

    switch = SwitchButtons(w)

    while True:
        e, v = cast(tuple[addition, dict[addition, str]], w())

        if e in (sg.WIN_CLOSED, addition.cancel_btn):
            break

        lock = switch(e)

        w[addition.pass_col].update(visible=lock)

        char = "" if w[addition.pass_check].get() else "*"

        w[addition.pass_in].update(password_char=char)

        if e == addition.ok_btn:
            if verify_title_is_valid(w, md, v):
                md.memos.append(datas_to_memo(v, lock))
                result = True
                break

    w.close()
    return result
예제 #10
0
                                key='-TXT_DATE_IN-',
                                format='%Y:%m:%d')
          ],
          [
              sg.Input(size=(9, 1), key='-DATE_OUT-', readonly=True),
              sg.CalendarButton('Конец',
                                begin_at_sunday_plus=1,
                                key='-TXT_DATE_OUT-',
                                format='%Y:%m:%d')
          ], [sg.Text('4) Выбрать тип занятости')],
          [
              sg.Combo(['Ставка:', 'Оклад:', 'Выход:', 'За час:'], ['Ставка:'],
                       size=(7, 1),
                       readonly=True),
              sg.Input('0.00', size=(9, 1), key='-TYPE-', justification='r'),
              sg.Check('Автосогласование доп. работ')
          ], [sg.Text('3) Выбрать файл для загрузки')]]

# layout = [[sg.Text('Your typed chars appear here:'), sg.Text(size=(15,1), key='-OUTPUT-')],
#           [sg.Input(key='-IN-')],
#           [sg.Button('Show'), sg.Button('Exit')]]
#
window = sg.Window('Массовое назначение мерчей', layout)

while True:  # Event Loop
    event, values = window.read()
    print(event, values)
    # if event == '-DATE_IN-':
    #     window['-TXT_DATE_IN-'].update(values['-DATE_IN-'])
    # if event == '-DATE_OUT-':
    #     window['-TXT_DATE_OUT-'].update(values['-DATE_OUT-'])
예제 #11
0
##################### Open and run panel #####################

sg.theme('Default1')
textWidth = 23
inputWidth = 6
window, settings = None, load_settings(SETTINGS_FILE, DEFAULT_SETTINGS)

layout = [
    [
        sg.Text('Number of Trials', size=(textWidth, 1)),
        sg.Input(100, size=(inputWidth, 1), key='-NumTrials-')
    ],
    [
        sg.Text('Sample Rate (Hz)', size=(textWidth, 1)),
        sg.Input(default_text=20000, size=(inputWidth, 1), key='-SampleRate-'),
        sg.Check('Downsample?', default=True, key='-DownSample-')
    ],
    [
        sg.Text('Trial Duration (s)', size=(textWidth, 1)),
        sg.Input(default_text=7, size=(inputWidth, 1), key='-TrialDuration-')
    ],
    [
        sg.Text('False Alarm Timeout (s)', size=(textWidth, 1)),
        sg.Input(default_text=3,
                 size=(inputWidth, 1),
                 key='-FalseAlarmTimeout-')
    ], [sg.Check('Play Tone?', default=True, key='-PlayTone-')],
    [sg.Check('Optical Only?', default=True, key='-Optical-')],
    [
        sg.Text('Time to Tone/Reward Window (from full force; s)',
                size=(textWidth, 1)),
예제 #12
0
파일: sgadt.py 프로젝트: gitthious/ADT
def boolWidget(valtype, val, key, disabled=False, size=(None,None)):
    if val is None: val = False
    return [
        sg.Check('', default=val, key=key,
                 change_submits=True, disabled=disabled),
        ]
예제 #13
0
    def __init__(self) -> None:
        self.ns = 'Trem_'
        self.sus_bt = sg.Button('sus region', key=self.ns + 'sus')
        self.sus_marker = sg.Check('marker on hard attack',
                                   default=True,
                                   key=self.ns + 'sus_marker')
        self.sus_want_cut = sg.Check(
            'want cut',
            default=True,
            key=self.ns + 'sus_want_cut',
            tooltip='if checked — part left to the sus will be erased')

        self.rel_bt = sg.Button('cut release', key=self.ns + 'release_cut')
        self.rel_reg_bt = sg.Button('release region',
                                    key=self.ns + 'release_region')
        self.release_region_want_cut = sg.Check('want cut',
                                                default=True,
                                                key=self.ns +
                                                'release_region_want_cut')

        self.dyn = sg.Combo(
            values=['ff', 'f', 'p', 'pp'],
            default_value='ff',
            key=self.ns + 'dyn',
        )
        self.sul = sg.Combo(
            values=['sulTop', 'SulBot'],
            default_value='sulBot',
            key=self.ns + 'sul',
        )
        silence_def = .1
        self.sus_silense_sl = sg.Slider(
            range=(-60, 0),
            resolution=.001,
            key=self.ns + 'sus_silence_treshold',
            tooltip='threshold in dB to count as sustain silence',
            # enable_events=True,
            default_value=silence_def,
            orientation='h',
            size=(30, 10))
        self.silense_sl = sg.Slider(
            range=(-60, 0),
            resolution=.001,
            key=self.ns + 'silence_treshold',
            tooltip='threshold in dB to count as silence',
            # enable_events=True,
            default_value=silence_def,
            orientation='h',
            size=(30, 10))
        self.rel_fade_out = widgets.FadeRegions(self.ns, 'release')
        self.name = 'Trem'
        self.layout = [[
            self.sus_bt,
            sg.Column([[self.sus_want_cut], [self.sus_marker]]),
            self.dyn,
            self.sul,
            self.rel_bt,
            sg.Column([[self.rel_reg_bt], [self.release_region_want_cut]]),
        ],
                       [
                           sg.Column([[self.sus_silense_sl],
                                      [self.silense_sl]]),
                           self.rel_fade_out.layout,
                       ]]