示例#1
0
class Toplevel1:

    #Ab hier fängt die eigentliche GUI Logik an!

    nodeURL = 'https://wasp.servebeer.com:14267'  #'https://nodes.thetangle.org:443'
    targetAddress = ''
    fleetAddress = ''
    entered = False
    enteredEnemy = False
    targetRow = ''
    targetCol = ''
    shipCount = 5
    initialTime = ''
    incomingTime = []
    session = 1
    hitResponse = ''
    hitRow = ''
    hitCol = ''

    #Enter und Exit checken, ob die Maus im Enemy Fleet Frame ist. Ansonsten wird auch der Mouseclick im OurFleet Frame übernommen.

    def timer(self):
        now = datetime.datetime.now()
        dt_string = now.strftime("%d-%m-%Y,%H:%M:%S")
        return dt_string

    def enterOwn(self, event):
        self.entered = True

    def exitOwn(self, event):
        self.entered = False

    def enterEnemy(self, event):
        self.enteredEnemy = True

    def exitEnemy(self, event):
        self.enteredEnemy = False

    def updateLog(self, logEntry):
        self.Log.configure(state='normal')
        self.Log.insert(tk.INSERT, logEntry)
        self.Log.configure(state='disabled')
        self.Log.see("end")

    def checkStatus(self):
        today = datetime.datetime.now()
        todayCheck = today.strftime("%d-%m-%Y")
        initialTime = self.initialTime
        logEntry = 'Checking for incoming missiles...\n'
        self.updateLog(logEntry)
        txCommand = {
            "command": "findTransactions",
            "addresses": [self.fleetAddress]
        }
        findTx = json.dumps(txCommand)
        headers = {
            'content-type': 'application/json',
            'X-IOTA-API-Version': '1'
        }
        try:
            requestFindTx = requests.post(url=self.nodeURL,
                                          data=findTx,
                                          headers=headers)
            jsonDataTx = json.loads(requestFindTx.text)
            tryteCommand = {
                "command": "getTrytes",
                "hashes": jsonDataTx['hashes']
            }
        except:
            messagebox.showinfo("Error", "The address is invalid!")
        findTrytes = json.dumps(tryteCommand)
        requestTrytes = requests.post(url=self.nodeURL,
                                      data=findTrytes,
                                      headers=headers)
        jsonDataTrytes = json.loads(requestTrytes.content)
        for item in jsonDataTrytes['trytes']:
            tryteString = TryteString(item).decode(errors='ignore',
                                                   strip_padding=False)
            head = tryteString.split(';')
            content = head[0].split(',')
            for data in content:
                if data == todayCheck:
                    if datetime.datetime.strptime(
                            content[3],
                            '%H:%M:%S') >= datetime.datetime.strptime(
                                initialTime, '%H:%M:%S'):
                        self.incomingTime.append(content[3])
                        if len(self.incomingTime) > 1:
                            if len(set(self.incomingTime)) == self.session:
                                if datetime.datetime.strptime(
                                        content[3], '%H:%M:%S'
                                ) == datetime.datetime.strptime(
                                        max(set(self.incomingTime)),
                                        '%H:%M:%S'):
                                    self.session += 1
                                    self.displayIncoming(
                                        content[0], content[1])
                                    self.displayHitResponse(
                                        content[4], content[5], content[6])
                                    break
                        else:
                            self.session += 1
                            self.displayIncoming(content[0], content[1])

    def displayIncoming(self, row, col):
        if self.fleetDict[row][col] == 'S':
            mark = 'X'
            logEntry = 'An enemy projectile has struck your ship at ' + row + col + '!\n'
            self.updateLog(logEntry)
            self.setOwnFleetDict(row, col, mark)
            self.setHitDict(row, col, mark)
        else:
            mark = 'o'
            logEntry = 'An enemy projectile has dropped into the ocean at ' + row + col + '.\n'
            self.updateLog(logEntry)
            self.setOwnFleetDict(row, col, mark)
            self.setHitDict(row, col, mark)

    def displayHitResponse(self, row, col, mark):
        print(row + col + mark)
        if mark == 'X':
            logEntry = 'Your projectile fired at ' + row + col + ' has hit an enemy ship! \n'
            self.updateLog(logEntry)
            self.setEnemyFleetDict(row, col, mark)
        elif mark == 'o':
            logEntry = 'Your projectile has dropped into the ocean at ' + row + col + '.\n'
            self.updateLog(logEntry)
            self.setEnemyFleetDict(row, col, mark)
        else:
            return

    def saveConnectionSettings(self):
        if len(self.targetAddressEntry.get()) > 0:
            self.targetAddress = self.targetAddressEntry.get()
        if len(self.addressEntry.get()) > 0:
            self.fleetAddress = self.addressEntry.get()
        if len(self.nodeURLEntry.get()) > 0:
            self.nodeURL = self.nodeURLEntry.get()

    def click(self, event):
        try:
            row = str(int(self.table.get_row_clicked(event) + 1))
            colNum = int(self.table.get_col_clicked(event))
            col = ''
            if colNum == 0:
                col = 'A'
            elif colNum == 1:
                col = 'B'
            elif colNum == 2:
                col = 'C'
            elif colNum == 3:
                col = 'D'
            elif colNum == 4:
                col = 'E'
            if self.entered:
                self.fleetClick(row, col)
            elif self.enteredEnemy:
                self.lockTarget(row, col)
        except:
            print("Click not in main window")

    def fleetClick(self, row, col):
        while self.shipCount > 0:
            self.shipCount -= 1
            mark = 'S'
            logEntry = 'You have placed a ship at ' + row + col + '. ' + str(
                self.shipCount) + ' ships remain.\n'
            self.updateLog(logEntry)
            self.setOwnFleetDict(row, col, mark)
            return
        else:
            logEntry = 'You have no ships left to place.\n'
            self.updateLog(logEntry)
            return

    def setOwnFleetDict(self, row, col, mark):
        self.fleetDict[row][col] = mark
        self.iniFleet()

    def setEnemyFleetDict(self, row, col, mark):
        self.enemyFleetDict[row][col] = mark
        self.iniEnemyFleet()

    def setHitDict(self, row, col, mark):
        self.hitDict[row][col] = 'O'
        self.hitRow = row
        self.hitCol = col
        self.hitResponse = mark

    def lockTarget(self, row, col):
        self.ACoordinates.configure(state='normal')
        self.ACoordinates.delete("0", "end")
        self.ACoordinates.insert(tk.INSERT, row)
        self.NCoordinates.configure(state='normal')
        self.NCoordinates.delete("0", "end")
        self.NCoordinates.insert(tk.INSERT, col)
        self.targetRow = row
        self.targetCol = col

    def fire(self):
        row = self.targetRow
        col = str(self.targetCol)
        self.prepareShot(row, col)

    def prepareShot(self, row, col):
        try:
            #seed =  self.seed
            targetAddress = self.targetAddress
            api = Iota(self.nodeURL)
            closing = ';'
            fireTime = self.timer()
            hitRow = self.hitRow
            hitCol = self.hitCol
            hitResponse = self.hitResponse
            content = str(row + "," + col + "," + fireTime + "," + hitRow +
                          "," + hitCol + "," + hitResponse + closing)
            print(content)
            self.sendTransaction(targetAddress, content, api, row, col)
        except Exception as e:
            print("Error preparing TX")
            logEntry = str(e) + ' Transaction could not be created.\n'
            self.updateLog(logEntry)

    def sendTransaction(self, targetAddress, content, api, row, col):
        try:
            transaction = ProposedTransaction(
                address=Address(targetAddress),
                message=TryteString.from_unicode(content),
                tag=Tag(b'NODE9TEST'),
                value=0,
            )
            api.send_transfer([transaction])
            self.shotFired(row, col)
        except Exception as e:
            print("Error sending TX")
            print(e)
            logEntry = str(e) + ' Transaction could not be created.\n'
            self.updateLog(logEntry)

    def shotFired(self, row, col):
        mark = 'O'
        logEntry = 'You fired at ' + row + col + '!\n'
        self.updateLog(logEntry)
        self.setEnemyFleetDict(row, col, mark)

    tkFont = ["Arial", 18]
    fleetDict = {
        '1': {
            'A': '',
            'B': '',
            'C': '',
            'D': '',
            'E': '',
        },
        '2': {
            'A': '',
            'B': '',
            'C': '',
            'D': '',
            'E': '',
        },
        '3': {
            'A': '',
            'B': '',
            'C': '',
            'D': '',
            'E': '',
        },
        '4': {
            'A': '',
            'B': '',
            'C': '',
            'D': '',
            'E': '',
        },
        '5': {
            'A': '',
            'B': '',
            'C': '',
            'D': '',
            'E': '',
        }
    }

    enemyFleetDict = {
        '1': {
            'A': '',
            'B': '',
            'C': '',
            'D': '',
            'E': '',
        },
        '2': {
            'A': '',
            'B': '',
            'C': '',
            'D': '',
            'E': '',
        },
        '3': {
            'A': '',
            'B': '',
            'C': '',
            'D': '',
            'E': '',
        },
        '4': {
            'A': '',
            'B': '',
            'C': '',
            'D': '',
            'E': '',
        },
        '5': {
            'A': '',
            'B': '',
            'C': '',
            'D': '',
            'E': '',
        }
    }

    hitDict = {
        '1': {
            'A': '',
            'B': '',
            'C': '',
            'D': '',
            'E': '',
        },
        '2': {
            'A': '',
            'B': '',
            'C': '',
            'D': '',
            'E': '',
        },
        '3': {
            'A': '',
            'B': '',
            'C': '',
            'D': '',
            'E': '',
        },
        '4': {
            'A': '',
            'B': '',
            'C': '',
            'D': '',
            'E': '',
        },
        '5': {
            'A': '',
            'B': '',
            'C': '',
            'D': '',
            'E': '',
        }
    }

    def iniFleet(self):
        self.model = TableModel()
        self.table = TableCanvas(self.Fleet,
                                 model=self.model,
                                 cellwidth=105,
                                 cellbackgr='white',
                                 thefont=self.tkFont,
                                 rowheight=105,
                                 editable=True,
                                 rowselectedcolor="white",
                                 reverseorder=1,
                                 align='center')
        self.model.importDict(self.fleetDict)
        self.table.createTableFrame()
        self.table.autoResizeColumns()
        self.table.redrawTable

    def iniEnemyFleet(self):
        self.model = TableModel()
        self.table = TableCanvas(self.EnemyFleet,
                                 model=self.model,
                                 cellwidth=106,
                                 cellbackgr='white',
                                 thefont=self.tkFont,
                                 rowheight=106,
                                 editable=True,
                                 rowselectedcolor="white",
                                 reverseorder=1,
                                 align='center')
        self.model.importDict(self.enemyFleetDict)
        self.table.createTableFrame()
        self.table.autoResizeColumns()
        self.table.redrawTable

    def drawFleetTable(self):
        self.model = TableModel()
        self.table = TableCanvas(self.Fleet,
                                 model=self.model,
                                 cellwidth=50,
                                 cellbackgr='white',
                                 thefont=self.tkFont,
                                 rowheight=16,
                                 editable=True,
                                 rowselectedcolor='white',
                                 reverseorder=1)
        self.table.createTableFrame()
        self.table.model.columnNames = ['A', 'B', 'C', 'D', 'E']
        self.table.redrawTable
        self.iniFleet()

    def drawEnemyFleetTable(self):
        self.model = TableModel()
        self.table = TableCanvas(self.EnemyFleet,
                                 model=self.model,
                                 cellwidth=50,
                                 cellbackgr='white',
                                 thefont=self.tkFont,
                                 rowheight=16,
                                 editable=True,
                                 rowselectedcolor='white',
                                 reverseorder=1)
        self.table.createTableFrame()
        self.table.model.columnNames = ['A', 'B', 'C', 'D', 'E']
        self.table.redrawTable
        self.iniEnemyFleet()

    def __init__(self, top=None):
        '''This class configures and populates the toplevel window.
           top is the toplevel containing window.'''
        _bgcolor = '#d9d9d9'  # X11 color: 'gray85'
        _fgcolor = '#000000'  # X11 color: 'black'
        _compcolor = '#d9d9d9'  # X11 color: 'gray85'
        _ana1color = '#d9d9d9'  # X11 color: 'gray85'
        _ana2color = '#ececec'  # Closest X11 color: 'gray92'
        self.style = ttk.Style()
        if sys.platform == "win32":
            self.style.theme_use('winnative')
        self.style.configure('.', background=_bgcolor)
        self.style.configure('.', foreground=_fgcolor)
        self.style.configure('.', font="TkDefaultFont")
        self.style.map('.',
                       background=[('selected', _compcolor),
                                   ('active', _ana2color)])

        top.geometry("1342x872+287+110")
        top.minsize(120, 1)
        top.maxsize(5764, 1061)
        top.resizable(1, 1)
        top.title("BattleShip v0.9")
        top.configure(background="#d9d9d9")
        top.configure(highlightbackground="#404040")
        top.configure(highlightcolor="black")
        top.bind('<ButtonRelease-1>', self.click)

        self.style.configure('TNotebook.Tab', background=_bgcolor)
        self.style.configure('TNotebook.Tab', foreground=_fgcolor)
        self.style.map('TNotebook.Tab',
                       background=[('selected', _compcolor),
                                   ('active', _ana2color)])
        self.TNotebook1 = ttk.Notebook(top)
        self.TNotebook1.place(relx=-0.001,
                              rely=0.0,
                              relheight=0.982,
                              relwidth=0.995)
        self.TNotebook1.configure(takefocus="")
        self.TNotebook1_t1 = tk.Frame(self.TNotebook1)
        self.TNotebook1.add(self.TNotebook1_t1, padding=3)
        self.TNotebook1.tab(
            0,
            text="Bridge",
            compound="left",
            underline="-1",
        )
        self.TNotebook1_t1.configure(background="#d9d9d9")
        self.TNotebook1_t1.configure(highlightbackground="#150f4a")
        self.TNotebook1_t1.configure(highlightcolor="black")
        self.TNotebook1_t2 = tk.Frame(self.TNotebook1)
        self.TNotebook1.add(self.TNotebook1_t2, padding=3)
        self.TNotebook1.tab(
            1,
            text="Options",
            compound="left",
            underline="-1",
        )
        self.TNotebook1_t2.configure(background="#d9d9d9")
        self.TNotebook1_t2.configure(highlightbackground="#d9d9d9")
        self.TNotebook1_t2.configure(highlightcolor="black")

        self.Fleet = tk.LabelFrame(self.TNotebook1_t1)
        self.Fleet.place(relx=0.038,
                         rely=0.012,
                         relheight=0.723,
                         relwidth=0.451)
        self.Fleet.configure(relief='groove')
        self.Fleet.configure(foreground="black")
        self.Fleet.configure(text='''Our Fleet''')
        self.Fleet.configure(background="#d9d9d9")
        self.Fleet.configure(highlightbackground="#d9d9d9")
        self.Fleet.configure(highlightcolor="black")
        self.Fleet.bind('<Enter>', self.enterOwn)
        self.Fleet.bind('<Leave>', self.exitOwn)
        self.drawFleetTable()

        self.EnemyFleet = tk.LabelFrame(self.TNotebook1_t1)
        self.EnemyFleet.place(relx=0.518,
                              rely=0.012,
                              relheight=0.723,
                              relwidth=0.452)
        self.EnemyFleet.configure(relief='groove')
        self.EnemyFleet.configure(foreground="black")
        self.EnemyFleet.configure(text='''Enemy Fleet''')
        self.EnemyFleet.configure(background="#d9d9d9")
        self.EnemyFleet.configure(highlightbackground="#d9d9d9")
        self.EnemyFleet.configure(highlightcolor="black")
        self.EnemyFleet.bind('<Enter>', self.enterEnemy)
        self.EnemyFleet.bind('<Leave>', self.exitEnemy)
        self.drawEnemyFleetTable()

        self.Labelframe3 = tk.LabelFrame(self.TNotebook1_t1)
        self.Labelframe3.place(relx=0.038,
                               rely=0.747,
                               relheight=0.235,
                               relwidth=0.451)
        self.Labelframe3.configure(relief='groove')
        self.Labelframe3.configure(foreground="black")
        self.Labelframe3.configure(text='''Log''')
        self.Labelframe3.configure(background="#d9d9d9")
        self.Labelframe3.configure(highlightbackground="#d9d9d9")
        self.Labelframe3.configure(highlightcolor="black")

        self.Log = ScrolledText(self.Labelframe3)
        self.Log.place(relx=0.017,
                       rely=0.103,
                       relheight=0.846,
                       relwidth=0.975,
                       bordermode='ignore')
        self.Log.configure(background="white")
        self.Log.configure(state="disabled")
        self.Log.configure(font="TkTextFont")
        self.Log.configure(foreground="black")
        self.Log.configure(highlightbackground="#d9d9d9")
        self.Log.configure(highlightcolor="black")
        self.Log.configure(insertbackground="black")
        self.Log.configure(insertborderwidth="3")
        self.Log.configure(selectbackground="#c4c4c4")
        self.Log.configure(selectforeground="black")
        self.Log.configure(wrap="none")

        self.Labelframe4 = tk.LabelFrame(self.TNotebook1_t1)
        self.Labelframe4.place(relx=0.518,
                               rely=0.747,
                               relheight=0.235,
                               relwidth=0.452)
        self.Labelframe4.configure(relief='groove')
        self.Labelframe4.configure(foreground="black")
        self.Labelframe4.configure(text='''Command''')
        self.Labelframe4.configure(background="#d9d9d9")
        self.Labelframe4.configure(highlightbackground="#d9d9d9")
        self.Labelframe4.configure(highlightcolor="black")

        self.ACoordinates = tk.Entry(self.Labelframe4)
        self.ACoordinates.place(relx=0.116,
                                rely=0.41,
                                height=50,
                                relwidth=0.09,
                                bordermode='ignore')
        self.ACoordinates.configure(background="white")
        self.ACoordinates.configure(disabledforeground="#a3a3a3")
        self.ACoordinates.configure(font="-family {Arial} -size 16")
        self.ACoordinates.configure(foreground="#000000")
        self.ACoordinates.configure(highlightbackground="#d9d9d9")
        self.ACoordinates.configure(highlightcolor="black")
        self.ACoordinates.configure(insertbackground="black")
        self.ACoordinates.configure(justify='center')
        self.ACoordinates.configure(selectbackground="#c4c4c4")
        self.ACoordinates.configure(selectforeground="black")

        self.NCoordinates = tk.Entry(self.Labelframe4)
        self.NCoordinates.place(relx=0.266,
                                rely=0.41,
                                height=50,
                                relwidth=0.09,
                                bordermode='ignore')
        self.NCoordinates.configure(background="white")
        self.NCoordinates.configure(disabledforeground="#a3a3a3")
        self.NCoordinates.configure(font="-family {Arial} -size 16")
        self.NCoordinates.configure(foreground="#000000")
        self.NCoordinates.configure(highlightbackground="#d9d9d9")
        self.NCoordinates.configure(highlightcolor="black")
        self.NCoordinates.configure(insertbackground="black")
        self.NCoordinates.configure(justify='center')
        self.NCoordinates.configure(selectbackground="#c4c4c4")
        self.NCoordinates.configure(selectforeground="black")

        self.Fire = tk.Button(self.Labelframe4, command=self.fire)
        self.Fire.place(relx=0.698,
                        rely=0.256,
                        height=94,
                        width=157,
                        bordermode='ignore')
        self.Fire.configure(activebackground="#ececec")
        self.Fire.configure(activeforeground="#000000")
        self.Fire.configure(background="#d9d9d9")
        self.Fire.configure(disabledforeground="#a3a3a3")
        self.Fire.configure(font="-family {Arial} -size 21")
        self.Fire.configure(foreground="#000000")
        self.Fire.configure(highlightbackground="#d9d9d9")
        self.Fire.configure(highlightcolor="black")
        self.Fire.configure(pady="0")
        self.Fire.configure(text='''Fire!''')

        self.Coordinates = tk.Label(self.Labelframe4)
        self.Coordinates.place(relx=0.116,
                               rely=0.256,
                               height=21,
                               width=143,
                               bordermode='ignore')
        self.Coordinates.configure(activebackground="#f9f9f9")
        self.Coordinates.configure(activeforeground="black")
        self.Coordinates.configure(background="#d9d9d9")
        self.Coordinates.configure(disabledforeground="#a3a3a3")
        self.Coordinates.configure(foreground="#000000")
        self.Coordinates.configure(highlightbackground="#d9d9d9")
        self.Coordinates.configure(highlightcolor="black")
        self.Coordinates.configure(text='''Target Coordinates''')

        self.Check = tk.Button(self.Labelframe4, command=self.checkStatus)
        self.Check.place(relx=0.432,
                         rely=0.256,
                         height=94,
                         width=147,
                         bordermode='ignore')
        self.Check.configure(activebackground="#ececec")
        self.Check.configure(activeforeground="#000000")
        self.Check.configure(background="#d9d9d9")
        self.Check.configure(disabledforeground="#a3a3a3")
        self.Check.configure(foreground="#000000")
        self.Check.configure(highlightbackground="#d9d9d9")
        self.Check.configure(highlightcolor="black")
        self.Check.configure(pady="0")
        self.Check.configure(text='''Check''')

        self.seedEntry = tk.Entry(self.TNotebook1_t2)
        self.seedEntry.place(relx=0.09, rely=0.145, height=30, relwidth=0.424)
        self.seedEntry.configure(background="white")
        self.seedEntry.configure(disabledforeground="#a3a3a3")
        self.seedEntry.configure(font="TkFixedFont")
        self.seedEntry.configure(foreground="#000000")
        self.seedEntry.configure(highlightbackground="#d9d9d9")
        self.seedEntry.configure(highlightcolor="black")
        self.seedEntry.configure(insertbackground="black")
        self.seedEntry.configure(selectbackground="#c4c4c4")
        self.seedEntry.configure(selectforeground="black")

        self.Seed = tk.Label(self.TNotebook1_t2)
        self.Seed.place(relx=0.09, rely=0.108, height=20, width=31)
        self.Seed.configure(activebackground="#f9f9f9")
        self.Seed.configure(activeforeground="black")
        self.Seed.configure(background="#d9d9d9")
        self.Seed.configure(disabledforeground="#a3a3a3")
        self.Seed.configure(foreground="#000000")
        self.Seed.configure(highlightbackground="#d9d9d9")
        self.Seed.configure(highlightcolor="black")
        self.Seed.configure(text='''Seed''')

        self.targetAddressEntry = tk.Entry(self.TNotebook1_t2)
        self.targetAddressEntry.place(relx=0.09,
                                      rely=0.253,
                                      height=30,
                                      relwidth=0.424)
        self.targetAddressEntry.configure(background="white")
        self.targetAddressEntry.configure(disabledforeground="#a3a3a3")
        self.targetAddressEntry.configure(font="TkFixedFont")
        self.targetAddressEntry.configure(foreground="#000000")
        self.targetAddressEntry.configure(highlightbackground="#d9d9d9")
        self.targetAddressEntry.configure(highlightcolor="black")
        self.targetAddressEntry.configure(insertbackground="black")
        self.targetAddressEntry.configure(selectbackground="#c4c4c4")
        self.targetAddressEntry.configure(selectforeground="black")

        self.TargetAddress = tk.Label(self.TNotebook1_t2)
        self.TargetAddress.place(relx=0.09, rely=0.217, height=21, width=88)
        self.TargetAddress.configure(activebackground="#f9f9f9")
        self.TargetAddress.configure(activeforeground="black")
        self.TargetAddress.configure(background="#d9d9d9")
        self.TargetAddress.configure(disabledforeground="#a3a3a3")
        self.TargetAddress.configure(foreground="#000000")
        self.TargetAddress.configure(highlightbackground="#d9d9d9")
        self.TargetAddress.configure(highlightcolor="black")
        self.TargetAddress.configure(text='''Target Address''')

        self.nodeURLEntry = tk.Entry(self.TNotebook1_t2)
        self.nodeURLEntry.place(relx=0.09,
                                rely=0.47,
                                height=30,
                                relwidth=0.183)
        self.nodeURLEntry.configure(background="white")
        self.nodeURLEntry.configure(disabledforeground="#a3a3a3")
        self.nodeURLEntry.configure(font="TkFixedFont")
        self.nodeURLEntry.configure(foreground="#000000")
        self.nodeURLEntry.configure(highlightbackground="#d9d9d9")
        self.nodeURLEntry.configure(highlightcolor="black")
        self.nodeURLEntry.configure(insertbackground="black")
        self.nodeURLEntry.configure(selectbackground="#c4c4c4")
        self.nodeURLEntry.configure(selectforeground="black")

        self.NodeURL = tk.Label(self.TNotebook1_t2)
        self.NodeURL.place(relx=0.09, rely=0.434, height=20, width=58)
        self.NodeURL.configure(activebackground="#f9f9f9")
        self.NodeURL.configure(activeforeground="black")
        self.NodeURL.configure(background="#d9d9d9")
        self.NodeURL.configure(disabledforeground="#a3a3a3")
        self.NodeURL.configure(foreground="#000000")
        self.NodeURL.configure(highlightbackground="#d9d9d9")
        self.NodeURL.configure(highlightcolor="black")
        self.NodeURL.configure(text='''Node URL''')

        self.Connect = tk.Button(self.TNotebook1_t2)
        self.Connect.place(relx=0.293, rely=0.47, height=34, width=87)
        self.Connect.configure(activebackground="#ececec")
        self.Connect.configure(activeforeground="#000000")
        self.Connect.configure(background="#d9d9d9")
        self.Connect.configure(cursor="fleur")
        self.Connect.configure(disabledforeground="#a3a3a3")
        self.Connect.configure(foreground="#000000")
        self.Connect.configure(highlightbackground="#d9d9d9")
        self.Connect.configure(highlightcolor="black")
        self.Connect.configure(pady="0")
        self.Connect.configure(text='''Connect''')

        self.netEntry = tk.Entry(self.TNotebook1_t2)
        self.netEntry.place(relx=0.09, rely=0.554, height=70, relwidth=0.266)
        self.netEntry.configure(background="white")
        self.netEntry.configure(disabledforeground="#a3a3a3")
        self.netEntry.configure(font="TkFixedFont")
        self.netEntry.configure(foreground="#000000")
        self.netEntry.configure(highlightbackground="#d9d9d9")
        self.netEntry.configure(highlightcolor="black")
        self.netEntry.configure(insertbackground="black")
        self.netEntry.configure(selectbackground="#c4c4c4")
        self.netEntry.configure(selectforeground="black")

        self.NetStatus = tk.Label(self.TNotebook1_t2)
        self.NetStatus.place(relx=0.09, rely=0.518, height=21, width=86)
        self.NetStatus.configure(activebackground="#f9f9f9")
        self.NetStatus.configure(activeforeground="black")
        self.NetStatus.configure(background="#d9d9d9")
        self.NetStatus.configure(disabledforeground="#a3a3a3")
        self.NetStatus.configure(foreground="#000000")
        self.NetStatus.configure(highlightbackground="#d9d9d9")
        self.NetStatus.configure(highlightcolor="black")
        self.NetStatus.configure(text='''Network Status''')

        self.addressEntry = tk.Entry(self.TNotebook1_t2)
        self.addressEntry.place(relx=0.09,
                                rely=0.361,
                                height=30,
                                relwidth=0.424)
        self.addressEntry.configure(background="white")
        self.addressEntry.configure(disabledforeground="#a3a3a3")
        self.addressEntry.configure(font="TkFixedFont")
        self.addressEntry.configure(foreground="#000000")
        self.addressEntry.configure(insertbackground="black")

        self.Address = tk.Label(self.TNotebook1_t2)
        self.Address.place(relx=0.09, rely=0.325, height=20, width=54)
        self.Address.configure(background="#d9d9d9")
        self.Address.configure(disabledforeground="#a3a3a3")
        self.Address.configure(foreground="#000000")
        self.Address.configure(text='''Address''')

        self.Save = tk.Button(self.TNotebook1_t2,
                              command=self.saveConnectionSettings)
        self.Save.place(relx=0.563, rely=0.241, height=54, width=117)
        self.Save.configure(activebackground="#ececec")
        self.Save.configure(activeforeground="#000000")
        self.Save.configure(background="#d9d9d9")
        self.Save.configure(disabledforeground="#a3a3a3")
        self.Save.configure(foreground="#000000")
        self.Save.configure(highlightbackground="#d9d9d9")
        self.Save.configure(highlightcolor="black")
        self.Save.configure(pady="0")
        self.Save.configure(text='''Save''')
class ResultSearchTab(Frame):
    def __init__(self, frame):

        #CARACTERÍSTICAS DEL PANEL
        width = frame.cget("width") * 3 / 5
        height = frame.cget("height")
        bgcolor1 = "#%02x%02x%02x" % (157, 168, 244)
        super().__init__(frame,
                         bg=bgcolor1,
                         highlightthickness=1,
                         highlightbackground="black")

        #TITULO DE VENTANA
        Label(self,
              text="DATOS DEL VEHÍCULO",
              font=("Verdana", 14, "bold"),
              bg=bgcolor1).place(relx=0.35, rely=0.04)

        #PANEL DE DATOS DEL VEHÍCULO
        dataVehicle = Frame(self, bg=bgcolor1, width=width, height=100)
        dataVehicle.place(relx=0.02, rely=0.1)
        bgcolor2 = "#%02x%02x%02x" % (198, 204, 249)

        Label(dataVehicle,
              text="Dominio",
              width=15,
              bg=bgcolor1,
              relief="groove",
              borderwidth=4,
              font=("Verdana", 11, "italic")).grid(row=1, column=1)
        Label(dataVehicle,
              text="Tipo",
              width=15,
              bg=bgcolor1,
              relief="groove",
              borderwidth=4,
              font=("Verdana", 11, "italic")).grid(row=1, column=3)
        Label(dataVehicle,
              text="N° de Motor",
              width=15,
              bg=bgcolor1,
              relief="groove",
              borderwidth=4,
              font=("Verdana", 11, "italic")).grid(row=1, column=5)
        Label(dataVehicle,
              text="Marca",
              width=15,
              bg=bgcolor1,
              relief="groove",
              borderwidth=4,
              font=("Verdana", 11, "italic")).grid(row=2, column=1)
        Label(dataVehicle,
              text="Modelo",
              width=15,
              bg=bgcolor1,
              relief="groove",
              borderwidth=4,
              font=("Verdana", 11, "italic")).grid(row=2, column=3)
        Label(dataVehicle,
              text="Año",
              width=15,
              bg=bgcolor1,
              relief="groove",
              borderwidth=4,
              font=("Verdana", 11, "italic")).grid(row=2, column=5)
        Label(dataVehicle,
              text="Titular",
              width=15,
              bg=bgcolor1,
              relief="groove",
              borderwidth=4,
              font=("Verdana", 11, "italic")).grid(row=3, column=1)
        Label(dataVehicle,
              text="DNI",
              width=15,
              bg=bgcolor1,
              relief="groove",
              borderwidth=4,
              font=("Verdana", 11, "italic")).grid(row=3, column=5)

        #DOMINIO
        self.domainLabel = Label(dataVehicle,
                                 font=("Verdana", 12, "italic"),
                                 width=15,
                                 bg=bgcolor2)
        self.domainLabel.grid(row=1, column=2)

        #TIPO DE VEHÍCULO
        self.kindLabel = Label(dataVehicle,
                               font=("Verdana", 12, "italic"),
                               width=15,
                               bg=bgcolor2)
        self.kindLabel.grid(row=1, column=4)

        #NÚMERO DE MOTOR
        self.engineLabel = Label(dataVehicle,
                                 font=("Verdana", 12, "italic"),
                                 width=20,
                                 bg=bgcolor2)
        self.engineLabel.grid(row=1, column=6)

        #MARCA
        self.brandLabel = Label(dataVehicle,
                                font=("Verdana", 12, "italic"),
                                width=15,
                                bg=bgcolor2)
        self.brandLabel.grid(row=2, column=2)

        #MODELO
        self.modelLabel = Label(dataVehicle,
                                font=("Verdana", 12, "italic"),
                                width=15,
                                bg=bgcolor2)
        self.modelLabel.grid(row=2, column=4)

        #AÑO
        self.yearLabel = Label(dataVehicle,
                               font=("Verdana", 12, "italic"),
                               width=20,
                               bg=bgcolor2)
        self.yearLabel.grid(row=2, column=6)

        #TITULAR
        self.titularLabel = Label(dataVehicle,
                                  font=("Verdana", 12, "italic"),
                                  anchor="w",
                                  width=45,
                                  bg=bgcolor2)
        self.titularLabel.grid(row=3, column=2, columnspan=3)

        #DNI DEL TITULAR
        self.dniLabel = Label(dataVehicle,
                              font=("Verdana", 12, "italic"),
                              width=20,
                              bg=bgcolor2)
        self.dniLabel.grid(row=3, column=6)

        #CREA TABLA DE INFRACCIONES
        self.tableFrame = Frame(self)
        self.model = TableModel()
        self.model.addColumn(colname="ID")
        self.model.columnwidths["ID"] = 80
        self.model.addColumn(colname="DNI RESPONSABLE")
        self.model.columnwidths["DNI RESPONSABLE"] = 90
        self.model.addColumn(colname="CAUSA")
        self.model.addColumn(colname="AGENTE")
        self.model.addColumn(colname="FECHA")
        self.model.addColumn(colname="LUGAR")
        self.model.addColumn(colname="MONTO")
        self.model.columnwidths["MONTO"] = 70
        self.model.addColumn(colname="PAGADO")
        self.model.columnwidths["PAGADO"] = 70
        self.infractionsTable = TableCanvas(self.tableFrame,
                                            model=self.model,
                                            width=938,
                                            thefont=("Arial", 10),
                                            read_only=True)
        self.infractionsTable.show()
        self.tableFrame.place(x="20", rely="0.35")

        #CREA MENSAJE DE ESTADO DE CUENTA
        self.message = StringVar()
        self.debtLabel = Label(self,
                               textvariable=self.message,
                               font=("Verdana", 12))
        self.debtLabel.place(x="30", rely="0.30")

    #FUNCIÓN QUE DEVUELVE LA FILA SELECCIONADA
    def getSelectedRow(self):
        return (self.infractionsTable.get_currentRecord())

    #FUNCIÓN QUE CARGA EL PANEL Y LA TABLA DE INFRACCIONES CON LOS DATOS CORRESPONDIENTES
    def showData(self, data):
        self.model.deleteRows()
        dataModel = {}

        if data != None:
            self.domainLabel.configure(text=data[0])
            self.kindLabel.configure(text=data[1])
            self.brandLabel.configure(text=data[2])
            self.modelLabel.configure(text=data[3])
            self.yearLabel.configure(text=data[4])
            self.engineLabel.configure(text=data[5])
            self.titularLabel.configure(text=data[7] + ", " + data[8])
            self.dniLabel.configure(text=data[6])

            infractions = DBManager().getInfractions(data[0])
            self.debt = 0.00
            for infraction in infractions:
                isPay = 'NO'
                if (infraction[8] == 1):
                    isPay = 'SI'
                dateandhour = "%02d-%02d-%4d %02d:%02d" % (
                    infraction[5].day, infraction[5].month, infraction[5].year,
                    infraction[5].hour, infraction[5].minute)
                dateandhourpaid = "-"
                if (infraction[9] != None):
                    dateandhourpaid = "%02d-%02d-%4d %02d:%02d" % (
                        infraction[9].day, infraction[9].month,
                        infraction[9].year, infraction[9].hour,
                        infraction[9].minute)
                dataModel[infraction[0]] = {
                    'ID': "%07d" % (infraction[0]),
                    'DNI RESPONSABLE': str(infraction[1]),
                    'CAUSA': str(infraction[3]),
                    'AGENTE': str(infraction[4]),
                    'FECHA': dateandhour,
                    'LUGAR': str(infraction[6]),
                    'MONTO': "%.2f" % (infraction[7]),
                    'PAGADO': isPay,
                    'FECHA PAGO': dateandhourpaid
                }
                if (infraction[8] == 0):
                    self.debt = self.debt + float(infraction[7])
            if (self.debt > 0):
                self.message.set("Presenta una deuda de $ " + str(self.debt))
            else:
                self.message.set("No presenta deudas.")
        #SI LA BÚSQUEDA NO ARROJA RESULTADOS, LOS CAMPOS SE MUESTRAN EN BLANCO
        else:
            self.domainLabel.configure(text="")
            self.kindLabel.configure(text="")
            self.brandLabel.configure(text="")
            self.modelLabel.configure(text="")
            self.yearLabel.configure(text="")
            self.engineLabel.configure(text="")
            self.titularLabel.configure(text="")
            self.dniLabel.configure(text="")
            self.message.set("")

        #ACTUALIZA EL CONTENIDO DE LA TABLA
        self.model.importDict(dataModel)
        self.infractionsTable.redraw()
        self.infractionsTable.autoResizeColumns()