Ejemplo n.º 1
0
    def get_command(self):
        self.item = Mode.get()
        while self.item is not None and self.item.get_machine_xml() is None:
            self.item = Mode.get()

        if self.item is None:
            if Config.end_text is not None or Config.end_background is not None:
                display_end()

                if Config.end_duration is not None:
                    if Config.record is not None:
                        Record.create_time_file()

            print("No more software for window", self.index)
            Display.print_machine_and_soft(None, self.position)
            return False
        else:
            if self.first_launch is True:
                Record.reset_log_time()

                if Config.title_text is not None or Config.title_background is not None:
                    display_title()

                    if Config.record is not None:
                        Display.record_title()

                    self.execute_start_command()

                    time.sleep(4.0)
                else:
                    self.execute_start_command()

                Display.print_machine_and_soft(self.item, self.position)

            else:
                Display.print_machine_and_soft(self.item, self.position)

            if Config.record is not None:
                Display.record_marquee()

            print("Next for window", self.index, ": ",
                  self.item.get_soft_description(), self.item.get_soft_info())
            return True
Ejemplo n.º 2
0
def test_Mode():

    #Arrange
    Array = [7, 2, 0, 2, 2]
    expected = 2

    #Act
    actual = Mode.Mode(Array)

    #Assert
    assert expected == actual
Ejemplo n.º 3
0
    def __init__(self, root, w=600, h=600):
        self.root = root

        # VTK setup
        Globals.ren = vtk.vtkRenderer()
        Globals.renWin = vtk.vtkRenderWindow()
        Globals.renWin.AddRenderer(Globals.ren)

        # setup main actor
        Globals.imagePipeline = ImagePipeline(Globals.ren)

        def SetReferenceSpacing():
            spacing = Globals.imagePipeline.GetSpacing()
            if spacing[2] > 0: Globals.referenceSize = min(spacing)
            else: Globals.referenceSize = min(spacing[0:2])

        SetReferenceSpacing()
        Globals.ren.AddActor(Globals.imagePipeline.actor)

        Globals.SetDefaultRenderProps()
        Globals.SetDefaultPreferences()
        Globals.crossHair = CrossHair.CrossHairWidget()
        # setup observer chain for main events
        Globals.objectSet = Region.RegionSet()
        self.imageObservers = [Globals.objectSet.UpdateFromGUI]

        self.InitializeGUI(w, h)

        # initialize the interactor
        iren = self.renderWidget.GetRenderWindow().GetInteractor()
        Globals.ren.SetBackground(.5, .5, .5)

        Globals.ren.ResetCamera()

        iren.Initialize()
        self.mode = Mode.Navigation()
        self.mode.Start()  # set the interactor style
        Globals.renWin.Render()
        iren.Start()

        # set the initial position of the pointer in the center
        bounds = Globals.imagePipeline.slicer.GetOutput().GetBounds()
        centerX = .5 * (bounds[0] + bounds[1])
        centerY = .5 * (bounds[2] + bounds[3])
        Globals.crossHair.SetPosition(centerX, centerY)
Ejemplo n.º 4
0
    def back():
        modeGUI.destroy()
        nonlocal modes
        nonlocal components
        nonlocal numberComponents
        nonlocal numberModes
        # Dict of 1's and 0's where 1 is component is used and
        # 0 is component not used
        compsInMode = {}
        for modeNumber in range(numberModes):
            for componentName in components:
                compsInMode[componentName] = modeCompChecks[modeNumber][
                    componentName].get()

            modes[varModeNames[modeNumber].get()] = Mode.Mode(
                varModeNames[modeNumber].get(), components, compsInMode)

        global first
        first = False
        components, modes, numberComponents, number = Components_GUI.comp(
            components, modes, numberComponents, numberModes)
Ejemplo n.º 5
0
    def ChangeMode(self):
        # destructor for previous mode
        self.mode.Finish()

        mode = self.radioVar.get()
        if mode == 0:
            self.mode = Mode.Navigation()
        elif mode == 1:
            self.mode = Mode.AddRegion(self)
        elif mode == 2:
            self.mode = Mode.Laplace(self)
        elif mode == 3:
            self.mode = Mode.ProfileInspector(self)
        elif mode == 4:
            self.mode = Mode.Highlight(self)
        else:
            self.mode = Mode.DeleteRegion(self)

        self.mode.Start()
Ejemplo n.º 6
0
def isq(signum, frame):
    global source_mode, video_path
    f = open("videopath.txt", "r")
    video_path = f.read()
    if os.path.isfile(video_path) == 0:
        video_path = 0
    else:
        source_mode = False

signal.signal(signal.SIGALRM, isq)



mode_pid = os.fork()
if mode_pid == 0:
    Mode.run()
    os._exit(0)
else:
    while True:
        childProcExitInfo = os.waitpid(mode_pid, os.WNOHANG)
        if childProcExitInfo[0] == mode_pid:
            break

is_running = False

def isr(signum, frame):
    global is_running
    if is_running == True:
        is_running = False
    else:
        is_running = True
Ejemplo n.º 7
0
def run(components, modes):
    location = "C:\\Users\...\\testFile2.csv"

    def cancel():
        fileGUI.destroy()
        Program_Terminated.terminate()
        sys.exit()

    first = True

    while (True):
        fileGUI = tk.Tk()

        varLocation = tk.StringVar()

        # \t is tab so \testFile -> \t estFile but \\testFile -> \testFile
        varLocation.set(location)

        # A GUI that doesn't change size or anything, this is so nice
        fileTitle = tk.Label(fileGUI, text="Input File Location")
        locationEntry = tk.Entry(fileGUI, textvariable=varLocation)
        errorTxt = "Could not find file at " + location
        locationError = tk.Label(fileGUI, text=errorTxt)

        fileGap = tk.Label(fileGUI, text="\t \t \t \t \t \t \t")

        fileContinue = tk.Button(fileGUI,
                                 text="CONTINUE",
                                 command=fileGUI.destroy)

        fileCancel = tk.Button(fileGUI, text="CANCEL", command=cancel)

        fileTitle.grid(row=0, column=0, columnspan=5, sticky=tk.W + tk.E)

        locationEntry.grid(row=1, column=0, columnspan=5, sticky=tk.W + tk.E)

        if (not first):
            locationError.grid(row=2,
                               column=0,
                               columnspan=5,
                               sticky=tk.W + tk.E)

        fileGap.grid(row=3, column=0, columnspan=5, sticky=tk.W + tk.E)

        fileContinue.grid(row=4, column=0, columnspan=5, sticky=tk.W + tk.E)

        fileCancel.grid(row=5, column=0, columnspan=5, sticky=tk.W + tk.E)

        fileGUI.mainloop()

        location = varLocation.get()

        if (os.path.exists(location)):
            break
        else:
            first = False

    input = pd.read_csv(location)
    # Spliting the Spreadsheet into two dataframes:
    # 1 for components, 1 for modes
    # Components Dataframe
    component = (input['Object'] == "Component")
    comps = input[component]
    # Only care about component name and power
    comps = comps[comps.columns[[1, 2]]]
    comps.rename(columns={'Power/Comp1': 'Power'}, inplace=True)
    # Modes Dataframe
    mode = (input['Object'] == "Mode")
    mods = input[mode]
    mods.rename(columns={"Power/Comp1": "Comp1"}, inplace=True)

    for i in range(len(comps)):
        components[comps['Name'].iloc[i]] = comps['Power'].iloc[i]

    def checkModes(componentsDict, modsDF, modeNumber):
        tfComponents = {}
        for componentName, compPower in components.items():
            tfComponents[componentName] = 0
        for i in range(len(components)):
            compHeading = "Comp" + str(i + 1)
            tfComponents[modsDF[compHeading].iloc[modeNumber]] = 1

        return tfComponents

    for i in range(len(mods)):
        tfComps = {}
        tfComps = checkModes(components, mods, i)
        key = mods['Name'].iloc[i]
        modes[key] = Mode.Mode(mods['Name'].iloc[i], components, tfComps)

        modes[key].assignRequirement(mods['Requirement'].iloc[i],
                                     mods['Rank'].iloc[i])

        #modes[mods['Name'].iloc[i]].inputRank(mods['Rank'].iloc[i])

        modes[key].inputRequirementConstraints(mods['Begin'].iloc[i],
                                               mods['BeginUnits'].iloc[i],
                                               mods['End'].iloc[i],
                                               mods['EndUnits'].iloc[i])

        modes[key].inputLightingConstraints(mods['Sunlight'].iloc[i],
                                            mods['Penumbra'].iloc[i],
                                            mods['Umbra'].iloc[i])

    return components, modes, len(comps), len(mods)
Ejemplo n.º 8
0
def main():
    global nogetlocale
    CommandMode = False
    for i in sys.argv:
        if i == '-nogui':
            CommandMode = True
        elif '-language=' in i:
            nogetlocale = True
            _Language = i[10:]
    if nogetlocale:
        if not os.path.isfile(os.getcwd() + os.sep + 'languages' + os.sep +
                              'Language-' + _Language + '.json'):
            if not os.path.exists('languages'):
                print(
                    "\033[1;31mLanguages folder does not exise!Creating!\033[0m"
                )
                os.mkdir('languages')
            languagewtire = Language.GetLanguageFile(_Language)
            if languagewtire == 0:
                pass
            elif languagewtire == 2:
                print(
                    '\033[1;31mThere may be something wrong with your network,we cannot get files on the server.Please try again.\033[0m'
                )
                sys.exit(0)
            elif languagewtire == 404:
                print('\033[1;31mThe translate for language: ' + _Language +
                      ' may not exise...Ignore -language option\033[0m')
                nogetlocale = False
        # 更改txt为json[20200130]
        _Language = os.getcwd() + os.sep + 'languages' + os.sep + \
            'Language-' + _Language + '.json'

    if not nogetlocale:
        global locale
        tmp = locale.getdefaultlocale()[0]
        del locale
        locale = tmp
        del tmp
        gc.collect()
        # 语言文件获取
        Config = os.getcwd() + os.sep + 'config.txt'
        # 判断文件是否存在
        try:
            f = open(Config, 'r', encoding='utf-8')
            f.close()
        except IOError:
            print("\033[1;31mConfig file does not exise!Creating!\033[0m")
            with open(Config, 'w+', encoding='utf-8') as file:
                file.write(
                    'Please make sure that /language/Language-[Language].json exist\nDefault Language is: en_US\nSuppose Locales: en_US,ja[ja_JP],zh_CN\nLanguage:%s'
                    % locale)
        Configfile = open(Config, 'r', encoding='utf-8')
        print('\033[1;32mConfig File: \033[1;33m' + Config + '\033[0m')
        for configfound in Configfile.readlines():
            key = "Language:"
            if key in configfound:
                s = re.findall('"TimeSpan":"([\d.]+)"', configfound)
            Configfile.close()
        Configfile = open(Config, 'r', encoding='utf-8')
        for configfound in Configfile.readlines():
            key = "Language:"
            if key in configfound:
                s = re.findall('"TimeSpan":"([\d.]+)"', configfound)
            Configfile.close()
        _Language = os.getcwd() + os.sep + 'languages' + os.sep + 'Language-' + \
            configfound.split(':')[1].replace(' ', '') + '.json'
        if not os.path.isfile(_Language):
            if not os.path.exists('languages'):
                print(
                    "\033[1;31mLanguages folder does not exise!Creating!\033[0m"
                )
                os.mkdir('languages')
            languagewtire = Language.GetLanguageFile(
                configfound.split(':')[1].replace(' ', ''))
            if languagewtire == 0:
                pass
            elif languagewtire == 2:
                print(
                    '\033[1;31mThere may be something wrong with your network,we cannot get files on the server.Please try again.\033[0m'
                )
                sys.exit(0)
            elif languagewtire == 404:
                print(
                    '\033[1;31mThe translate for language: ' + locale +
                    ' may not exise...The default language will be used\033[0m'
                )
                Language.GetLanguageFile('en_US')
                with open(Config, 'w+', encoding='utf-8') as file:
                    file.write(
                        'Please make sure that /language/Language-[Language].json exist\nDefault Language is: en_US\nSuppose Locales: en_US,ja[ja_JP],zh_CN\nLanguage:en_US'
                    )

        #@retrying.retry(stop_max_attempt_number=3)

    print('\033[1;32mUsing Language File: \033[1;33m' + _Language + '\033[0m')

    # 语言文件读取
    # 语言文件var设置[更换方式 [20201002]
    # 更改txt为json[20200130]
    with open(_Language, encoding='utf-8') as LanguageFile:
        LanguageText = json.loads(LanguageFile.read())
    Language.CheckVersion(
        _Language.split(os.sep)[-1].replace('Language-',
                                            '').replace('.json', ''),
        LanguageText['version'])

    import Mode
    if (Windows and not CommandMode) or (not Windows and not CommandMode):
        if Mode.WindowsMode(LanguageText) == 1:
            CommandMode = True
    if CommandMode:
        Mode.CommandMode(LanguageText)
Ejemplo n.º 9
0
 def test_value(self):
     self.assertAlmostEqual(mode.most_frequent([87.5, 88.5, 60.5, 90.5, 88.5]),88.5)
Ejemplo n.º 10
0
				FCFactors += [Modes[0].FrankCondons[n]* Modes[1].FrankCondons[m] * Modes[0].FrankCondons[p]]


	# use permutations in itertools
	# Each tuple in permutations is (for 3 modes) the tuple(n, m, o) 
	# such that Modes[0] is going to the nth state, Modes[1] is going
	# to the mth state, and Modes[2] is going to the oth state.
	permutations = [[0]*nModes]*range_ns

	print FCFactors
	
	#FCFactors = map(lambda x: helper(Modes, x), permutations)

	numpoints = range_ns ** (nModes)
	print
	print "Expected Numpoints", numpoints
	print "Actual numpoints", len(FCFactors)
	#intensities = map(lambda x: x**2, FCFactors)
	#return intensities

#def genMultiModeEnergies(E_el, Modes):


m1 = M.Mode(500, 450, 1)
m2 = M.Mode(300, 200, 0.1)
m3 = M.Mode(600, 500, 0.5)
Modes = [m1, m2, m3]
genMultiModeIntensities(Modes)


Ejemplo n.º 11
0
def saveMode(acl, player):
    global data
    Mode.modes[data["mode"].getEscapedName()]=data["mode"]
    Mode.saveModes(modename=data["mode"].getEscapedName())
    Armagetronad.PrintMessage("0x00ff00Saved mode")    
Ejemplo n.º 12
0
def genMultiModeEnergies(E_el, Modes, states):
    Eground = 0
    for mode in Modes:
        Eground += mode.groundEnergy

    energies = [E_el - Eground] * len(states)

    for i in range(len(states)):
        state = states[i]
        for j in range(len(state)):
            energies[i] += Modes[j].excitedEnergy(state[j])
    return energies


m1 = M.Mode(501, 499, 1)
m2 = M.Mode(500.1, 300, 0.1)
m3 = M.Mode(5000.01, 5000, 0.1)

# m1 = M.Mode(500, 450, 1)
# m2 = M.Mode(300, 200, 20)
# m3 = M.Mode(600, 500, 0.5)

Modes = [m1, m2, m3]
E_electronic = 0.005
[intensities, states] = genMultiModeIntensities(Modes)
energies = genMultiModeEnergies(E_electronic, Modes, states)

wide = [0.01] * 11
med = [0.005] * 11
skinny = [0.001] * 11
Ejemplo n.º 13
0
def mode(components, modes, numberComponents, numberModes):
    modeGUI = tk.Tk()

    if (len(modes) > 0):
        fakeModes = {}
        for mode, k in zip(modes.values(), range(len(modes))):
            fakeModes[k] = mode

    def back():
        modeGUI.destroy()
        nonlocal modes
        nonlocal components
        nonlocal numberComponents
        nonlocal numberModes
        # Dict of 1's and 0's where 1 is component is used and
        # 0 is component not used
        compsInMode = {}
        for modeNumber in range(numberModes):
            for componentName in components:
                compsInMode[componentName] = modeCompChecks[modeNumber][
                    componentName].get()

            modes[varModeNames[modeNumber].get()] = Mode.Mode(
                varModeNames[modeNumber].get(), components, compsInMode)

        global first
        first = False
        components, modes, numberComponents, number = Components_GUI.comp(
            components, modes, numberComponents, numberModes)

    # Making the title, column headings, and
    # ADD and CONTINUE which will always be in the GUI
    modeTitle = tk.Label(modeGUI, text="MODES")
    modeNameHead = tk.Label(modeGUI, text="Name")
    modeCompHead = tk.Label(modeGUI, text="Components Operating in Mode")
    modeGap = tk.Label(modeGUI, text="\t")

    modeContinue = tk.Button(modeGUI, text="CONTIUE", command=modeGUI.destroy)

    # modeBack will be fully implemented later
    modeBack = tk.Button(modeGUI, text="BACK", command=back)

    # The title and headings will always be in the same place sin the
    # GUI so I put them here to make later less cluttered
    modeTitle.grid(row=0, column=0, columnspan=3)
    modeNameHead.grid(row=1, column=1)
    modeCompHead.grid(row=1, column=2, columnspan=numberComponents)
    modeGap.grid(row=numberModes + 2, column=0)

    modeContinue.grid(row=numberModes + 3,
                      column=0,
                      columnspan=2 + numberComponents,
                      sticky=tk.W + tk.E)

    # The mode name ENTRY BOX array.
    # Same as 'compName' from components but for modes
    modeNameEntry = {}
    # Array of tkinter string variables of the mode name.
    # Same as 'varCompNames' from components
    varModeNames = {}
    # dict of tkinter checkboxes, one for each component in the satellite
    modeComps = {}
    # dict of tkinter integer variables for the checkboxes,
    # one for each component
    varModeCompChecks = {}
    # list of 'varModeCompChecks' used to keep track of which components
    # are in use for each mode
    modeCompChecks = {}
    # List of modeComps (list of lists of checkboxes) where ...
    # modeCompsRow[row/mode][component checkbox]
    modeCompsRow = {}
    for modeNumber in range(numberModes):
        # Makes the mode name input string and adds it to the list of
        # mode names
        varModeNames[modeNumber] = tk.StringVar()
        if (len(modes) == 0):
            varModeNames[modeNumber].set("Mode" + str(modeNumber + 1))
        else:
            varModeNames[modeNumber].set(fakeModes[modeNumber].name())

        # Makes a new "Mode " label and mode name input box and
        # adds them to the lists
        modeNameLabel = tk.Label(modeGUI, text="Mode " + str(modeNumber + 1))

        modeNameEntry[modeNumber] = tk.Entry(
            modeGUI, textvariable=varModeNames[modeNumber])

        # Clears the arrays specific to each row to make sure they
        # aren't running over one row to another
        varModeCompChecks = {}
        modeComps = {}

        # Makes input needed for checkboxes (different modes) and adds it
        # to a list and adds the actual checkboxes to a list of checkboxes
        if (len(modes) > 0):
            for modeIndex in fakeModes:
                # for key in dict:
                for componentName in components:
                    varModeCompCheck = tk.IntVar()
                    varModeCompCheck.set(0)
                    for compName in fakeModes[modeIndex].components():
                        if (compName == componentName):
                            varModeCompCheck.set(1)
                    varModeCompChecks[componentName] = (varModeCompCheck)

                    modeComps[componentName] = tk.Checkbutton(
                        modeGUI,
                        text=componentName,
                        variable=varModeCompChecks[componentName])

        else:
            for componentName, compPower in components.items():
                varModeCompCheck = tk.IntVar()
                varModeCompChecks[componentName] = (varModeCompCheck)

                modeComps[componentName] = tk.Checkbutton(
                    modeGUI,
                    text=componentName,
                    variable=varModeCompChecks[componentName])

        modeCompChecks[modeNumber] = varModeCompChecks
        modeCompsRow[modeNumber] = modeComps

        modeNameLabel.grid(row=modeNumber + 2, column=0)
        modeNameEntry[modeNumber].grid(row=modeNumber + 2, column=1)
        for componentName, compsColumn in zip(components,
                                              range(numberComponents)):
            modeCompsRow[modeNumber][componentName].grid(row=modeNumber + 2,
                                                         column=compsColumn +
                                                         2)

    modeGUI.mainloop()

    global first
    if (first):
        # Dict of 1's and 0's where 1 is component is used and
        # 0 is component not used
        compsInMode = {}
        sameModes = False
        if (len(modes) > 0):
            sameModes = True
            for modeNumber in range(numberModes):
                if (varModeNames[modeNumber].get() !=
                        fakeModes[modeNumber].name()):
                    modes = {}
                    sameModes = False
                    break
        if (sameModes):
            for componentName in components:
                compsInMode[componentName] = modeCompChecks[modeNumber][
                    componentName].get()

            modes[varModeNames[modeNumber].get()].changeComponents(
                components, compsInMode)
        else:
            for modeNumber in range(numberModes):
                for componentName in components:
                    compsInMode[componentName] = modeCompChecks[modeNumber][
                        componentName].get()

                modes[varModeNames[modeNumber].get()] = Mode.Mode(
                    varModeNames[modeNumber].get(), components, compsInMode)

        return ModeSwitching_GUI.switching(components, modes, numberComponents,
                                           numberModes)
    else:
        return components, modes, numberComponents, numberModes
Ejemplo n.º 14
0
                                               E_electronic)

    numpoints = range_ns**(len(Modes))
    print
    print "Expected Numpoints", numpoints
    print "Actual numpoints", len(Intensities)

    return (Energies, Intensities)


threshold = 10**-5

# m = M.Mode(501, 499, 1)
# Modes = [m]

m1 = M.Mode(500, 450, 1)
m2 = M.Mode(300, 200, 1)
m3 = M.Mode(600, 500, 1)
m4 = M.Mode(500, 450, 1)
m5 = M.Mode(100, 50, 1)
m6 = M.Mode(600, 250, 1)
m7 = M.Mode(500, 250, 0.5)
m8 = M.Mode(550, 250, 10)
m9 = M.Mode(550, 400, 10)
m10 = M.Mode(550, 450, 20)
m11 = M.Mode(560, 450, 2)

# m1 = M.Mode(501, 499, 1)
# m2 = M.Mode(500.1, 300, 0.1)
# m3 = M.Mode(5000.01, 5000, 0.1)
Ejemplo n.º 15
0
 def test_mode(self):
     self.assertEqual(mode.most_frequent([1,2,3,4,5,6,6,8,8,6,9]),6)
Ejemplo n.º 16
0
    z=Zone.Zone(name, (x,y), s, g, direction, color=color, type=t)
    z.settings=settings
    m.addZone(team, z)
print("-"*20 + " Respoints settings " + "-"*16)
for i in range(res_num):
    print("Settings for respoint",i+1)
    direction, pos, team=None, None, None
    while(None in [direction, pos, team]):
        try:
            if pos == None:
                x,y=input("Position [x|y]: ").split("|")
                pos=int(x), int(y)
                if len(pos)!=2:
                    raise ValueError()
            if direction == None:
                xdir, ydir=input("Initial drive direction [xdir|ydir]: ").split("|")
                direction=int(xdir), int(ydir)
                if len(direction)!=2:
                    raise ValueError()
            if team==None:
                team=input("Number of team for which the should be used [leave empty if for all teams]: ")
                if team.strip()=="":
                    team=-1
                team=int(team)-1
        except ValueError:
            print("Invalid value entered!")
            continue
        m.addRespoint(pos[0],pos[1],direction[0], direction[1], team)
Mode.modes[m.getEscapedName() ]=m
Mode.saveModes()
Ejemplo n.º 17
0
def start():
    global window

    window_position = WindowPosition()

    if Config.desktop is not None:
        desktop_info = [
            Config.desktop[0], Config.desktop[1], Config.desktop[2],
            Config.desktop[3]
        ]
    else:
        desktop_info = Desktop.get_desktop_size()

    position = window_position.get(Config.windows_quantity, 0, 0,
                                   desktop_info[2], desktop_info[3])

    Display.init(desktop_info)

    if Config.mode == "music" or Config.smart_sound_timeout_sec > 0:
        Sound.init()

    machine_list, soft_list = XmlGetter.get()

    if machine_list is not None:
        print("MAME version: ", machine_list.attrib["build"])
        print(len(machine_list), " unique machines")

    if soft_list is not None:
        print(len(soft_list), "software lists")

    Mode.init(machine_list, soft_list)

    desktop = DesktopClass()

    for index in range(Config.windows_quantity):
        window.append(
            Window.Window(desktop, index, desktop_info[0], desktop_info[1],
                          position[index]))

    global sound_index
    while Display.wait_for_keyboard() is False:
        if Config.smart_sound_timeout_sec > 0:
            if Sound.get_silence_duration_sec(
            ) > Config.smart_sound_timeout_sec:
                sound_index = sound_index - 1
                if sound_index == -1:
                    sound_index = Config.windows_quantity - 1

                for w in window:
                    w.set_sound_index(sound_index)

                Sound.reset()

        is_alive = False
        for w in window:
            if w.is_alive() is True:
                is_alive = True
                break

        if is_alive is False:
            break

    if Config.end_duration is not None:
        if Config.record is None:
            time.sleep(float(Config.end_duration))

    if Config.end_command is not None and window[0].get_start_command_launched(
    ) is True:
        print("Execute end command:", Config.end_command)
        os.system(Config.end_command)

    print("Shutdown remaining windows")
    shutdown()

    print("Stop sound recording thread")
    Sound.kill()

    print("Wait for remaining windows")
    for w in window:
        w.join()

    if Config.final_command is not None:
        print("Execute final command:", Config.final_command)
        os.system(Config.final_command)

    sys.exit(0)