예제 #1
0
def report():
    # need to flesh out
    layout = [
        [sg.CalendarButton("from date", key="from")],
        [sg.CalendarButton("to date", key="to")],
        [sg.Cancel("Cancel"), sg.Submit("Submit")],
    ]

    window = sg.Window("Select Dates", layout, resizable=True)
    event, values = window.read()
    from_date = values["from"]
    to_date = values["to"]
    window.close()

    if not (from_date and to_date):
        sys.exit()
    else:
        from_date = values["from"].strftime("%Y-%m-%d")
        to_date = values["to"].strftime("%Y-%m-%d")

    results = Shipment.fetch_all_records_in_date(from_date, to_date)

    ezgmail.init()
    ezgmail.send("*****@*****.**", "Shipping Unit Program!",
                 str(results[0]))
예제 #2
0
 def obter_dados(self, lista_clientes):
     clientes = []
     for cliente in lista_clientes:
         cod_nome = str(cliente['codigo']) + ' - ' + str(cliente['nome'])
         clientes.append(cod_nome)
     layout = [
         [sg.Text('Cadastro de Anúncios. Informe os dados soliciados.',\
             justification = 'center')],
         [sg.Text('Título: *'), sg.InputText(size=(30,10),key='-titulo-')],
         [sg.Text('Cliente: *'), sg.InputCombo(clientes, key='-cliente-')],
         [sg.In(key = '-data_inicio-', visible = False),\
             sg.CalendarButton('Selecionar Data de Inicio*',\
                 target = '-data_inicio-', pad = None, key = '-cal_inicio-')],
         [sg.In(key = '-data_fim-', visible = False),\
             sg.CalendarButton('Selecionar Data de Fim*',\
                 target = '-data_fim-', pad = None, key = '-cal_fim-')],
         [sg.Text('Investimento Diário: *R$'), \
             sg.InputText(size=(17,10),key='-investimento-')],
         [sg.ReadButton('Cadastrar'),sg.ReadButton('Voltar')]
     ]
     self.__window = sg.Window('Cadastro de Anúncio').Layout(layout)
     button, values = self.__window.Read()
     self.__window.Close()
     if button == 'Cadastrar':
         dados = {'titulo': values['-titulo-'],'cliente': values['-cliente-'],\
             'data_inicio': values['-data_inicio-'], 'data_fim': \
                 values['-data_fim-'], 'investimento': values['-investimento-']}
     if button == 'Voltar' or button == sg.WIN_CLOSED:
         dados = None
     return dados
예제 #3
0
def get_asset_input_layout():
	return [
		# identification
		[sg.Text('ID: '), sg.InputText('', key='id'),],
		[sg.Text('Description: '), sg.InputText('', key='description'),],
		[sg.Text('Current: '), sg.Checkbox('(not retired/disposed)', default=True, key='current'),],
		[sg.Text('Model #: '), sg.InputText('', key='model'), sg.Text('Serial #: '), sg.InputText('', key='serial'),],

		# money stuff
		[sg.Text('Cost: ', tooltip=money_format), sg.InputText('', key='cost')],
		[sg.Text('Shipping Cost: ', tooltip=money_format), sg.InputText('', key='shipping')],
		[sg.Text('Cost Brand New: ', tooltip=money_format), sg.InputText('', key='cost_brand_new')],
		[sg.Text('Life Expectancy: '), sg.Spin([i for i in range(1,40)], initial_value=1, key='life_expectancy'), sg.Text('years'),],

		# dates
		[sg.Text(f'Date Placed: ', tooltip=date_format), sg.InputText(datetime.now(), key='date_placed'), 
			sg.CalendarButton(button_text='change date', target=(sg.ThisRow, -1)),],
		[sg.Text('Date Removed: ', tooltip=date_format), sg.InputText(key='date_removed'), 
			sg.CalendarButton(button_text='change date', target=(sg.ThisRow, -1)),],
		[sg.Text('Date Warranty Expires: ', tooltip=date_format), sg.InputText(key='date_warranty_expires'), 
			sg.CalendarButton(button_text='change date', target=(sg.ThisRow, -1)),],

		# locations and counts
		[sg.Text('Bulk Count: '), sg.Text(str(default_bulk_count), key='bulk_count'),],

		[sg.Text('Notes'), sg.Multiline('', key='notes'),],
		[sg.Checkbox('Entered in MaintenanceDirect', default=False, key='maint_dir'),],


		[sg.Button('Add Asset'), sg.Button('Clear Form')]
	]
예제 #4
0
 def __init__(self):
     #layout
     self.API = ConnectionFactory.getConnection()
     self.paridade = Paridade(self.API).getParidadeAbertas()
     self.listaHora = horas.listaHora()
     layout = [[
         sg.Text('Par', size=(8, 0)),
         sg.Combo(self.paridade,
                  enable_events=True,
                  key='par',
                  size=(15, 0))
     ],
               [
                   sg.Text('Hora Inicio', size=(8, 0)),
                   sg.Combo(self.listaHora, key='horaInicio', size=(15, 0)),
                   sg.Text('Hora Fim', size=(7, 0)),
                   sg.Combo(self.listaHora, size=(15, 0), key=('horaFim'))
               ],
               [
                   sg.Text('Data Inicio', size=(8, 0)),
                   sg.Input(key='dataInicio',
                            enable_events=True,
                            visible=True,
                            size=(20, 0)),
                   sg.CalendarButton('Calendario',
                                     target='dataInicio',
                                     pad=None,
                                     key='_CALENDAR_',
                                     format=('%Y-%m-%d'))
               ],
               [
                   sg.Text('Data Fim', size=(8, 0)),
                   sg.Input(key='dataFim',
                            enable_events=True,
                            visible=True,
                            size=(20, 0)),
                   sg.CalendarButton('Calendario',
                                     target='dataFim',
                                     pad=None,
                                     key='_CALENDAR_',
                                     format=('%Y-%m-%d'))
               ], [sg.Text('Selecione os algoritimos')],
               [
                   sg.Checkbox('MHI', key='mhi'),
                   sg.Checkbox('VT', key='vituxo'),
                   sg.Checkbox('C3', key='c3')
               ],
               [
                   sg.Button('Conectar'),
                   sg.Button('Enviar Dados'),
                   sg.Button('Limpar')
               ]
               #[sg.Output(size=(150,10), key="_output_")]
               ]
     #janela
     self.janela = sg.Window('Catalogador de Velas').layout(layout)
예제 #5
0
def main():
    matplotlib.use('TkAgg')
    dealRecs= DealVisual.dealRecs
    # 准备layout
    rankmap= {'不排序':0, '升序':1, '降序':2}
    corps=dealRecs.corps()
    layout= [[SG.CalendarButton('',(SG.ThisRow,0),True,(12,3,2020),k='-cldmin-',size=(10,1),format='%Y-%m-%d',enable_events=True),
              SG.Text('-'),
              SG.CalendarButton('','-cldmax-',True,(12,31,2020),k='-cldmax-',size=(10,1),format='%Y-%m-%d',enable_events=True),
              SG.Button('重置日期',k='-btnredate-'),
              SG.VerticalSeparator(),
              SG.Combo(corps,corps[0],(10,10),readonly=True,enable_events=True,k='-selcorp-'),
              SG.Spin(list(range(len(corps))),size=(3,1),enable_events=True,k='-selcorpseq-'),
              SG.Combo(list(rankmap.keys()),list(rankmap.keys())[0],(6,3),readonly=True,enable_events=True,k='-cmbRank-')],
             [SG.Canvas(k='-cvFig-')],
             [SG.ProgressBar(100,'horizontal',(20,5),k='-pbanim-')]]
    # 准备窗口
    window= SG.Window('历史持仓',layout,finalize=True,size=(800,600))
    sel=window['-selcorp-']
    isel=window['-selcorpseq-']
    cldmin=window['-cldmin-']
    cldmax=window['-cldmax-']
    pbanimval=0
    figagg=figureagg(window['-cvFig-'].TKCanvas,DealVisual.fig)
    resetDateRange(cldmin,cldmax)
    
    # 启动主消息循环
    while True:
        event,values= window.Read(100)
        if event==SG.WIN_CLOSED:
            break
        if event=='-selcorpseq-':
            sel.update(set_to_index=values['-selcorpseq-'])
        if event== '-cmbRank-':
            sel.update(values=dealRecs.corps(rankmap[values['-cmbRank-']]))
        if event in ['-selcorp-','-cmbRank-']:
            isel.update(sel.Values.index(values['-selcorp-']))
        if event=='-selcorp-' or event==SG.TIMEOUT_KEY:
            DealVisual.draw_profit(values['-selcorp-'])
            figagg.draw()
        if event in ['-cldmin-','-cldmax-']:
            cldmin.update(cldmin.calendar_selection)
            cldmax.update(cldmax.calendar_selection)
            tm=time.strptime(cldmin.calendar_selection,'%Y-%m-%d')
            cldmin.calendar_default_date_M_D_Y=(tm.tm_mon,tm.tm_mday,tm.tm_year)
            tm=time.strptime(cldmax.calendar_selection,'%Y-%m-%d')
            cldmax.calendar_default_date_M_D_Y=(tm.tm_mon,tm.tm_mday,tm.tm_year)
        if event== SG.TIMEOUT_KEY:
            pbanimval=(pbanimval+1)%100
            window['-pbanim-'].update(pbanimval)
예제 #6
0
    def get_adjustment_timestamp_window(self, window_location, default_date):
        layout = [
            [
                sg.Text(
                    "Please type a date as YYYY-MM-DD or use the date selector",
                    key="date_message",
                )
            ],
            [
                sg.Input(default_text=default_date, key="date_input"),
                sg.CalendarButton(
                    "",
                    target="date_input",
                    key="date_select",
                    format="%Y-%m-%d",
                    image_filename=self.images["cal_icon"],
                    size=(1, 1),
                ),
            ],
            [sg.Button("Back"), sg.Button("Submit")],
        ]

        return sg.Window(
            self.PROGRAM_TITLE,
            layout=layout,
            location=window_location,
            auto_size_buttons=False,
            finalize=True,
        )
예제 #7
0
    def __init__(self):

        sg.theme('BrightColors') # random randomiza o tema

        #abaixo, converto uma data em string e mando para Text 'data'
        #o text 'data' é atualizado dinamicamente pelos atributos target e format do text 'data_personalizada'
        #hora atual e minuto atual sao jogadas nos campos data e hora final
        data_atual = date.today().strftime('%d/%m/%Y')
        hora_atual = datetime.now().hour
        minuto_atual = datetime.now().minute

        popular_list_box = modulo_ponto.Acesso_BD()
        lista_populada = popular_list_box.popula_lista()
        #print(lista_populada)

        #layout da aplicacao
        layout = [
            [sg.Text('Dia da marcação..:'), sg.Text(data_atual, key='data'), sg.CalendarButton('Usar outra Data?', target='data', key='data_personalizada', format='%d/%m/%Y'), sg.Checkbox('Madrugada?', change_submits=True, enable_events=True, default='0',key='madrugada')],
            [sg.Text('Horário de entrada'), sg.Input(key='-TIMEIN1-', size=(4,1), change_submits=True, do_not_clear=True, focus=True), sg.Text(':', pad=(0,0)),sg.Input(key='-TIMEIN2-', size=(4,1), change_submits=True, do_not_clear=True),  sg.Text('Horário de Saída'),sg.Input(hora_atual, key='-TIMEOUT1-', size=(4, 1), change_submits=True, do_not_clear=True), sg.Text(':', pad=(0, 0)),sg.Input(minuto_atual, key='-TIMEOUT2-', size=(4, 1), change_submits=True, do_not_clear=True)],
            [sg.Button('Salvar')],
            [sg.Text('Horários Salvos..:')],
            [sg.Listbox(values=lista_populada, size=(90,15), auto_size_text=True, key='-BOX-')],
            [sg.Button('Editar'), sg.Button('Excluir'), sg.Button('Exportar'), sg.Button('Sair')],
            [sg.Text()],
            [sg.Text()],
            [sg.Text('Author: Valdemir Bezerra', font=('Helvetica', 10, 'underline italic'))]

        ]

        #monto a janela
        self.janela = sg.Window('Controle dos horários', size=(700, 400)).layout(layout)
def runUI():
    global totalCompanies
    layout = [[sg.Text('Fetch Leads')],
              [sg.Text('Destination for Files:', size=(16, 1)), sg.InputText(key='folder'), sg.FolderBrowse(target='folder')],
              [sg.Text('Date of Desired File:', size=(16, 1)), sg.InputText('Choose the date ---->', size=(30, 1), key='date'),
               sg.CalendarButton("Date", target='date',size=(15, 1))],
              [sg.Text('Keyword:', size=(16,1)), sg.InputText('',size=(30, 1), key = 'keyword')],
              [sg.Submit()]]

    window = sg.Window('MULE 002', layout)

    #keep UI open unless user closes it
    while True:
        event, values = window.Read()
        if event is None:
            break
        dest = values['folder']
        date = values['date']
        key = values['keyword']

        if date == 'Choose the date ---->' or dest == '':
            sg.Popup("Please fill necessary criteria")
            continue

        newDest, fileName = downloadTextFile(date, dest)
        infoList = readTextFile(newDest, key)
        if len(infoList) != 0:
            finish = exportToCSV(infoList, dest, fileName)
            if finish is True:
                totalCompanies = 0
                sg.Popup("Done!")
                print(infoList)
예제 #9
0
def create_field_date(field_def):
    date_default = util.get_date_field_default(field_def['default_value'])
    field_key = 'input_' + field_def['api_name']
    return (sg.In(default_text=date_default, size=(20, 1), key=field_key),
            sg.CalendarButton(button_text='Choose Date',
                              target=field_key,
                              key='date'))
예제 #10
0
def get_date(title=None):
    if title is None:
        title = 'Choose Date'

    layout = [[sg.Text('Enter Date (YYYY-MM-DD) format')],
              [
                  sg.CalendarButton('Pick Date',
                                    target='date',
                                    key='cal_button'),
                  sg.Input(key='date', enable_events=True)
              ], [sg.Button('Ok'), sg.Button('Cancel')]]
    win = sg.Window(title, layout=layout)

    while True:
        event, values = win.Read()
        if event is None or event == 'Cancel':
            win.Close()
            return
        if event == 'date':
            date = values[event][:10]  # keep only YYYY-MM-DD
            win.Element(event).Update(value=date)
            try:
                date = pd.Timestamp(date)
                # Currently not supported
                # win.Element('cal_button').Update(
                #     default_date_m_d_y=(date.month, date.day, date.year))
            except ValueError:
                pass

        elif event == 'Ok':
            break
    win.Close()
    return pd.Timestamp(values['date']).to_pydatetime()
예제 #11
0
def create_new_patient(first_name: str = "",
                       last_name: str = "",
                       id_type: str = "",
                       id_data: str = "") -> None:
    labels = [[gui.T("First Name:")], [gui.T("Last Name:")],
              [gui.T("ID Type:")], [gui.T("ID Value:")], [gui.T("Height:")],
              [gui.T("Weight:")], [gui.T("Sex:")], [gui.T("Date of Birth:")]]
    inputs = [[gui.In(first_name, key="first_name", size=(17, 1))],
              [gui.In(last_name, key="last_name", size=(15, 1))],
              [
                  gui.InputCombo(idTypes,
                                 default_value=id_type,
                                 key="id_type",
                                 size=(15, 1))
              ], [gui.In(id_data, key="id_data", size=(15, 1))],
              [gui.In(key="height", size=(15, 1))],
              [gui.In(key="weight", size=(15, 1))],
              [gui.InputCombo(sexOptions, key="sex", size=(15, 1))],
              [
                  gui.In(str(date.today()), key="dob", size=(9, 1),
                         pad=(2, 0)),
                  gui.CalendarButton("",
                                     target="dob",
                                     image_filename="images/calendar.png",
                                     image_subsample=18)
              ]]

    layout = [[gui.T("Input new patient information:", key="top_text")],
              [gui.Column(labels), gui.Column(inputs)],
              [gui.Submit(), gui.Button("Provider Menu")]]

    window = gui.Window("Edit Patient Info").Layout(layout)

    while True:
        button, values = window.Read()

        if button in (None, "Quit"):
            window.close()
            break
        elif button == "Provider Menu":
            window.close()
            provider_menu()
            break
        elif button == "Submit":
            if len(values["dob"]) >= 10:
                dob = date.fromisoformat(values["dob"][:10])
            else:
                dob = None
            patient = Patient(values["first_name"], values["last_name"], dob,
                              values["id_data"], values["id_type"],
                              values["sex"], values["height"],
                              values["weight"])
            try:
                db.add_patient(patient)
                window.close()
                display_patient(patient)
                break
            except Conflict:
                window["top_text"].update("Patient already exists!")
예제 #12
0
def edit_patient_info(patient: Patient) -> None:
    labels = [[gui.T("First Name:")], [gui.T("Last Name:")],
              [gui.T("ID Type:")], [gui.T("ID Value:")], [gui.T("Height:")],
              [gui.T("Weight:")], [gui.T("Sex:")], [gui.T("Date of Birth:")]]
    inputs = [[
        gui.In(patient.first_name,
               key="first_name",
               size=(17, 1),
               disabled=True)
    ], [
        gui.In(patient.last_name, key="last_name", size=(15, 1), disabled=True)
    ],
              [
                  gui.InputCombo(idTypes,
                                 default_value=patient.id_type,
                                 key="id_type",
                                 size=(15, 1),
                                 disabled=True)
              ],
              [
                  gui.In(patient.id_data,
                         key="id_data",
                         size=(15, 1),
                         disabled=True)
              ], [gui.In(str(patient.height), key="height", size=(15, 1))],
              [gui.In(str(patient.weight), key="weight", size=(15, 1))],
              [
                  gui.InputCombo(sexOptions,
                                 default_value=patient.sex,
                                 key="sex",
                                 size=(15, 1))
              ],
              [
                  gui.In(str(patient.dob), key="dob", size=(9, 1), pad=(2, 0)),
                  gui.CalendarButton("",
                                     target="dob",
                                     image_filename="images/calendar.png",
                                     image_subsample=18)
              ]]

    layout = [[gui.Column(labels), gui.Column(inputs)], [gui.Submit()]]

    window = gui.Window("Edit Patient Info").Layout(layout)

    button, values = window.Read()
    patient.first_name = values["first_name"]
    patient.last_name = values["last_name"]
    patient.id_type = values["id_type"]
    patient.id_data = values["id_data"]
    patient.height = values["height"]
    patient.weight = values["weight"]
    patient.sex = values["sex"]
    if len(values["dob"]) >= 10:
        patient.dob = date.fromisoformat(values["dob"][:10])
    else:
        patient.dob = None
    db.push_patient(patient)
예제 #13
0
    def get_report_date_window(self, window_location, start_date, stop_date):
        layout = [
            [sg.Text("Start")],
            [
                sg.Input(start_date, key="start"),
                sg.CalendarButton(
                    "",
                    target="start",
                    key="date_select",
                    format="%Y-%m-%d",
                    image_filename=self.images["cal_icon"],
                    size=(1, 1),
                ),
            ],
            [sg.Text("End")],
            [
                sg.Input(stop_date, key="stop"),
                sg.CalendarButton(
                    "",
                    target="stop",
                    key="date_select",
                    format="%Y-%m-%d",
                    image_filename=self.images["cal_icon"],
                    size=(1, 1),
                ),
            ],
            [
                sg.Text(
                    "Error: Nothing was tracked during the dates selected.",
                    key="error_message",
                    visible=False,
                )
            ],
            [sg.Button("Submit"), sg.Button("Cancel")],
        ]

        return sg.Window(
            self.PROGRAM_TITLE,
            layout=layout,
            location=window_location,
            auto_size_buttons=False,
            finalize=True,
        )
예제 #14
0
    def new_menu_modal(self):
        calendar_icon = './KitchenGUI/calendar2.png'
        layout = [
            [sg.T('Date Range: '),
             sg.In(key='-MODAL-START-', enable_events=True, size=(10,1)),
             sg.CalendarButton('', format='%Y-%m-%d',
             button_color=(sg.theme_background_color(), sg.theme_background_color()),
             image_filename=calendar_icon, image_subsample=8),
             sg.T('To'),
             sg.In(key='-MODAL-END-', enable_events=True, size=(10,1)),
             sg.CalendarButton('', format='%Y-%m-%d',
             button_color=(sg.theme_background_color(), sg.theme_background_color()),
             image_filename=calendar_icon, image_subsample=8)],
            [sg.T('Menu Name: '),
             sg.In(key='-MODAL-NAME-', enable_events=True, size=(36,1))],
            [sg.Button('Create', key="-MODAL-CREATE-"),
             sg.Button('Cancel', key="-MODAL-CANCEL-")]
        ]

        window = sg.Window('New Menu', layout, finalize=True, modal=True)
        set_name = False
        while True:
            event, values = window.read()

            if event in (sg.WIN_CLOSED, "-MODAL-CANCEL-"):
                break
            elif event == "-MODAL-NAME-":
                set_name = True
            elif event == "-MODAL-CREATE-":
                start = window['-MODAL-START-'].get()
                end = window['-MODAL-END-'].get()
                name = window['-MODAL-NAME-'].get()
                new_menu = Menu.menu(start=start, end=end, name=name)
                self.model.set('activeMenu', value=new_menu)
                self.model.set('activeMenuDay', value=new_menu.getDay(0))
                break
            if not set_name:
                start = window['-MODAL-START-'].get()
                end = window['-MODAL-END-'].get()
                window['-MODAL-NAME-'].update(value=f'{start}{Menu.menu.date_delimiter}{end}')

        window.close()
예제 #15
0
파일: FormAluno.py 프로젝트: GBilefete/ap2
    def __init__(self):

        mod = Modalidade()
        modalidades = mod.getMod()

        conteudo = [
            [gui.Text("Nome: ", size=(15, 1)),
             gui.Input(key="txtNome")],
            [gui.Text("CPF: ", size=(15, 1)),
             gui.Input(key="txtCpf")],
            [gui.Text("E-mail: ", size=(15, 1)),
             gui.Input(key="txtEmail")],
            [
                gui.Text("Sexo: ", size=(15, 1)),
                gui.Radio("Feminino", "sexo", key="F"),
                gui.Radio("Masculino", "sexo", key="M")
            ],
            [
                gui.Text("Modalidades: ", size=(15, 1)),
                gui.Listbox(list(modalidades.keys()),
                            size=(20, 8),
                            select_mode=gui.LISTBOX_SELECT_MODE_EXTENDED,
                            key='_MOD_')
            ],
            [
                gui.Text("Telefone residencial: ", size=(15, 1)),
                gui.Input(key="txtFone_res")
            ],
            [
                gui.Text("Telefone celular: ", size=(15, 1)),
                gui.Input(key="txtFone_cel")
            ],
            [
                gui.Text("Data de nascimento: ", size=(15, 1)),
                gui.Input("", key="data_nasc"),
                gui.CalendarButton("Selecione", key="date")
            ],
            [
                gui.Text("Endereço: ", size=(15, 1)),
                gui.Input(key="txtEndereco")
            ],
            [
                gui.Text("Observações: ", size=(15, 1)),
                gui.Multiline(size=(43, 5), key="txtObs")
            ],
            [
                gui.Text("Status: ", size=(15, 1)),
                gui.InputCombo(("Inativo", "Ativo"),
                               size=(20, 1),
                               key="status")
            ], [gui.Button("Salvar")]
        ]
        self.tela = gui.Window("Cadastro de Alunos").layout(conteudo)
예제 #16
0
파일: sgadt.py 프로젝트: gitthious/ADT
def dateWidget(valtype, val, key, disabled=False, size=(None,None)):
    if val is None: val = ''
    return [
        sg.In(val, size=(20,1), key=key, change_submits=True, do_not_clear=True,
              disabled=disabled),
        sg.CalendarButton("", target=key,
                          default_date_m_d_y=(val.month, val.day, val.year),
                          image_filename=CALENDAR_ICON,
                          image_size=(25, 25),
                          image_subsample=1,
                          border_width=0),
        ]
예제 #17
0
def export_to_csv():
    layout = [
        [sg.CalendarButton("from date", key="from")],
        [sg.CalendarButton("to date", key="to")],
        [sg.Cancel("Cancel"), sg.Submit("Submit")],
    ]

    window = sg.Window("Select Dates", layout, resizable=True)
    _, values = window.read()
    from_date = values["from"]
    to_date = values["to"]
    window.close()

    if not (from_date and to_date):
        sys.exit()
    else:
        from_date = values["from"].strftime("%Y-%m-%d")
        to_date = values["to"].strftime("%Y-%m-%d")

    results = Shipment.fetch_all_records_in_date(from_date, to_date)

    with open(f"{from_date} to {to_date} consol.csv", "w",
              newline="") as csvfile:
        r = csv.writer(csvfile, delimiter=",")
        headings = [
            "Client",
            "Width",
            "Length",
            "Height",
            "Gross Weight",
            "Purpose",
            "On-hand",
            "Create Date",
            "Release Status",
            "HAWB",
            "MAWB",
        ]
        r.writerow(headings)
        for i in range(len(results)):
            r.writerow(results[i])
예제 #18
0
def gui_add_order(unique_distributors, unique_grants, unique_sivugs):
    get_item = True
    order_values = None
    items_values = None
    cur_date = datetime.datetime.now()
    cur_date = '%s-%s-%s' % (cur_date.year, cur_date.month, cur_date.day)
    # create order
    layout = [
        [sg.Text('Please enter your order:')],
        [
            sg.Text('Distributor: '),
            sg.Combo(unique_distributors, key='distributor')
        ],
        [
            sg.CalendarButton('Order Date',
                              key='date',
                              disabled=False,
                              focus=True,
                              target='date_picked',
                              format='%Y-%m-%d'),
            sg.InputText(cur_date, key='date_picked')
        ], [sg.Text('SAP number: '),
            sg.InputText(key='SAP_number')],
        [sg.Text('Grant: '),
         sg.Combo(unique_grants, key='grant_number')],
        [sg.Text('Order File: '),
         sg.In(key='order_file'),
         sg.FileBrowse()],
        [
            sg.Text('Price Quote File: '),
            sg.In(key='price_quote_file'),
            sg.FileBrowse()
        ], [sg.Button('Ok'), sg.Button('Cancel')]
    ]
    # Create the Window
    window = sg.Window('Add Order', layout, font=10)

    while True:
        event, order_values = window.read()
        if event in (None, 'Cancel'):
            get_item = False
            order_values = None
            break
        if event in ('Ok'):
            if order_values['distributor'] == '':
                gui_message("Must enter a distributor")
            else:
                break
    window.close()
    if get_item:
        items_values = add_items_to_order(unique_sivugs)
    return order_values, items_values
예제 #19
0
 def configura(self, dados_partida, jogadores, presentes, gols_mandante):
     sg.ChangeLookAndFeel('SystemDefault'),
     layout = [
         [sg.CalendarButton('Data:', target='4', button_color=('red', 'white'), format=('%d/%m/%Y')), sg.InputText(dados_partida['data'], key='4', visible=True, disabled=True, size=(9, 1)), sg.Checkbox('Casa', key='5', font='Arial 12', default=True), sg.Checkbox('Fora', key='6', font='Arial 12')],
         [sg.Text('')],
         [sg.Text('Inter do Carianos', size=(14, 1)), sg.InputText(gols_mandante, size =(2,1), key='2', disabled=True), sg.Text(' x ', size=(2, 1)), sg.InputText(dados_partida['gols_adversario'], size =(2,1), key='3'), sg.Text(' ', size=(1, 1)), sg.InputText(dados_partida['adversario'], size=(14, 1), key='1')],
         [sg.Text('')],
         [sg.Text('              Plantel'), sg.Text('                           Presentes')],
         [sg.Listbox(values=(jogadores), size=(43, 29), font='Fixedsys 15', key='jogador'), sg.Listbox(values=(presentes), size=(43, 29), font='Fixedsys 15', key='presente')],
         [sg.Text('Go:'), sg.Spin(values=('0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','34','35','36','37','38','39','40','41','42','43','44','45','46','47','48','49','50','51','52','53','54','55','56','57','58','59','60','61','62','63','64','65','66','67','68','69','70','71','72','73','74','75','76','77','78','79','80','81','82','83','84','85','86','87','88','89','90','91','92','93','94','95','96','97','98','99'), initial_value='0', key='go'), sg.Text('Ca:'), sg.Spin(values=('0','1','2'), initial_value='0', key='ca'), sg.Text('Cv:'), sg.Spin(values=('0','1'), initial_value='0', key='cv'), sg.Text(' '), sg.Submit('Adicionar', font='Arial 12', size=(18, 1), key='adiciona'), sg.Submit('Retirar', font='Arial 12', size=(18, 1), key='retira')],
         [sg.Submit('Confirmar', font='Arial 12', size=(10, 1), key='confirma')]
     ]
     layout.extend(self.voltar())
     self.__window = sg.Window('Partida', element_justification='left', size=(800, 850), font='Arial 24', icon='icon.ico').Layout(layout)
예제 #20
0
def getUserInput():
    times = ["12:00 AM", "12:30 AM", "1:00 AM", "1:30 AM", "2:00 AM", "2:30 AM", "3:00 AM", "3:30 AM", "4:00 AM", "4:30 AM", "5:00 AM", "5:30 AM", "6:00 AM", "6:30 AM", 
    "7:00 AM", "7:30 AM", "8:00 AM", "8:30 AM", "9:00 AM", "9:30 AM", "10:00 AM", "10:30 AM", "11:00 AM", "11:30 AM", "12:00 PM", "12:30 PM", "1:00 PM", "1:30 PM",
    "2:00 PM", "2:30 PM", "3:00 PM", "3:30 PM", "4:00 PM", "4:30 PM", "5:00 PM", "5:30 PM", "6:00 PM", "6:30 PM", "7:00 PM", "7:30 PM", "8:00 PM", "8:30 PM", "9:00 PM",
    "9:30 PM", "10:00 PM", "10:30 PM", "11:00 PM", "11:30 PM"] 
    party_sizes = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21]

    layout = [
        [sg.Text("Find Your Table", justification="center", size=(45,1), font=("Source Sans Bold", 25))],
        [sg.Text("")],
        [sg.CalendarButton("Date", font=("Source Sans Bold", 14), close_when_date_chosen=True, target="date_input", no_titlebar=False, format='%m/%d/%Y'), sg.Input(key="date_input", size=(15,1), font=("Source Sans Bold", 14), default_text=datetime.datetime.now().strftime("%m/%d/%Y")), 
        sg.Text("Time", font=("Source Sans Bold", 14)), sg.Combo(times, font=("Source Sans Bold", 14), key="time_input", readonly=True, default_value=formatCurrentTime(datetime.datetime.now().strftime("%I:%M %p"))), sg.Text("Party Size", font=("Source Sans Bold", 14)), 
        sg.Combo(party_sizes, font=("Source Sans Bold", 14), key="party_input", readonly=True, default_value=2), sg.Text("Neighborhood", font=("Source Sans Bold", 14)), sg.Input(size=(15,1), font=("Source Sans Bold", 14), key="hood_input", tooltip="Example: Murray Hill")],
        [sg.Text("")],
        [sg.Button("Submit", font=("Source Sans Bold", 14)), sg.Exit(font=("Source Sans Bold", 14))]
        ]

    window = sg.Window('Reservation Details', layout)

    #Loop for open UI window to run
    while True:
        event, values = window.read()
        #Data validation when submit is hit
        if event == "Submit":
            date = values["date_input"]
            time = values["time_input"]
            party_size = values["party_input"]
            hood = values["hood_input"]
            values.pop("Date")
            if "" in values.values():
                errorWindow("Please complete all the fields")
            else:
                try:
                    datetime.datetime.strptime(values["date_input"], "%m/%d/%Y")
                except:
                    errorWindow("Please enter a valid date format \"MM/DD/YYYY\" ")
                    continue
                if datetime.datetime.strptime(values["date_input"]+" "+addZeroPadding(values["time_input"]), "%m/%d/%Y %I:%M %p") < datetime.datetime.now():
                    values["date_input"] = datetime.datetime.now().strftime("%m/%d/%Y")
                    values["time_input"] = formatCurrentTime(datetime.datetime.now().strftime("%I:%M %p"))
                    break
                else:
                    break
        #Quit if the window is closed or "Exit" is selected
        if event in (sg.WIN_CLOSED, 'Exit'):
            quit()
    window.close()
    return date, time, party_size, hood
예제 #21
0
def open_CALENDAR(wndw):
    wndw.Close()
    os.system('cls')  # on windows
    layout_CALENDAR = [
        menu_def, [sg.T('Calendar Test')],
        [
            sg.In('', size=(20, 1), key='-CALENDAR IN-'),
            sg.CalendarButton('Choose Date',
                              target='-CALENDAR IN-',
                              key='-CALENDAR date-')
        ], [sg.Button('CALENDAR', key='-CALENDAR BT-'),
            sg.Exit()]
    ]
    sg.ChangeLookAndFeel('BrownBlue')
    wndw = sg.Window('Calendar', location=(700, 400)).Layout(layout_CALENDAR)
    return wndw
예제 #22
0
    def __open_add_context(self):
        def TextLabel(text):
            return sg.Text(text + ':', justification='r', size=(15, 1))

        # ------ GUI Definition ------ #
        layout = [
            [
                sg.Text("Add Entry", font="Any 15"),
                sg.Text("Invalid entries! Try again.",
                        key="-ERROR-",
                        visible=False)
            ],
            [TextLabel("Amount"),
             sg.Input(key="-AMOUNT-")],
            [TextLabel("Reason"),
             sg.Input(key="-REASON-")],
            [
                TextLabel("Date"),
                sg.Input(disabled=True, key="-DATE-"),
                sg.CalendarButton("📅")
            ],
            [sg.Button("Save", key="-SAVE-"),
             sg.Button("Cancel")],
        ]

        window = sg.Window("Add entry",
                           layout,
                           keep_on_top=True,
                           finalize=True)

        while True:
            event, values = window.read()
            if event == sg.WIN_CLOSED or event == "Cancel":
                window.close()
                break
            print("Button = ", event)
            # ------ Process save ------ #
            if event == "-SAVE-":
                amount = values["-AMOUNT-"]
                reason = values["-REASON-"]
                date = values["-DATE-"]
                if not amount or not reason or not date:
                    window["-ERROR-"].update(visible=True)
                else:
                    self.database_connector.add_expense(amount, reason, date)
                    window.close()
예제 #23
0
def forecast():
    sizein = (20, 10)
    layout = [
        [sg.Button('make forecast')],
        [
            sg.Text('date'),
            sg.In(key='C1', enable_events=True, visible=True),
            sg.CalendarButton(
                'from',
                target='C1',
            ),
            sg.Text('kvant'),
            sg.InputText()
        ],
        # [sg.Output(size=(1000, 50))],
        [sg.Cancel()]
    ]
    window = sg.Window('fitness base', layout, size=(1500, 500))
    # 89824366463 2020 year gum evening
    while True:
        event, values = window.read()
        if event == 'Cancel' or event == None:
            break
        date1 = values['C1'].split()[0]
        kvant = values[0]
        print(values)
        print(date1)
        if event == 'make forecast':
            query = ' select c.cost from content c where c.date_in>={d1} join `time interval` ti on `ti`.id = ct.interval_id'.format(
                d1=date1, )
            ######################################################this query don't work
            print(query)
            result = None
            try:
                cursor.execute(query)
                result = cursor.fetchall()
            except Error as e:
                error(f"The error '{e}' occurred")
                break
            print(result)
            ans = 0
            for i in result:
                ans += i
            print('sum', ans)
    window.close()
예제 #24
0
    def _create_book_form_frame(self):
        self.file_input = sg.InputText(enable_events=True,
                                       key=BookTab.EventKeys.FILE_INPUT)
        browse_button = sg.FileBrowse(file_types=(("Text files", "*.txt"),
                                                  ("All Files", "*")))
        self.title_input = sg.InputText()
        self.author_input = sg.InputText()
        self.date_input = sg.InputText()
        select_date_button = sg.CalendarButton('Select',
                                               target=(sg.ThisRow, -1),
                                               format=DATE_FORMAT)

        self.file_size_text = sg.Text("File size: None", auto_size_text=False)

        insert_book_button = sg.Ok("Insert Book",
                                   key=BookTab.EventKeys.INSERT_BOOK,
                                   size=(20, 0))
        self.error_text = sg.Text("",
                                  text_color=sgh.ERROR_TEXT_COLOR,
                                  auto_size_text=False)

        frame = sg.Frame(
            title="",
            layout=[
                [
                    sg.Text("Path:", size=(5, 1)), self.file_input,
                    browse_button
                ],
                [sg.Text("Title:", size=(5, 1)), self.title_input],
                [sg.Text("Author:", size=(5, 1)), self.author_input],
                [
                    sg.Text("Date:", size=(5, 1)), self.date_input,
                    select_date_button
                ],
                [self.file_size_text],
                [insert_book_button, self.error_text],
            ])

        return frame
예제 #25
0
def show_gui():
    '''
    Display GUI to enter ride info.
    '''
    sg.theme('Reddit')

    layout = [[
        sg.Text('Date'),
        sg.Input(key='Date'),
        sg.CalendarButton('...', format='%Y-%m-%d')
    ], [sg.Text('Miles'), sg.Input(key='Miles')],
              [
                  sg.Radio('Outside', 'Radio1', key='Outside'),
                  sg.Radio('Zwift', 'Radio1', default=True, key='Zwift')
              ],
              [sg.Button('Submit', bind_return_key=True),
               sg.Button('Cancel')]]

    window = sg.Window('Enter Ride Data', layout, font=('Arial 10'))

    while True:
        event, values = window.read()
        if event in (sg.WIN_CLOSED, 'Cancel'):
            break
        elif event == 'Submit':
            date = values['Date']
            miles = values['Miles']
            location = ''
            if values['Outside']:
                location = 'outside'
            else:
                location = 'zwift'

            with open('rides.csv', 'a', newline='') as csvfile:
                ride_writer = csv.writer(csvfile, delimiter=',')
                ride_writer.writerow([date, miles, location])
            break
    window.close()
예제 #26
0
def init_window() -> sg.Window:
    sg.theme('SystemDefault1')

    WINDOW_LAYOUT = [
        [sg.Text("Image Folder"),
         sg.In(enable_events=True, key="-FOLDER-"),
         sg.FolderBrowse(),
         ],
        [sg.Listbox(values=[], enable_events=True, key="-FILE LIST-", disabled=True,
                    select_mode=sg.LISTBOX_SELECT_MODE_EXTENDED, size=(70, 20))
         ],
        [sg.Text("File"),
         sg.Text(size=(70, 1), key="-TFILEPATH-")],
        [sg.HSeparator()],  # =====================================
        [sg.Text("Exif date", size=(20, 1)),
         sg.Text(key="-TEXIF_DATE-", size=(20, 1))],
        [sg.Text("Exif date original", size=(20, 1)),
         sg.Text(key="-TEXIF_DATE_ORIGINAL-", size=(20, 1))],
        [sg.Text("Exif date digitalized", size=(20, 1)),
         sg.Text(key="-TEXIF_DATE_DIGITALIZED-", size=(20, 1))],
        [sg.HSeparator()],  # =====================================
        [sg.Text("New original date", size=(20, 1)),
         sg.In(key="-TNEW_DATE-", disabled=True),
         sg.CalendarButton("Edit", key="-BEDIT_DATE-", disabled=True)
        ],
        [sg.Button("Update", key="-BUPDATE-", disabled=True),
         sg.Button("Update & select next", key="-BUPDATE_SEL_NEXT-", disabled=True),
         sg.Button("Update selected files", key="-BUPDATE_ALL_SELECTED-", disabled=True),
         sg.Button("Update all files in directory", key="-BUPDATE_ALL_DIR-", disabled=True),],
        [sg.ProgressBar(10, key="-PROGRESS-", visible=False, size=(50, 20))],
        [sg.Text(key="-STATUS-", size=(70, 1))],
        [sg.Text("Datetime guess format strings")],
        [sg.Multiline(default_text=DATE_DEFAULT_PATTERN, key="-DATE_PATTERN-")],
    ]

    return sg.Window("Exif date editor", WINDOW_LAYOUT)
def interaction_p1():
    frame_date = [[sg.In(key='date'), sg.CalendarButton('Choose Date')]]

    frame_spoke_to = [[
        sg.Radio('Yes', 'spoke', key='spoke_yes', enable_events=True),
        sg.Radio('No', 'spoke', key='spoke_no', enable_events=True)
    ]]

    layout = [[sg.Frame('Date of Contact', frame_date)],
              [sg.Frame('Did you speak to the alumni?', frame_spoke_to)],
              [sg.OK(), sg.Cancel()]]

    window = sg.Window('UIF: Alumni Database', layout)

    while True:
        event, values = window.read()

        if event in ('Cancel', sg.WIN_CLOSED):
            values = None
            break

        elif event == 'OK':
            if len(values['date']) == 0:
                sg.popup_ok('Please select a date which\n' +
                            'you contacted the alumni.')

            elif sum([values['spoke_yes'], values['spoke_no']]) == 0:
                sg.popup_ok('Please select an option if you\n' +
                            'spoke to the alumni or not.')

            elif (len(values['date']) != 0
                  and sum([values['spoke_yes'], values['spoke_no']]) == 1):
                break

    window.close()
    return values
예제 #28
0
 if event in (None, 'Cancel'):
     break
 elif event == 'Send Email':
     sg.theme('Dark Amber')
     layout = [[
         sg.Frame(layout=[[
             sg.Text(
                 'Select a date or dates to receive emails',
                 key='-TXT-')
         ],
                          [
                              sg.Input(key='-IN-',
                                       size=(20, 1)),
                              sg.CalendarButton(
                                  'Start Date',
                                  close_when_date_chosen
                                  =True,
                                  target='-IN-')
                          ],
                          [
                              sg.Input(key='-IN1-',
                                       size=(20, 1)),
                              sg.CalendarButton(
                                  'End Date  ',
                                  close_when_date_chosen
                                  =True,
                                  target='-IN1-')
                          ],
                          [
                              sg.Button(
                                  "Send Email",
예제 #29
0
    [sg.Text('Downloads files from edp', size=(20, 2))],

    [sg.Text('Gestão', size=(20, 1)), sg.Combo(choices, key='GESTAO', default_value='None', enable_events=True)],
    [sg.Text('OU', size=(30, 1), font='Any 15', justification='center')],

    [sg.Text('CPEs ou CILs', size=(20, 1)), sg.InputText(key='CILS-OR-CPES', size=(60, 3), enable_events=True)],
    [
        sg.Text('', size=(20, 1)),
        sg.Text('Data de Inicio', size=(20, 1), justification='center'),
        sg.Text('Data de Fim', size=(20, 1), justification='center')
    ],

    [
        sg.Text('Intervalo de Datas', size=(20, 1)),
        sg.In(key='DATE-BEGIN', enable_events=True, visible=False),
        sg.CalendarButton('2013-01', target='DATE-BEGIN', pad=None,
                          button_color=('red', 'white'), key='DATE-BEGIN-BTN', format=('%Y-%m'), size=(20, 1)),
        sg.In(key='DATE-END', enable_events=True, visible=False),
        sg.CalendarButton(dt.now().date().strftime('%Y-%m'), target='DATE-END', pad=None,
                          button_color=('red', 'white'), key='DATE-END-BTN', format=('%Y-%m'), size=(20, 1))
    ],
    [sg.Text('', size=(20, 2))],
    [sg.Text('Pasta de destino dos ficheiros\n(irá para a rede por defeito):', size=(20, 3),
             justification='center'), sg.InputText(key='DESTINATION-PATH', size=(60, 3),  justification='center')],


    [sg.Button('Download Files', key='OK_DOWNLOAD')]
]
tab_info = [
    [sg.Text('gets info from edp', size=(20, 2))],
    [sg.Text('Gestão', size=(20, 1)), sg.Combo(choices, key='GESTAO_INFO', default_value='None', enable_events=True)],
    [sg.Text('OU', size=(30, 1), font='Any 15', justification='center')],
예제 #30
0
        def create_window(self):
            """ Create GUI instance """
            sg.change_look_and_feel(self.theme)

            # Column layout for media player button controls
            buttons_group = [[
                sg.In(key='CALENDAR', enable_events=True, visible=False),
                sg.CalendarButton('',
                                  image_filename=BUTTON_DICT['CALENDAR'],
                                  pad=(0, 0),
                                  button_color=('white',
                                                self.default_bg_color),
                                  border_width=0,
                                  key='CALENDAR',
                                  format=('%Y%m%d')),
                self.button('REWIND', BUTTON_DICT['START'],
                            "Navegar entre os eventos marcados."),
                self.button('REWIND_10', BUTTON_DICT['REWIND_10'],
                            "Recuar 10s"),
                self.button('REWIND_1', BUTTON_DICT['REWIND_1'], "Recuar 1s"),
                self.button('PLAY', BUTTON_DICT['PLAY_OFF'],
                            "Pausar ou Resumir a execução."),
                self.button('FORWARD_1', BUTTON_DICT['FORWARD_1'],
                            "Avançar 1s"),
                self.button('FORWARD_10', BUTTON_DICT['FORWARD_10'],
                            "Avançar 10s"),
                self.button('FORWARD', BUTTON_DICT['END'],
                            "Navegar entre os eventos marcados."),
            ]]

            # Column layout for media info and instructions
            info_column = [[
                sg.Text('Loading...',
                        size=(45, 3),
                        font=(sg.DEFAULT_FONT, 8),
                        pad=(0, 5),
                        key='INFO')
            ]]

            direita_column = [
                [
                    sg.Text('dd/mm/aaaa',
                            font=(sg.DEFAULT_FONT, 8, 'bold'),
                            key='NOW'),
                    sg.Text('Horários disponíveis: ',
                            font=(sg.DEFAULT_FONT, 8, 'bold'))
                ],
                [
                    sg.Listbox(
                        l,
                        size=(40, 24),
                        enable_events=True,
                        key='LISTA',
                        tooltip=
                        "Selecione uma data para visualizar as gravações disponíveis."
                    )
                ],
                [
                    sg.Text('LOG de ocorrências disponível AQUI',
                            key='LOG',
                            enable_events=True,
                            font=(sg.DEFAULT_FONT, 9, 'underline'),
                            tooltip="Clique para abrir.")
                ],
                [
                    sg.Text('Copyright ® 2021',
                            key='COPYRIGHT',
                            enable_events=True,
                            font=(sg.DEFAULT_FONT, 8))
                ],
            ]

            # ------ Menu Definition ------ #
            menu_def = [
                ['File', ['Open config', 'Exit']],
                ['Help', 'About...'],
            ]

            # Main GUI layout

            coluna_export = [
                [
                    sg.Text('- Exportação -',
                            justification='center',
                            size=(25, 1))
                ],
                [
                    sg.Button(
                        "Mark In",
                        size=[10, 1],
                        button_color=['white', 'black'],
                        border_width='5',
                        key='MARK_IN',
                        tooltip="Marque a posição de inicio do trecho desejado."
                    ),
                    sg.Button(
                        "Mark Out",
                        size=[10, 1],
                        button_color=['black', 'white'],
                        border_width='5',
                        key='MARK_OUT',
                        tooltip="Marque a posição de fim do trecho desejado.")
                ],
                [
                    sg.
                    In('00:00',
                       size=[11, 1],
                       justification='center',
                       key='IN_TEXT',
                       readonly='True',
                       text_color='black',
                       tooltip="Você não pode editar manualmente esse campo."),
                    sg.In(
                        '00:10',
                        size=[11, 1],
                        justification='center',
                        key='OUT_TEXT',
                        readonly='True',
                        text_color='black',
                        tooltip="Você não pode editar manualmente esse campo.")
                ],
                [
                    sg.FolderBrowse(
                        "Export",
                        key='EXPORT',
                        size=[22, 1],
                        button_color=['green', 'white'],
                        pad=[5, 5],
                        enable_events=True,
                        disabled=True,
                        tooltip="Use para exportar um trecho do audio.")
                ],
            ]

            coluna_esquerda = [
                [sg.Menu(menu_def, tearoff=False)],
                [
                    sg.Image(filename=DEFAULT_IMG,
                             pad=(0, 5),
                             size=self.player_size,
                             key='VID_OUT')
                ],
                [
                    sg.Text('00:00', key='TIME_ELAPSED'),
                    sg.Slider(
                        range=(0, 1),
                        enable_events=True,
                        resolution=0.0001,
                        disable_number_display=True,
                        background_color='#83D8F5',
                        orientation='h',
                        key='TIME',
                        tooltip=
                        'Tente utilizar a rolagem do mouse para avançar ou retroceder.'
                    ),

                    # Elements for tracking media length and track counts
                    sg.Text('00:00', key='TIME_TOTAL')
                ],
                [
                    sg.Graph(canvas_size=(self.player_size[0], 20),
                             graph_bottom_left=(-57, 0),
                             graph_top_right=(840, 20),
                             background_color=self.default_bg_color,
                             enable_events=True,
                             key='GRAPH')
                ],

                # Button and media information layout (created above)
                [
                    sg.Column(buttons_group),
                    sg.Column(info_column),
                    sg.Column(coluna_export,
                              background_color='black',
                              element_justification='center')
                ]
            ]

            principal = [[
                sg.Column(coluna_esquerda),
                sg.Column(direita_column)
            ]]

            # Create a PySimpleGUI window from the specified parameters
            window = sg.Window('SmartLogger',
                               principal,
                               element_justification='center',
                               icon=ICON,
                               finalize=True,
                               return_keyboard_events=True)

            # Expand the time element so that the row elements are positioned correctly
            window['TIME'].expand(expand_x=True)
            return window