Best Python code snippet using fMBT_python
menu.py
Source:menu.py  
...497            menudraw(scr, y+i, x+1+w-maxbinding, '  ' + mainbinding, bindattr)498        menudraw(scr, y+i, x+2+w, titlenote, attr)499        menudraw(scr, y+i, x+3+w, ls, colors.color_menu)500        vd.onMouse(scr, y+i, x, 1, w+3,501                BUTTON1_PRESSED=lambda y,x,key,p=sheet.activeMenuItems[:level]+[j]: sheet.pressMenu(*p),502                BUTTON2_PRESSED=vd.nop,503                BUTTON3_PRESSED=vd.nop,504                BUTTON1_RELEASED=vd.nop,505                BUTTON2_RELEASED=vd.nop,506                BUTTON3_RELEASED=vd.nop)507        i += 1508@VisiData.api509def nop(vd, *args, **kwargs):510    return False511@BaseSheet.property512@drawcache513def menus(sheet):514    'List of hierarchical menu items for commands available on this sheet.'515    def _menus(sheet, item):516        if item.longname:517            cmd = sheet.getCommand(item.longname)518            if cmd:519                item.cmd = cmd520                if vd.commands[item.longname].get('TableSheet', None):521                    item.obj = 'TableSheet'522                elif vd.commands[item.longname].get('BaseSheet', None):523                    item.obj = 'BaseSheet'524                else:525                    item.obj = ''526                return item527        elif item.menus:528            menus = _menu_list(sheet, item.menus)529            if menus:530                title = getattr(item, 'title', '')531                return AttrDict(title=title, menus=menus, longname='')532        else:533            return item534    def _menu_list(sheet, menus):535        ret = []536        for i in menus:537            m = _menus(sheet, i)538            if m:539                ret.append(m)540        return ret541    return _menu_list(sheet, vd.menus)542@VisiData.api543def drawMenu(vd, scr, sheet):544    h, w = scr.getmaxyx()545    scr.addstr(0, 0, ' '*(w-1), colors.color_menu)546    disp_menu_boxchars = sheet.options.disp_menu_boxchars547    x = 1548    ymax = 4549    toplevel = sheet.menus550    for i, item in enumerate(toplevel):551        if sheet.activeMenuItems and i == sheet.activeMenuItems[0]:552            attr = colors.color_menu_active553            vd.drawSubmenu(scr, sheet, 1, x, item.menus, 1, disp_menu_boxchars)554        else:555            attr = colors.color_menu556        menudraw(scr, 0, x, ' ', attr)557        for j, ch in enumerate(item.title):558            menudraw(scr, 0, x+j+1, ch, attr | (curses.A_UNDERLINE if ch.isupper() else 0))559        menudraw(scr, 0, x+j+2, ' ', attr)560        vd.onMouse(scr, 0, x, 1, len(item.title)+2,561                BUTTON1_PRESSED=lambda y,x,key,i=i,sheet=sheet: sheet.pressMenu(i),562                BUTTON2_PRESSED=vd.nop,563                BUTTON3_PRESSED=vd.nop,564                BUTTON1_RELEASED=vd.nop,565                BUTTON2_RELEASED=vd.nop,566                BUTTON3_RELEASED=vd.nop)567        x += len(item.title)+2568    rightdisp = sheet.options.disp_menu_fmt.format(sheet=sheet, vd=vd)569    menudraw(scr, 0, x+4, rightdisp, colors.color_menu)570    if not sheet.activeMenuItems:571        return572    currentItem = getMenuItem(sheet)573    cmd = currentItem.cmd574    if not cmd:575        return576    # helpbox577    sidelines = []578    if 'push(' in cmd.execstr:579        sidelines += [vd.options.disp_menu_push + ' pushes sheet']580    if 'input' in cmd.execstr:581        sidelines += [vd.options.disp_menu_input + ' needs input']582    helpattr = colors.color_menu_help583    helpx = 30584    helpw = min(w-helpx-4, 76)585    ls,rs,ts,bs,tl,tr,bl,br,lsr,rsl = disp_menu_boxchars586    helplines = textwrap.wrap(cmd.helpstr or '(no help available)', width=helpw-4)587    # place helpbox just below deepest menu588    menuh = 2+sum(sheet.activeMenuItems[1:-1])589    menuh += len(getMenuItem(sheet, sheet.activeMenuItems[:-1]).menus)590    menuy = 16 # min(menuh, h-len(helplines)-3)591    y = menuy592    menudraw(scr, y, helpx, tl+ts*(helpw-2)+tr, helpattr) # top line593    y += 1594    # cmd.helpstr text595    for i, line in enumerate(helplines):596        menudraw(scr, y+i, helpx, ls+' '+line+' '*(helpw-len(line)-3)+rs, helpattr)597    y += len(helplines)598    if sidelines:599        menudraw(scr, y, helpx, ls+' '*(helpw-2)+rs, helpattr)600        for i, line in enumerate(sidelines):601            menudraw(scr, y+i+1, helpx, ls+'    '+line+' '*(helpw-len(line)-6)+rs, helpattr)602        y += len(sidelines)+1603    menudraw(scr, y, helpx, bl+bs*(helpw-2)+br, helpattr)604    mainbinding = sheet.revbinds.get(cmd.longname, [None])[0]605    if mainbinding:606        menudraw(scr, menuy, helpx+2, rsl, helpattr)607        ks = vd.prettykeys(mainbinding or '(unbound)')608        menudraw(scr, menuy, helpx+3, ' '+ks+' ', colors.color_menu_active)609        menudraw(scr, menuy, helpx+2+len(ks)+3, lsr, helpattr)610    menudraw(scr, menuy, helpx+19, ' '+cmd.longname+' ', helpattr)611@BaseSheet.api612def pressMenu(sheet, *args):613    '''Navigate to given menupath in *args* and activate menu if not already activated. Return True if pressing current item.614    Example: sheet.pressMenu("Help", "Version")615    '''616    ret = False617    p = _intMenuPath(sheet, args)618    if p == sheet.activeMenuItems:  # clicking on current menu item619        if getMenuItem(sheet, p).longname:620            ret = True621        else:622            p += [0]623    sheet.activeMenuItems = p624    if not vd.menuRunning:625        vd.runMenu()626    return ret627@BaseSheet.api628def checkMenu(sheet):629    sheet.activeMenuItems[0] %= len(sheet.menus)630@VisiData.api631def runMenu(vd):632    'Activate menu, with sheet.activeMenuItems containing the navigated menu path.  Does not return until menu is deactivated.'633    old_disp_menu = vd.options.disp_menu634    vd.options.disp_menu=True635    vd.menuRunning = True636    sheet = vd.activeSheet637    vd.setWindows(vd.scrFull)638    try:639      while True:640        if len(sheet.activeMenuItems) < 2:641            sheet.activeMenuItems.append(0)642        vd.draw_all()643        k = vd.getkeystroke(vd.scrMenu, sheet)644        currentItem = getMenuItem(sheet)645        if k in ['^C', '^Q', '^[', 'q']:646            return647        elif k in ['KEY_MOUSE']:648            keystroke, y, x, winname, winscr = vd.parseMouse(menu=vd.scrMenu, top=vd.winTop, bot=vd.winBottom)649            if winname != 'menu':  # clicking off the menu is an escape650                return651            f = vd.getMouse(winscr, x, y, keystroke)652            if f:653                if f(y, x, keystroke):654                    break655            else:656                return657        elif k in ['KEY_RIGHT', 'l']:658            if currentItem.menus and sheet.activeMenuItems[1] != 0:  # not first item659                sheet.activeMenuItems.append(0)660            else:661                sheet.activeMenuItems = [sheet.activeMenuItems[0]+1, 0]662        elif k in ['KEY_LEFT', 'h']:663            if len(sheet.activeMenuItems) > 2:664                sheet.activeMenuItems.pop(-1)665            else:666                sheet.activeMenuItems = [sheet.activeMenuItems[0]-1, 0]667        elif k in ['KEY_DOWN', 'j']:668            sheet.activeMenuItems[-1] += 1669        elif k in ['KEY_UP', 'k']:670            sheet.activeMenuItems[-1] -= 1671        elif k in [ENTER, ' ', '^J', '^M']:672            if currentItem.menus:673                sheet.activeMenuItems.append(0)674            else:675                break676        sheet.checkMenu()677    finally:678        vd.menuRunning = False679        sheet.activeMenuItems = []680        vd.options.disp_menu=old_disp_menu681    vd.draw_all()682    sheet.execCommand(currentItem.longname)683BaseSheet.addCommand('^[f', 'menu-file', 'pressMenu("File")', '')684BaseSheet.addCommand('^[e', 'menu-edit', 'pressMenu("Edit")', '')685BaseSheet.addCommand('^[v', 'menu-view', 'pressMenu("View")', '')686BaseSheet.addCommand('^[c', 'menu-column', 'pressMenu("Column")', '')687BaseSheet.addCommand('^[r', 'menu-row', 'pressMenu("Row")', '')688BaseSheet.addCommand('^[d', 'menu-data', 'pressMenu("Data")', '')689BaseSheet.addCommand('^[p', 'menu-plot', 'pressMenu("Plot")', '')690BaseSheet.addCommand('^[s', 'menu-system', 'pressMenu("System")', '')691BaseSheet.addCommand('^[h', 'menu-help', 'pressMenu("Help")', '')692BaseSheet.bindkey('^H', 'menu-help')693BaseSheet.bindkey('KEY_BACKSPACE', 'menu-help')...V3.py
Source:V3.py  
1import pygame, pickle, sys, time, random, math, logging2from _thread import *3stop_threads=True#The global variable that tells the threads to stop4pygame.display.init()5pygame.font.init()6redAmber=pygame.image.load("./Assets/TL A R.png")7red=pygame.image.load("./Assets/TL R.png")8amber=pygame.image.load("./Assets/TL A.png")9green=pygame.image.load("./Assets/TL G.png")10road=pygame.image.load("./Assets/road.png")11binny=pygame.image.load("./Assets/bin.png")12tJunct=pygame.image.load("./Assets/Junction T.png")13fourJunct=pygame.image.load("./Assets/Junction +.png")14splitJunct=pygame.image.load("./Assets/Junction Split.png")15rotateImg=pygame.image.load("./Assets/Rotate.png")16edit=pygame.image.load("./Assets/Edit Tool.png")17timey=pygame.image.load("./Assets/Time.png")18WIDTH=120019HEIGHT=80020BACKGROUND=pygame.Color("#EAEAEA")21BLUE=pygame.Color("#00A896")     22OFFBLUE=pygame.Color("#88CCCC")23ORANGE=pygame.Color("#89043D")24LB=pygame.Color("#2FE6DE")25BLACK=pygame.Color("#000000")26win = pygame.display.set_mode((WIDTH, HEIGHT))27class Object(object):28    def __init__(self, x, y, width, height, typ):29        self.typ=typ30        self.x=x31        self.y=y32        self.width=int(width)33        self.height=int(height)34        self.conn=[]35        self.rotation=36036        if self.typ==redAmber:37            self.i="TL"38        elif self.typ==road:39            self.i="RD"40        elif self.typ==tJunct:41            self.i="TJ"42        elif self.typ==fourJunct:43            self.i="4J"44        elif self.typ==splitJunct:45            self.i="SJ"46        elif self.typ==timey:47            self.i="TM"48        elif self.typ==rotateImg:49            self.i="RO"50        elif self.typ==edit:51            self.i="ET"52    def move(self, xMid, yMid, win):53        self.x=xMid-(self.width/2)54        self.y=yMid-(self.height/2)55        self.conn=[]56    def checkWithin(self, x, y):57        if self.x<x and (self.x+self.width)>x:58            if self.y<y and (self.y+self.height)>y:59                return True60        return False61    def checkInside(self, x1, y1, x2, y2):62        tempX=self.x+(self.width/2)63        tempY=self.y+(self.height/2)64        if tempX>x1 and tempX<x2:65            if tempY>y1 and tempY<y2:66                return True67        return False68    69    def getXY(self):70        listy=(self.x, self.y, self.width, self.height, self.typ)71        return listy72    def draw(self, win):73        win.blit(self.typ, (int(self.x), int(self.y)))74    def addConnection(self, conn):75        self.conn.append(conn)76    77    def popConnections(self):78        temp=self.conn79        self.conn=[]80        return temp81    def pygameSux(self):82        listy=(self.x, self.y, self.i, self.conn, self.rotation)83        return listy84        85class TrafficLight(Object):86    def __init__(self, x, y, timeOn, timeOff, connections):87        Object.__init__(self, x, y, "20", "20", redAmber)88        self.x=x89        self.y=y90        self.timeOn=timeOn91        self.timeOff=timeOff92        self.connections=connections93    def setTimes(self, timeOne, timeTwo):94        self.timeOn=timeOne95        self.timeOff=timeTwo96class Road(Object):#REMINDER TO ADD ORIENTATION TO STUFF97    def __init__(self, x, y, length, con1, con2):98        Object.__init__(self, x, y, "60", "20", road)99        self.x=x100        self.y=y101        self.length=length102        self.con1=con1103        self.con2=con2104class FourJunction(Object):105    def __init__(self, x, y, conn1, conn2, conn3, conn4):106        Object.__init__(self, x, y, "60", "60", fourJunct)107        self.x=x108        self.y=y109        self.conn1=conn1110        self.conn2=conn2111        self.conn3=conn3112        self.conn4=conn4113class TJunction(Object):114    def __init__(self, x, y, conn1, conn2, conn3):115        Object.__init__(self, x, y, "60", "60", tJunct)116        self.x=x117        self.y=y118        self.conn1=conn1119        self.conn2=conn2120        self.conn3=conn3121class Split(Object):122    def __init__(self, x, y, rd1, split1, split2):123        Object.__init__(self, x, y, "60", "60", splitJunct)124        self.x=x125        self.y=y126        self.rd1=rd1127        self.split1=split1128        self.split2=split2129class Edit(Object):130    def __init__(self, x, y):131        Object.__init__(self, x, y, "20", "20", edit)132        self.x=x133        self.y=y134class Time(Object):135    def __init__(self, x, y):136        Object.__init__(self, x, y, "20", "20", timey)137        self.x=x138        self.y=y139    def move(self, x, y, win):140        pass141class Rotate(Object):142    def __init__(self, x, y):143        Object.__init__(self, x, y, "20", "20", rotateImg)144        self.x=x145        self.y=y146def assemble(bigList):147    print(bigList)148    149def timeMenu():150    print("TimeMenu")151def saveBoard(win, l, num):152    listy=[]153    length=len(l)154    for x in range (length, 0, -1):155        o=l[x-1]156        if o.checkInside(0, 600, 200, 800):157            l.remove(o)158    for i in l:159        temp=i.pygameSux()160        listy.append(temp)161    if num==0:162        with open('saveOne.pickle', 'wb') as handle:163            pickle.dump(listy, handle, protocol=pickle.HIGHEST_PROTOCOL)164    else:165        with open('saveTwo.pickle', 'wb') as handle:166            pickle.dump(listy, handle, protocol=pickle.HIGHEST_PROTOCOL)167    168def loadBoard(win, num):169    if num==0:170        with open('saveOne.pickle', 'rb') as handle:171            temp = pickle.load(handle)172    else:173        with open('saveTwo.pickle', 'rb') as handle:174            temp = pickle.load(handle)175    print(temp)176    listy=[]177    listy=assemble(temp)178    return listy179def MRS(win):180    print("MRS Running")181    win.fill(BACKGROUND)182    drawText(win, "Design Saved To File 1", 600, 300, 60, BLUE)183    pygame.display.flip()184    for x in range(4):185        for event in pygame.event.get():186            if event.type==pygame.QUIT:#Quit187                stop_threads=False188                print("Goodbye!")189                pygame.quit()190                sys.exit()191        time.sleep(0.5)192        193    win.fill(BACKGROUND)194    195    drawText(win, "Return To Menu", 60, 20, 20, BLUE)196    pygame.draw.rect(win,BLUE, (0, 10, 120, 20), 2)197    198    pygame.display.flip()199    200    while True:201        for event in pygame.event.get():202            if event.type==pygame.QUIT:#Quit203                stop_threads=False204                print("Goodbye!")205                pygame.quit()206                sys.exit()207                208            if event.type==pygame.MOUSEBUTTONDOWN:209                pos=pygame.mouse.get_pos()210                print(pos)211                if pos[0]>0 and pos[0]<160:#Return To Menu212                    if pos[1]>10 and pos[1]<30:213                        print("Returning To Main Menu")214                        mainMenu(win)215                        break216                217def GUI(win):218    print("GUI Running")219    win.fill(BACKGROUND)220    drawText(win, "Design Saved To File 1", 600, 300, 60, BLUE)221    pygame.display.flip()222    for x in range(4):223        for event in pygame.event.get():224            if event.type==pygame.QUIT:#Quit225                stop_threads=False226                print("Goodbye!")227                pygame.quit()228                sys.exit()229        time.sleep(0.5)230        231    win.fill(BACKGROUND)232    233    drawText(win, "Return To Menu", 60, 20, 20, BLUE)234    pygame.draw.rect(win,BLUE, (0, 10, 120, 20), 2)235    236    pygame.display.flip()237    238    while True:239        for event in pygame.event.get():240            if event.type==pygame.QUIT:#Quit241                stop_threads=False242                print("Goodbye!")243                pygame.quit()244                sys.exit()245                246            if event.type==pygame.MOUSEBUTTONDOWN:247                pos=pygame.mouse.get_pos()248                print(pos)249                if pos[0]>0 and pos[0]<160:#Return To Menu250                    if pos[1]>10 and pos[1]<30:251                        print("Returning To Main Menu")252                        mainMenu(win)253                        break254                    255def drawText(win, text, x, y, size, colour):256    try:257        font = pygame.font.SysFont("Comic Sans", size)258        toBlit = font.render(text, 1, colour, False)259        win.blit(toBlit, ( int( x-(toBlit.get_width()/2) ) , int( y-(toBlit.get_height()/2)) ))260    except:261        logging.warning('Font Error, Saw It Coming Ngl')262def normalMenu(win, l):263    pygame.draw.rect(win,BLUE, (0, 600, 100, 100), 2)264    drawText(win, "Lights", 50, 620, 30, BLUE)265    pygame.draw.rect(win,BLUE, (100, 600, 100, 100), 2)266    drawText(win, "Roads", 150, 620, 30, BLUE)267    pygame.draw.rect(win,BLUE, (100, 700, 100, 100), 2)268    drawText(win, "Junctions", 50, 720, 30, BLUE)269    pygame.draw.rect(win,BLUE, (0, 700, 100, 100), 2)270    drawText(win, "Other", 150, 720, 30, BLUE)271    firstQuart=0272    secondQuart=0273    274    for i in l:275        c=i.getXY()276        if c[4]==redAmber:277            if c[0]>0 and c[0]<100:278                if c[1]>600 and c[1]<700:279                    firstQuart=1280        elif c[4]==road:281            if c[0]>100 and c[0]<200:282                if c[1]>600 and c[1]<700:283                    secondQuart=1284    if firstQuart==0:285        l.append(TrafficLight(40, 645, None, None, 0))286    elif secondQuart==0:287        l.append(Road(120, 645, None, None, None))288    return l289def junctionMenu(win, l):290    pygame.draw.rect(win,BLUE, (0, 600, 100, 100), 2)291    drawText(win, "New Junction", 50, 620, 21, BLUE)292    pygame.draw.rect(win,BLUE, (100, 600, 100, 100), 2)293    drawText(win, "4-Way", 150, 620, 30, BLUE)294    pygame.draw.rect(win,BLUE, (100, 700, 100, 100), 2)295    drawText(win, "Lane Split", 50, 720, 26, BLUE)296    pygame.draw.rect(win,BLUE, (0, 700, 100, 100), 2)297    drawText(win, "Back", 150, 720, 30, BLUE)298    firstQuart=0299    secondQuart=0300    thirdQuart=0301    for i in l:302        c=i.getXY()303        if c[4]==tJunct:304            if c[0]>0 and c[0]<100:305                if c[1]>600 and c[1]<700:306                    firstQuart=1307        elif c[4]==fourJunct:308            if c[0]>100 and c[0]<200:309                if c[1]>600 and c[1]<700:310                    secondQuart=1311        elif c[4]==splitJunct:312            if c[0]>0 and c[0]<100:313                if c[1]>700 and c[1]<800:314                    thirdQuart=1315    if firstQuart==0:316        l.append(TJunction(20, 635, None, None, None))317    elif secondQuart==0:318        l.append(FourJunction(120, 635, None, None, None, None))319    elif thirdQuart==0:320        l.append(Split(20, 735, None, None, None))321    return l322def otherMenu(win, l):323    pygame.draw.rect(win,BLUE, (0, 600, 100, 100), 2)324    drawText(win, "Edit", 50, 620, 30, BLUE)325    pygame.draw.rect(win,BLUE, (100, 600, 100, 100), 2)326    drawText(win, "Time", 150, 620, 30, BLUE)327    pygame.draw.rect(win,BLUE, (100, 700, 100, 100), 2)328    drawText(win, "Rotate", 50, 720, 20, BLUE)329    pygame.draw.rect(win,BLUE, (0, 700, 100, 100), 2)330    drawText(win, "Back", 150, 720, 30, BLUE)331    firstQuart=0332    secondQuart=0333    thirdQuart=0334    for i in l:335        c=i.getXY()336        if c[4]==edit:337            if c[0]>0 and c[0]<100:338                if c[1]>600 and c[1]<700:339                    firstQuart=1340        elif c[4]==timey:341            if c[0]>100 and c[0]<200:342                if c[1]>600 and c[1]<700:343                    secondQuart=1344        elif c[4]==rotateImg:345            if c[0]>0 and c[0]<100:346                if c[1]>700 and c[1]<800:347                    thirdQuart=1348    if firstQuart==0:349        l.append(Edit(40, 645))350    elif secondQuart==0:351        l.append(Time(140, 645))352    elif thirdQuart==0:353        l.append(Rotate(40, 745))354    return l355    356def drawAll(win, listy, m):357    win.fill(BACKGROUND)358    win.blit(binny, (200, 740))359    if m==0:360        listy=normalMenu(win, listy)361    if m==1:362        listy=junctionMenu(win, listy)363    if m==2:364        listy=otherMenu(win, listy)365    try:366        for i in listy:367            i.draw(win)368    except:369        pass370    return listy371def rotate(win, obj, deg):372    temp=obj.popConnections()373    typ=obj.getXY()374    obj.typ=pygame.transform.rotate(typ[4], deg)375    obj.conn=temp376    obj.width, obj.height=obj.height, obj.width377    obj.rotation+=deg378    if obj.rotation==450:379        obj.rotation=90380       381def main(win):382    print("Design Phase Started")383    pygame.display.set_caption('Design Phase')384    clock=pygame.time.Clock()385    386    itemList=[]387    l=TrafficLight(40, 645, None, None, 0)388    itemList.append(Road(120, 645, None, None, None))389    #itemList.append(Road(120, 645, None, None, None))390    itemList.append(l)391    clock.tick(540)392    menu=0393    last=False394    lastMenu=False395    saveImport=0396    #rotate(win, itemList[0], 90)397    #rotate(win, itemList[1], 90)398    while True:399        press=False400        pressMenu=False401        saveCheck=False402        itemList=drawAll(win, itemList, menu)403        x, y = pygame.mouse.get_pos()404        if x>0 and x<120:405            if y>10 and y<30:406                pygame.draw.rect(win, OFFBLUE, (0, 10, 120, 20))407        if x>1050 and x<1190:408            if y>680 and y<715:409                pygame.draw.rect(win, OFFBLUE, (1050, 680, 140, 35))410            elif y>740 and y<775:411                pygame.draw.rect(win, OFFBLUE, (1050, 740, 140, 35))412        if y>0 and y<30:413            if x>1000 and x<1100:414                pygame.draw.rect(win,OFFBLUE, (1000, 0, 100, 30))415            if x>1100 and x<1200:416                pygame.draw.rect(win,OFFBLUE, (1100, 0, 100, 30))417        drawText(win, "Return To Menu", 60, 20, 20, BLUE)418        pygame.draw.rect(win,BLUE, (0, 10, 120, 20), 2)419        drawText(win, "Run MRS", 1120, 760, 40, BLUE)420        pygame.draw.rect(win,BLUE, (1050, 740, 140, 35), 2)421        drawText(win, "Run GUI", 1120, 700, 40, BLUE)422        pygame.draw.rect(win,BLUE, (1050, 680, 140, 35), 2)423        if saveImport==0:424            pygame.draw.rect(win,BLUE, (1000, 0, 100, 30), 2)425            drawText(win, "Save", 1050, 15, 30, BLUE)426            pygame.draw.rect(win,BLUE, (1100, 0, 100, 30), 2)427            drawText(win, "Import", 1150, 15, 30, BLUE)428        elif saveImport==1:429            pygame.draw.rect(win,BLUE, (1000, 0, 100, 30), 2)430            drawText(win, "File 1", 1050, 15, 30, BLUE)431            pygame.draw.rect(win,BLUE, (1100, 0, 100, 30), 2)432            drawText(win, "File 2", 1150, 15, 30, BLUE)433        elif saveImport==2:434            pygame.draw.rect(win,BLUE, (1000, 0, 100, 30), 2)435            drawText(win, "File 1", 1050, 15, 30, BLUE)436            pygame.draw.rect(win,BLUE, (1100, 0, 100, 30), 2)437            drawText(win, "File 2", 1150, 15, 30, BLUE)438        if pygame.mouse.get_pressed()[0]:439                try:440                    posX, posY=event.pos441                    442                    if last:443                        l.move(posX, posY, win)444                        press=True445                        446                    else:447                        if posX>0 and posX<160:#Return To Menu448                            if posY>10 and posY<30:449                                print("Returning To Main Menu")450                                mainMenu(win)451                                break452                            453                        elif posX>1050 and posX<1190:#Run GUI or MRS454                            if posY>740 and posY<770:455                                MRS(win)456                                break457                            458                            elif posY>680 and posY<710:459                                GUI(win)460                                break461                        462                        if posX>130 and posX<150:463                            if posY>635 and posY<655:464                                for i in itemList:465                                    temp=i.pygameSux()466                                    spareList.append(temp)467                                print(spareList)468                                with open('spareSave.pickle', 'wb') as handle:469                                    pickle.dump(spareList, handle, protocol=pickle.HIGHEST_PROTOCOL)470                                timeMenu()471                        if posY>0 and posY<30:472                            if posX>1000 and posX<1100:473                                if not lastSave:474                                    if saveImport==1:475                                        saveBoard(win, itemList, 0)476                                        saveImport=0477                                    elif saveImport==2:478                                        itemList=loadBoard(win, 0)479                                        saveImport=0480                                    elif saveImport==0:481                                        saveImport=1482                                saveCheck=True483                            elif posX>1100 and posX<1200:484                                if not lastSave:485                                    if saveImport==0:486                                        saveImport=2487                                    elif saveImport==1:488                                        saveBoard(win, itemList, 1)489                                        saveImport=0490                                    elif saveImport==2:491                                        itemList=loadBoard(win, 1)492                                        saveImport=0493                                saveCheck=True494                        for i in itemList:495                            if i.checkWithin(posX, posY):496                                i.move(posX, posY, win)497                                l=i498                                press=True499                                break500                            501                        if not press:502                            if menu==0:503                                if posY>700 and posY<800:504                                    if posX>0 and posX<100:505                                        if not lastMenu:506                                            menu=1507                                            press=True508                                            length=len(itemList)509                                            for x in range (length, 0, -1):510                                                o=itemList[x-1]511                                                if o.checkInside(0, 600, 200, 800):512                                                    itemList.remove(o)513                                            514                                        pressMenu=True515                                        516                                    elif posX>100 and posX<200:517                                        if not lastMenu:518                                            menu=2519                                            length=len(itemList)520                                            for x in range (length, 0, -1):521                                                o=itemList[x-1]522                                                if o.checkInside(0, 600, 200, 800):523                                                    itemList.remove(o)524                                        pressMenu=True525                                        526                            elif menu==1:527                                if posX>100 and posX<200:528                                    if posY>700 and posY<800:529                                        if not lastMenu:530                                            menu=0531                                            length=len(itemList)532                                            for x in range (length, 0, -1):533                                                o=itemList[x-1]534                                                if o.checkInside(0, 600, 200, 800):535                                                    itemList.remove(o)536                                        pressMenu=True537                                        538                            elif menu==2:539                                if posX>100 and posX<200:540                                    if posY>700 and posY<800:541                                        if not lastMenu:542                                            menu=0543                                            length=len(itemList)544                                            for x in range (length, 0, -1):545                                                o=itemList[x-1]546                                                if o.checkInside(0, 600, 200, 800):547                                                    itemList.remove(o)548                                        pressMenu=True549                                    550                except:551                    logging.warning("Event.pos Error, SAW IT COMING NGL")552        if last==True and press==False:553            for i in itemList:554                one=l.getXY()555                two=i.getXY()556                if i.checkInside(200, 740, 240, 800):557                    itemList.remove(i)558                elif two[4]==edit:559                    for x in itemList:560                        if not x==i:561                            if x.checkWithin(two[0]-(two[2]/2), two[1]-(two[3]/2)):562                                print("!")563                    itemList.remove(i)564                elif two[4]==rotateImg:565                    itemList.remove(i)566                elif l!=i:567                    if i.rotation%180==0 and l.rotation%180==0:568                        temp=one[0]+one[2]569                        y1=one[1]+(one[3]/2)570                        y2=two[1]+(two[3]/2)571                        if (temp+10)>two[0] and (temp-10)<two[0]:572                            if (y1+10)>y2 and (y1-10)<y2:573                                l.move(two[0]-(one[2]/2), y2, win)574                                575                        temp=two[0]+two[2]576                        if (temp+10)>one[0] and (temp-10)<one[0]:577                            if (y1+10)>y2 and (y1-10)<y2:578                                l.move(two[0]+two[2]+(one[2]/2), y2, win)579                    if not i.rotation%180==0 and not l.rotation%180==0:580                        temp=one[1]+one[3]581                        x1=one[0]+(one[2]/2)582                        x2=two[0]+(two[2]/2)583                        if (temp+10)>two[1] and (temp-10)<two[1]:584                            if (x1+10)>x2 and (x1-10)<x2:585                                l.move(x2, two[1]-(one[3]/2), win)586                                587                        temp=two[1]+two[3]588                        if (temp+10)>one[1] and (temp-10)<one[1]:589                            if (x1+10)>x2 and (x1-10)<x2:590                                l.move(x2, two[1]+two[3]+(one[3]/2), win)591                    592                        593        for event in pygame.event.get():594            if event.type==pygame.QUIT:#Quit595                stop_threads=False596                logging.critical("Goodbye!")597                pygame.quit()598                sys.exit()      599        600        if press:601            last=True602        else:603            last=False604        if pressMenu:605            lastMenu=True606        else:607            lastMenu=False608        if saveCheck:609            lastSave=True610        else:611            lastSave=False612            613        pygame.display.flip()614        615    mainMenu(win)616def threaded_title(win, WIDTH, HEIGHT):617    global stop_threads618    while stop_threads:619        if stop_threads:620            win.fill(BACKGROUND)            621            drawText(win, "Traffic Light Optimiser", int(WIDTH/2), int(-200+HEIGHT/2), 60, BLUE)622            drawText(win, "Click To Start", int(WIDTH/2), int(-100+HEIGHT/2), 50, BLUE)623            pygame.display.flip() 624        else:625            break626        time.sleep(0.5)627        if stop_threads:628            win.fill(BACKGROUND)            629            drawText(win, "Traffic Light Optimiser", int(WIDTH/2), int(-200+HEIGHT/2), 60, BLUE)            630            pygame.display.flip()631        else:632            break633        time.sleep(0.5)634    print("Thread Ended")635    return636def mainMenu(win):637    global stop_threads  638    print("Running Main Menu")639    pygame.display.set_caption("Reinforcement Learning Traffic Lights")   640    stop_threads=True  641    run = True  642    clock = pygame.time.Clock()  643    start_new_thread(threaded_title, (win, WIDTH, HEIGHT))644    print("Thread Started")   645    while run:646        clock.tick(30)     647        for event in pygame.event.get():648            if event.type==pygame.QUIT:#Quit649                stop_threads=False650                logging.critical("Goodbye!")651                pygame.quit()652                sys.exit()653            if event.type==pygame.MOUSEBUTTONDOWN:654                run = False655                stop_threads=False656    main(win)657while True:658    mainMenu(win)...main.py
Source:main.py  
...59        self.label_information.text = self.information_bus60        print(self.information_bus)61        busapp.mapscreen.addBusMarker(bus_taken)6263    def pressMenu(self, *args):64        busapp.screenmanager.current = "Menu principal"6566    def pressMap(self, *args):67        busapp.screenmanager.current = "Menu map"6869    def pressBus(self, *args):70        busapp.screenmanager.current = "Menu bus"717273# Une classe permettant l'affichage d'un écran74# qui affichera la carte avec lequelle des interaction seront possible75class MapScreen(Screen):7677    def __init__(self, **kwargs):78        super(MapScreen, self).__init__(**kwargs)79        self.fl = FloatLayout()80        with self.fl.canvas:81            Color(1, 1, 1, .8, mode='rgba')82            Rectangle(size=Window.size)8384        self.mapview = MapView(zoom=13, lat=48.35, lon=-1.2, pos_hint={"top":0.9}, size_hint=(1, .7))85        self.arret_list = []86        self.bus_onMap = None87        self.arret_onMap = None88        self.button_menu = Button(height=40, width=40, size_hint=(None, None), pos=(20, 0), pos_hint={'top': 0.97})89        self.button_menu.bind(on_press=lambda x: self.get_coo())90        self.button_tr_info = Button(size_hint=(1 / 3, .1), pos=(0, 0), pos_hint={'top': 0.1}, text="Menu")91        self.button_tr_info.bind(on_press=self.pressMenu)92        self.button_tr_map = Button(size_hint=(1 / 3, .1), pos=(Window.size[0] / 3, 0), pos_hint={'top': 0.1}, text="Map")93        self.button_tr_map.bind(on_press=self.pressMap)94        self.button_tr_bus = Button(size_hint=(1 / 3, .1), pos=(Window.size[0] / 1.5, 0), pos_hint={'top': 0.1}, text="Bus")95        self.button_tr_bus.bind(on_press=self.pressBus)96        self.fl.add_widget(self.button_menu)97        self.fl.add_widget(self.button_tr_info)98        self.fl.add_widget(self.button_tr_map)99        self.fl.add_widget(self.button_tr_bus)100101        self.fl.add_widget(self.mapview)102        self.add_widget(self.fl)103104    def pressMenu(self, *args):105        busapp.screenmanager.current = "Menu principal"106107    def pressMap(self, *args):108        busapp.screenmanager.current = "Menu map"109110    def pressBus(self, *args):111        busapp.screenmanager.current = "Menu bus"112113    def addBusMarker(self, bus_taken):114        info = data_bus[bus_taken]115        if self.bus_onMap == True:116            self.mapview.remove_marker(self.bus_marker)117            self.removeArretMarker()118        else:119            self.bus_onMap = True120        self.bus_marker = MapMarkerPopup(lat=info["latitude"], lon=info["longitude"], source="bus_marker2.png", size=(20, 20))121122        self.bus_marker.add_widget(Label(pos=(0,-40), text=bus_taken, color=(0,0,0,1)))123        self.mapview.add_marker(self.bus_marker)124125        self.mapview.get_latlon_at(Window.size[0]/2, Window.size[1]/2, zoom=None)126        self.addArretMarker("Ligne-"+info["ligne"])127128    def addArretMarker(self, ligne):129        for arret in data_stop[ligne]:130            print(arret)131            arret_marker = MapMarkerPopup(lat=data_stop[ligne][arret]["latitude"], lon=data_stop[ligne][arret]["longitude"],132                                          source="bus_stop.png")133            arret_marker.add_widget(Label(pos=(0, -40), text=data_stop[ligne][arret]["name"], color=(0, 0, 0, 1)))134            self.arret_list.append(arret_marker)135            self.mapview.add_marker(arret_marker)136137    def removeArretMarker(self):138        for arret in self.arret_list:139            self.mapview.remove_marker(arret)140        self.arret_list.clear()141142    def get_coo(self):143        print(self.arret_list)144        print(str(self.mapview.get_latlon_at(Window.size[0] / 2, Window.size[1] / 2, zoom=None)))145146147# Une classe permettant l'affichage d'un écran148# qui permettra à l'utilisateur de selectionné un bus149# pour lequel il veut connaitre les information150class BusScreen(Screen):151    def __init__(self, **kwargs):152        super(BusScreen, self).__init__(**kwargs)153        self.fl = FloatLayout()154        with self.fl.canvas:155            Color(1, 1, 1, .8, mode='rgba')156            Rectangle(size=Window.size)157        self.button_menu = Button(height=40, width=40, size_hint=(None, None), pos=(20, 0), pos_hint={'top': 0.97})158        self.button_tr_info = Button(size_hint=(1 / 3, .1), pos=(0, 0), pos_hint={'top': 0.1}, text="Menu")159        self.button_tr_info.bind(on_press=self.pressMenu)160        self.button_tr_map = Button(size_hint=(1 / 3, .1), pos=(Window.size[0] / 3, 0), pos_hint={'top': 0.1}, text="Map")161        self.button_tr_map.bind(on_press=self.pressMap)162        self.button_tr_bus = Button(size_hint=(1 / 3, .1), pos=(Window.size[0] / 1.5, 0), pos_hint={'top': 0.1}, text="Bus")163        self.button_tr_bus.bind(on_press=self.pressBus)164        self.button_bus1 = Button(size_hint=(.3, .1), pos=(20, 0), pos_hint={'top': 0.85}, text="Bus-1")165        self.button_bus1.bind(on_press=lambda x:busapp.mainscreen.bus_choice("Bus-1"))166        self.button_bus2 = Button(size_hint=(.3, .1), pos=(20, 0), pos_hint={'top': 0.75}, text="Bus-2")167        self.button_bus2.bind(on_press=lambda x:busapp.mainscreen.bus_choice("Bus-2"))168        self.fl.add_widget(self.button_menu)169        self.fl.add_widget(self.button_tr_info)170        self.fl.add_widget(self.button_tr_map)171        self.fl.add_widget(self.button_tr_bus)172        self.fl.add_widget(self.button_bus1)173        self.fl.add_widget(self.button_bus2)174175        self.add_widget(self.fl)176177    def pressMenu(self, *args):178        busapp.screenmanager.current = "Menu principal"179180    def pressMap(self, *args):181        busapp.screenmanager.current = "Menu map"182183    def pressBus(self, *args):184        busapp.screenmanager.current = "Menu bus"185186187# classe principale permettant de lancer l'application et de gerer chaque un des écran188class MyApp(App):189    def build(self):190        self.screenmanager = ScreenManager()191        self.screenmanager.transition = NoTransition()
...drawer.js
Source:drawer.js  
1// SPDX-FileCopyrightText: 2021-2022 The Manyverse Authors2//3// SPDX-License-Identifier: CC0-1.04const wd = require('wd');5const RECOVERY = require('./utils/recovery');6module.exports = function (driver, t) {7  t.test('Drawer has some menu items', async function (t) {8    await driver.sleep(2000);9    // Open drawer10    const pressMenu = new wd.TouchAction(driver);11    pressMenu.press({x: 80, y: 150});12    pressMenu.release();13    await driver.performTouchAction(pressMenu);14    t.pass('I press the Menu (top left corner)');15    t.ok(16      await driver.elementByAndroidUIAutomator(17        'new UiSelector().descriptionContains("My Profile")',18      ),19      'I see "My profile"',20    );21    t.ok(22      await driver.elementByAndroidUIAutomator(23        'new UiSelector().descriptionContains("Show Raw Database")',24      ),25      'I see "Raw database"',26    );27    t.ok(28      await driver.elementByAndroidUIAutomator(29        'new UiSelector().descriptionContains("Send Bug Report as Email")',30      ),31      'I see "Email bug report"',32    );33    t.ok(34      await driver.elementByAndroidUIAutomator(35        'new UiSelector().descriptionContains("Go To Settings")',36      ),37      'I see "Settings"',38    );39    t.end();40  });41  t.test("Drawer shows user's id", async function (t) {42    const partOfId = RECOVERY.id.substr(0, 10);43    t.ok(44      await driver.waitForElementByAndroidUIAutomator(45        'new UiSelector().textContains("' + partOfId + '")',46        6000,47      ),48      'I see my user id on the drawer',49    );50    t.end();51  });52  t.test('Drawer can be hidden by sliding', async function (t) {53    await driver.sleep(2000);54    // Open drawer55    const pressMenu = new wd.TouchAction(driver);56    pressMenu.press({x: 80, y: 150});57    pressMenu.wait(20);58    pressMenu.release();59    await driver.performTouchAction(pressMenu);60    t.pass('I open the drawer');61    // Slide drawer out of view62    const slideToLeft = new wd.TouchAction(driver);63    slideToLeft.press({x: 300, y: 500});64    slideToLeft.wait(60);65    slideToLeft.moveTo({x: 50, y: 500});66    slideToLeft.release();67    await driver.performTouchAction(slideToLeft);68    t.pass('I slide the drawer out of view');69    await driver.sleep(1000);70    t.ok(71      await driver.waitForElementByAndroidUIAutomator(72        'new UiSelector().text("Public posts")',73        6000,74      ),75      'I see the Central screen and the Public tab',76    );77    t.end();78  });79  t.test('Drawer has a link to the Settings screen', async function (t) {80    await driver.sleep(2000);81    // Open drawer82    const pressMenu = new wd.TouchAction(driver);83    pressMenu.press({x: 80, y: 150});84    pressMenu.release();85    await driver.performTouchAction(pressMenu);86    t.pass('I open the drawer');87    const aboutButton = await driver.elementByAndroidUIAutomator(88      'new UiSelector().descriptionContains("Go To Settings")',89    );90    await aboutButton.click();91    t.pass('I tap the Settings button');92    t.end();93  });...Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
