Python Forum
PysimpleGUI window update dynamically
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
PysimpleGUI window update dynamically
#7
I appreciate your help. I changed it again, seems like the control definition is ok.
The last version is read "checkmaster_config.ini"(upload file need to change the suffix from .txt to .ini),selected different model dynamic updated columns name list and limit to each section, such P020&P025read out:
[P020]
item1=DUT_NM_Sens_Corr1000Hz_94SPL__Median,0.3,0.2,0.1
item2=DUT_NM_relativeSens8000Hz_RFR_Median,1,0.6,0.3
item3=DUT_NM_relativeSens10000Hz_RFR_Median,1,0.6,0.3
item4=DUT_NM_Noise_Median,102,102.5,103.2
item5=DUT_Phase1kHz_RPR_Median,1,0.8,0.5
item6=DUT_Phase3kHz_RPR_Median,1.5,1,0.5
item7=DUT_Phase10kHz_RPR_Median,4,3,1.5

[P025]
item1=Sensitivity 1000 Settled_Median,0.3,0.2,0.1
item2=DUT Phase 1kHz_Median,1,0.8,0.5
item3=Dut Sens 3kHz_Median,0.3,0.2,0.1
item4=Dut Phase 3kHz_Median,1.5,1,0.5
item5=DUT Sens 8kHz_Median,1,0.6,0.3
itme6=DUT Sens 10kHz_Median,1,0.6,0.3
item7=Dut Phase 10kHz_Median,4,3,1.5
itme8=DUT_NM_Noise_Median,Median,1,102,102.68,103

Please help to point out where have a chance to modify it,I feel this code is not concise.





import PySimpleGUI as sg
import pandas as pd
import glob,os
from datetime import datetime
import numpy as np
import re
from decimal import Decimal
from pathlib import Path
import configparser


sg.theme('Topanga')

left_part = [
    [sg.Text('', size=(45, 0),font=("Helvetica",10),text_color='red',justification='center',auto_size_text=True,
             key='Data1')],
    *[[sg.InputText(size=(12,1),font=("Helvetica",8),background_color='white',justification='center',text_color='black',
                   pad=(2,2),key=f'partA{row}{col}') for col in range(7)] for row in range(5)],
    [sg.Text('', size=(45, 0), font=("Helvetica", 10), text_color='red', justification='center', auto_size_text=True,
             key='Data2')],
    *[[sg.InputText(size=(12,1),font=("Helvetica",8),background_color='white',justification='center',text_color='black',
                    pad=(2,2),key=f'partB{row}{col}') for col in range(7)] for row in range(5)],

]

right_part = [
    [sg.Text('', size=(45, 0), font=("Helvetica", 10), text_color='red', justification='center',auto_size_text=True,
             key='Data3')],
    *[[sg.InputText(size=(12,1),font=("Helvetica",8),background_color='white',justification='center',text_color='black',
                   pad=(2,2),key=f'partC{row}{col}') for col in range(7)] for row in range(5)],
    [sg.Text('', size=(40, 0), font=("Helvetica",10), text_color='red', justification='center',auto_size_text=True,
             visible = False,key='Data4')],
    *[[sg.InputText(size=(12,1),font=("Helvetica",8),background_color='white',justification='center',text_color='black',
                    pad=(2,2),visible = False,key=f'partD{row}{col}') for col in range(7)] for row in range(5)],
]

BNT = [
    [sg.Text("Tester"),
     sg.Combo(values=['CAMEMSNIOSAI11', 'CAMEMSNIOSAI21', 'CAMEMSNIOSAI31', 'CAMEMSNIOSAI41', 'CAMEMSNIOSAI51',
                      'CAMEMSNIOSAI61', 'CAMEMSNIOSAI71', 'CAMEMSNIOSAI81', 'CAMEMSNIOSAI91', 'CAMEMSNIOSAI101'],
              default_value='CAMEMSNIOSAI11', key='-Tester-'),
     sg.Text("Project"), sg.Combo(values=['P020','P027','P025','P033'], default_value='P020', key='-Model-')],

    [sg.Radio('FR Check', group_id="RadioDemo", default=True, size=(10, 1), k='-R1-'),
     sg.Radio('Phase Check', group_id="RadioDemo", default=False, size=(15, 1), k='-R2-')],

    [sg.Text('TestLot:'), sg.Text('', size=(20, 0), font=("Helvetica", 10), text_color='red',
                                               justification="left", key='-testlot-'), sg.Text('Testdate:'),
     sg.Text('', size=(20, 0), font=("Helvetica", 10),
             text_color='red', justification="left", key='-testdate-')],

    [sg.OK('Check Master', key='OK'), sg.Exit(size=(5, 0))]
]

layout = [
    [BNT,sg.Column(left_part,vertical_alignment='top'),sg.VSeparator(),sg.Column(right_part,vertical_alignment='top')],
]

window=sg.Window('Master Check',layout,font='Courier 12')

working_directory = os.getcwd()
IQR_path=r'C:\Users\Desktop\111'




def read_csv(csv_add,tester,checkmodel,fullname,project):

    part1_data,paint1,part2_data,paint2,part3_data,paint3,part4_data,paint4,\
    part5_data,paint5,part6_data,paint6,part7_data,paint7=([] for i in range(14))

    SETTINGS_PATH = Path.cwd()
    # create the settings object and use ini format
    settings = sg.UserSettings(path=SETTINGS_PATH, filename="checkmaster_config.ini",
                               use_config_file=True, convert_bools_and_none=True)

    sens_val=float(settings['Sens'][f'{fullname}'])

    file_path=os.path.join(SETTINGS_PATH,'checkmaster_config.ini')

    config = configparser.ConfigParser()  # 类实例化

    config.read(file_path)

    val = dict(config.items(project))

    resources = {}
    for line in val.values():
        key, value = line.rstrip().split(',', 1)
        resources[key] = value
    item_all=list(resources.keys())
    limit_all = list(resources.values())

    df=pd.read_csv(csv_add,header=2)
    df=df[df['Lot Code'].str.contains("golden")]
    df.columns = df.columns.str.split('.').str[0]
    lotnum=df['Lot Code'].tail(1).squeeze()
    testtime=df['Lot Finish Time'].tail(1).squeeze()
    try:
            part1_raw=df[item_all[0]].tail(1).squeeze()
            part2_raw=df[item_all[1]].tail(1).squeeze()
            part3_raw=df[item_all[2]].tail(1).squeeze()
            part4_raw=df[item_all[3]].tail(1).squeeze()
            part5_raw=df[item_all[4]].tail(1).squeeze()
            part6_raw=df[item_all[5]].tail(1).squeeze()
            part7_raw=df[item_all[6]].tail(1).squeeze()

            for part1 in part1_raw:
                if part1!=0:
                    tt= part1-sens_val
                    part1_data.append(Decimal(tt).quantize(Decimal("0.00")))
                    a, b, c =limit_all[0].split(',')
                    a=float(a)
                    b=float(b)
                    c=float(c)
                    paint1.append(compared_Sens(tt,a,b,c))
                else:
                    part1_data.insert(len(part1_data), np.nan)
                    paint1.insert(len(paint1), 'white')

            part2_data,paint2=assign_data(part2_raw,limit_all[1])
            part3_data,paint3=assign_data(part3_raw,limit_all[2])

            for part4 in part4_raw:
                if part4!=0:
                    a, b, c =limit_all[0].split(',')
                    a=float(a)
                    b=float(b)
                    c=float(c)
                    part4_data.append(Decimal(part4).quantize(Decimal("0.00")))
                    paint4.append(compared_Noise(part4,a,b,c))
                else:
                    part4_data.insert(len(part4_data), np.nan)
                    paint4.insert(len(paint4), 'white')

            part5_data,paint5=assign_data(part5_raw,limit_all[4])
            part6_data,paint6=assign_data(part6_raw,limit_all[5])
            part7_data,paint7=assign_data(part7_raw,limit_all[6])

            now = datetime.now()  # current date and time
            date_time = now.strftime("%m/%d/%Y-%H:%M:%S")
            ab=pd.Series([tester,date_time]).to_frame().T
            aa=pd.DataFrame(part1_data).T
            bb=pd.DataFrame(part2_data).T
            cc=pd.DataFrame(part3_data).T


            dd=pd.DataFrame(part5_data).T
            ee=pd.DataFrame(part6_data).T
            ff=pd.DataFrame(part7_data).T
            gg=pd.DataFrame(part4_data).T

            if checkmodel=='Sens':
                result= np.concatenate([ab,aa,bb,cc],axis=1)
                result=pd.DataFrame(result)
                result.to_csv(r'sens_log.csv',mode='a',index=False,header=False)
            else:
                result1= np.concatenate([ab,dd,ee,ff,gg],axis=1)
                result1=pd.DataFrame(result1)
                result1.to_csv(r'phase_log.csv',mode='a',index=False,header=False)
    except Exception as e:
         print(e)
         return None

    return part1_data,paint1,part2_data,paint2,part3_data,paint3,part4_data,paint4,\
           part5_data,paint5,part6_data,paint6,part7_data,paint7,lotnum,testtime


def assign_data(raw_data,limit):
    arr,paintcolor=([] for i in range(2))

    a, b, c = limit.split(',')
    a = float(a)
    b = float(b)
    c = float(c)

    for noise in raw_data:
        if noise != 0:
            arr.append(Decimal(noise).quantize(Decimal("0.00")))
            paintcolor.append(compared_Sens(noise,a,b,c))
        else:
            arr.insert(len(arr),np.nan)
            paintcolor.insert(len(paintcolor),'white')

    return arr,paintcolor


def compared_Sens(val,limit1,limit2,limit3):   # 0.3,0.2,0.1
    if np.abs(val)>limit1:
        text_color='Dark Red'
    elif np.abs(val)>limit2:
        text_color='Red'
    elif np.abs(val)>limit3:
        text_color = 'orange'
    elif pd.isnull(val):
        text_color='White'
    else:
        text_color='Green'
    return text_color


def compared_Noise(val,limit1,limit2,limit3):    #  103.2,102.5,102
    if np.abs(val)>limit1:
        text_color='green'
    elif np.abs(val)>limit2:
        text_color='orange'
    elif np.abs(val)>limit3:
        text_color = 'red'
    elif pd.isnull(val):
        text_color='White'
    else:
        text_color='dark red'
    return text_color


while True:

    event, value = window.read()
    if event in (sg.WIN_CLOSED, 'Exit'):
        break
    elif event == "OK":

      for row in range(5):
          for col in range(7):
              window[f'partA{row}{col}'].update('',background_color='white')
              window[f'partB{row}{col}'].update('',background_color='white')
              window[f'partC{row}{col}'].update('',background_color='white')
              window[f'partD{row}{col}'].update('',background_color='white')
              window.Element(f'partD{row}{col}').Update(visible=False)
      window.Element('Data4').Update(visible=False)
      window['Data1'].update('')
      window['Data2'].update('')
      window['Data3'].update('')
      window['Data4'].update('')

      window['-testlot-'].update('')
      window['-testdate-'].update('')

      Tester=value['-Tester-']
      project=value['-Model-']

      fullname=Tester+'_'+project

      IQR_files=os.path.join(IQR_path,project,'ENG\IQR\*_Statistic.csv')
      IQR_all=glob.glob(IQR_files)
      IQR_all.sort(key=lambda file_name:os.path.getmtime(file_name),reverse=True)
      if len(IQR_all)!=0:
          for file_IQR in IQR_all:
              FP = re.findall(Tester, file_IQR)
              FP = "".join(FP)
              if len(FP)!=0:
                  if FP == Tester:
                          # sample_path = file_IQR
                          if value['-R1-'] == True:
                               check_item = 'Sens'
                               x=read_csv(file_IQR,Tester,check_item,fullname,project)
                               if x is None:
                                    sg.popup("No GoldenSample data in file,Please re-selected it!!")
                                    break
                               else:
                                    window['Data1'].update('DUT_NM_Sens_Corr1000Hz_94SPL__Median')
                                    window['Data2'].update('DUT_NM_relativeSens8000Hz_RFR_Median')
                                    window['Data3'].update('DUT_NM_relativeSens10000Hz_RFR_Median')

                                    Sens1k,paint0,Sens8k,paint1,Sens10k,paint2,Noise,paint3,Phase1k,paint4,Phase3k,\
                                    paint5,Phase10k,paint6,lotnum,testtime=read_csv(file_IQR,Tester,check_item,fullname,project)

                                    window['-testlot-'].update(lotnum)
                                    window['-testdate-'].update(testtime)
                                    j=-1
                                    for row in range(5):
                                       for col in range(7):
                                          j=j+1
                                          window[f'partA{row}{col}'].update(f'Site{j+1}:{Sens1k[j]}',background_color=paint0[j])
                                          window[f'partB{row}{col}'].update(f'Site{j+1}:{Sens8k[j]}',background_color=paint1[j])
                                          window[f'partC{row}{col}'].update(f'Site{j+1}:{Sens10k[j]}',background_color=paint2[j])
                                    break
                          else:
                                  check_item = 'Phase'
                                  x = read_csv(file_IQR, Tester, check_item,fullname,project)
                                  if x is None:
                                        sg.popup("No GoldenSample data in file,Please re-selected it!!")
                                        break
                                  else:
                                        window.Element('Data4').Update(visible=True)
                                        window['Data1'].update('DUT_Phase1kHz_RPR_Median')
                                        window['Data2'].update('DUT_Phase3kHz_RPR_Median')
                                        window['Data3'].update('DUT_Phase10kHz_RPR_Median')
                                        window['Data4'].update('DUT_NM_Noise_Median')

                                        Sens1k, paint0, Sens8k, paint1, Sens10k, paint2, Noise, paint3, Phase1k, paint4, Phase3k, \
                                        paint5, Phase10k, paint6, lotnum, testtime = read_csv(file_IQR, Tester, check_item,fullname,project)

                                        window['-testlot-'].update(lotnum)
                                        window['-testdate-'].update(testtime)
                                        j = -1
                                        for row in range(5):
                                          for col in range(7):
                                              j = j + 1
                                              window.Element(f'partD{row}{col}').Update(visible=True)
                                              window[f'partA{row}{col}'].update(f'Site{j + 1}:{Phase1k[j]}', background_color=paint4[j])
                                              window[f'partB{row}{col}'].update(f'Site{j + 1}:{Phase3k[j]}', background_color=paint5[j])
                                              window[f'partC{row}{col}'].update(f'Site{j + 1}:{Phase10k[j]}', background_color=paint6[j])
                                              window[f'partD{row}{col}'].update(f'Site{j + 1}:{Noise[j]}', background_color=paint3[j])
                                        break
          else:
              sg.popup("Tester or Project selected wrong,Please selected properly!!")
              # break
      else:
          sg.popup("No Data!")



window.close()

Attached Files

Thumbnail(s)
   

.csv   CAMEMSNIOSAI61_Statistic.csv (Size: 225.32 KB / Downloads: 67)
.txt   checkmaster_config.txt (Size: 1.14 KB / Downloads: 74)
Reply


Messages In This Thread
PysimpleGUI window update dynamically - by SamLiu - Mar-27-2023, 01:59 PM
RE: PysimpleGUI window update dynamically - by SamLiu - Apr-05-2023, 02:32 PM

Possibly Related Threads…
Thread Author Replies Views Last Post
  Interaction between Matplotlib window, Python prompt and TKinter window NorbertMoussy 3 612 Mar-17-2024, 09:37 AM
Last Post: deanhystad
Photo PySimpleGUI FilesBrowse enable event to update value in combo SamLiu 2 4,699 Mar-15-2023, 12:49 PM
Last Post: SamLiu
  [Tkinter] Can't update label in new tk window, object has no attribute tompranks 3 3,618 Aug-30-2022, 08:44 AM
Last Post: tompranks
  PySimpleGUI Try Except jamesaarr 1 1,974 Nov-18-2021, 02:02 PM
Last Post: jamesaarr
Question closing a "nested" window with a button in PySimpleGUI and repeating this process Robby_PY 9 13,691 Jan-18-2021, 10:21 PM
Last Post: Serafim
  how to add elements in the other window? (pysimplegui) syafiq14 0 2,357 Jul-20-2020, 10:35 PM
Last Post: syafiq14
  Want to dynamically update numbers using tkinter in pygame script k0gane 0 2,099 Feb-09-2020, 09:01 AM
Last Post: k0gane
  tkinter window and turtle window error 1885 3 6,795 Nov-02-2019, 12:18 PM
Last Post: 1885
  [PyQt] how to dynamically add label to pyqt window Joongi 3 10,724 Sep-10-2019, 01:38 PM
Last Post: Denni
  Need help setting up a PySimpleGUI progress bar that I can maually update in script Soundtechscott 1 10,135 Jun-10-2019, 06:14 AM
Last Post: Soundtechscott

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020