Вывод результата в TK

Shikar

Новичок
Пользователь
Дек 14, 2021
14
0
1
Доброго времени суток!
Подскажите пожалуйста, как вывести текстовый результат "OK" или "DOWN" в окно Tk от socket? вроде все работает, в IDLE выводит как надо, но вот в окошке обозначается цифрами 0 или 10065.
И еще вопрос как изменить цвета для надписей "ОК" и "DOWN", чтоб при выводе "ОК" был зеленый, а при "DOWN" красный??


Python:
from tkinter import *
from subprocess import call
import sys
import time
import select
import paramiko
import re
import tkinter as tk
import tkinter.messagebox as mb
from tkinter import messagebox
from tkinter import filedialog
import sqlite3
import subprocess
import os
import socket
import threading
import random






Zelax = None
def CUST():   
    global Zelax
    threading.Timer(1, CUST).start()
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    result = sock.connect_ex(("10.3.1.89",22))
    if Zelax != result:
        if result == 0:
            print ("OK")
        else:
            print ("DOWN")
    Zelax = result
      
CUST()

Cisco = None
def CUSTOM():   
    global Cisco
    threading.Timer(1, CUSTOM).start()
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    result = sock.connect_ex(("10.3.1.89",22))
    if Cisco != result:
        if result == 0:
            print ("OK")
        else:
            print ("DOWN")
    Cisco = result
      
CUSTOM()

def update_Zelax():
    lbl2.config(text=Zelax)
    root.after(1000, update_Zelax)
    
def update_Cisco():
    lbl3.config(text=Cisco)
    root.after(1000, update_Cisco)

    
root = Tk()

label1 = Label()
label1.config(text='NAME')
label1.grid(column=0, row=0)

label2 = Label()
label2.config(text='DESKRIPTION')
label2.grid(column=1, row=0)

label3 = Label()
label3.config(text='STATUS')
label3.grid(column=2, row=0)

lbl2 = Label()
lbl2.config(text='Zelax')
lbl2.grid(column=0, row=1)

lbl2 = Label()
lbl2.config(text='Switch')
lbl2.grid(column=1, row=1)

lbl2 = Label()
lbl2.grid(column=2, row=1)

lbl3 = Label()
lbl3.config(text='Cisco')
lbl3.grid(column=0, row=2)

lbl3 = Label()
lbl3.config(text='Router')
lbl3.grid(column=1, row=2)

lbl3 = Label()
lbl3.grid(column=2, row=2)

root.after(1000, update_Zelax)
root.after(1000, update_Cisco)

root.mainloop()
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 599
464
83
ниче не понятно, если в консоль вывод правильный, этот результат можно вывести в окно...
ваш пример не воспроизводим, можно только делать догадки...
ну и использование глобал, это плохо, нужно возвращать значение из функций...

upd
можете воспользоваться дебагером...

upd2
и у вас разные виджеты с одинаковыми именами...
каша какая то

upd3
попробуйте так
Python:
from tkinter import *
from subprocess import call
import sys
import time
import select
import paramiko
import re
import tkinter as tk
import tkinter.messagebox as mb
from tkinter import messagebox
from tkinter import filedialog
import sqlite3
import subprocess
import os
import socket
import threading
import random


def CUST():
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    result = sock.connect_ex(("10.3.1.89", 22))
    if result == 0:
        lbl_status1.config(text="OK")
    else:
        lbl_status1.config(text="DOWN")


def CUSTOM():
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    result = sock.connect_ex(("10.3.1.89", 22))
    if result == 0:
        lbl_status2.config(text="OK")
    else:
        lbl_status2.config(text="DOWN")


root = Tk()

label1 = Label()
label1.config(text='NAME')
label1.grid(column=0, row=0)

label2 = Label()
label2.config(text='DESKRIPTION')
label2.grid(column=1, row=0)

label3 = Label()
label3.config(text='STATUS')
label3.grid(column=2, row=0)

lbl2 = Label()
lbl2.config(text='Zelax')
lbl2.grid(column=0, row=1)

lbl_des1 = Label()
lbl_des1.config(text='Switch')
lbl_des1.grid(column=1, row=1)

lbl_status1 = Label()
lbl_status1.grid(column=2, row=1)

lbl3 = Label()
lbl3.config(text='Cisco')
lbl3.grid(column=0, row=2)

lbl_des2 = Label()
lbl_des2.config(text='Router')
lbl_des2.grid(column=1, row=2)

lbl_status2 = Label()
lbl_status2.grid(column=2, row=2)

threading.Thread(target=CUST, daemon=True).start()
threading.Thread(target=CUSTOM, daemon=True).start()

root.mainloop()

стиль имен сохранил (не понятно, что к чему)
 
Последнее редактирование:

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 599
464
83
но вот в окошке обозначается цифрами 0 или 10065
потому что ответ функции connect_ex при удаче 0, при неудаче НЕ НОЛЬ
 

Shikar

Новичок
Пользователь
Дек 14, 2021
14
0
1
ниче не понятно, если в консоль вывод правильный, этот результат можно вывести в окно...
ваш пример не воспроизводим, можно только делать догадки...
ну и использование глобал, это плохо, нужно возвращать значение из функций...

upd
можете воспользоваться дебагером...

upd2
и у вас разные виджеты с одинаковыми именами...
каша какая то

upd3
попробуйте так
Python:
from tkinter import *
from subprocess import call
import sys
import time
import select
import paramiko
import re
import tkinter as tk
import tkinter.messagebox as mb
from tkinter import messagebox
from tkinter import filedialog
import sqlite3
import subprocess
import os
import socket
import threading
import random


def CUST():
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    result = sock.connect_ex(("10.3.1.89", 22))
    if result == 0:
        lbl_status1.config(text="OK")
    else:
        lbl_status1.config(text="DOWN")


def CUSTOM():
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    result = sock.connect_ex(("10.3.1.89", 22))
    if result == 0:
        lbl_status2.config(text="OK")
    else:
        lbl_status2.config(text="DOWN")


root = Tk()

label1 = Label()
label1.config(text='NAME')
label1.grid(column=0, row=0)

label2 = Label()
label2.config(text='DESKRIPTION')
label2.grid(column=1, row=0)

label3 = Label()
label3.config(text='STATUS')
label3.grid(column=2, row=0)

lbl2 = Label()
lbl2.config(text='Zelax')
lbl2.grid(column=0, row=1)

lbl_des1 = Label()
lbl_des1.config(text='Switch')
lbl_des1.grid(column=1, row=1)

lbl_status1 = Label()
lbl_status1.grid(column=2, row=1)

lbl3 = Label()
lbl3.config(text='Cisco')
lbl3.grid(column=0, row=2)

lbl_des2 = Label()
lbl_des2.config(text='Router')
lbl_des2.grid(column=1, row=2)

lbl_status2 = Label()
lbl_status2.grid(column=2, row=2)

threading.Thread(target=CUST, daemon=True).start()
threading.Thread(target=CUSTOM, daemon=True).start()

root.mainloop()

стиль имен сохранил (не понятно, что к чему)
Да, так обозначение в статусе поменялось на ОК и DOWN, но не обновляется в окошке в случае обрыва линии.
А на имена не обращайте внимания, это так проба.
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 599
464
83
не обновляется в окошке в случае обрыва линии.
что значит обрыв линии? обрыв где?
Да, так обозначение в статусе поменялось на ОК и DOWN, но не обновляется в окошке в случае обрыва линии.
А на имена не обращайте внимания, это так проба.
вы изобретаете велосипед, для этих целей есть zabbix...

upd
Python:
from tkinter import *
from subprocess import call
import sys
import time
import select
import paramiko
import re
import tkinter as tk
import tkinter.messagebox as mb
from tkinter import messagebox
from tkinter import filedialog
import sqlite3
import subprocess
import os
import socket
import threading
import random


def CUST():
    while True:
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        result = sock.connect_ex(("10.3.1.89", 22))
        if result == 0:
            lbl_status1.config(text="OK")
        else:
            lbl_status1.config(text="DOWN")


def CUSTOM():
    while True:
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        result = sock.connect_ex(("10.3.1.89", 22))
        if result == 0:
            lbl_status2.config(text="OK")
        else:
            lbl_status2.config(text="DOWN")


root = Tk()

label1 = Label()
label1.config(text='NAME')
label1.grid(column=0, row=0)

label2 = Label()
label2.config(text='DESKRIPTION')
label2.grid(column=1, row=0)

label3 = Label()
label3.config(text='STATUS')
label3.grid(column=2, row=0)

lbl2 = Label()
lbl2.config(text='Zelax')
lbl2.grid(column=0, row=1)

lbl_des1 = Label()
lbl_des1.config(text='Switch')
lbl_des1.grid(column=1, row=1)

lbl_status1 = Label()
lbl_status1.grid(column=2, row=1)

lbl3 = Label()
lbl3.config(text='Cisco')
lbl3.grid(column=0, row=2)

lbl_des2 = Label()
lbl_des2.config(text='Router')
lbl_des2.grid(column=1, row=2)

lbl_status2 = Label()
lbl_status2.grid(column=2, row=2)

threading.Thread(target=CUST, daemon=True).start()
threading.Thread(target=CUSTOM, daemon=True).start()

root.mainloop()
так же можете добавить тауймаут в циклы, чтобы запросы были не постоянны
 
Последнее редактирование:

Shikar

Новичок
Пользователь
Дек 14, 2021
14
0
1
что значит обрыв линии? обрыв где?

вы изобретаете велосипед, для этих целей есть zabbix...
Это понятно, что есть различные программы для мониторинга. Но все же.. интересно сделать
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 599
464
83
Это понятно, что есть различные программы для мониторинга. Но все же.. интересно сделать
я добавил в сообщение выше
 

Shikar

Новичок
Пользователь
Дек 14, 2021
14
0
1
Да, я увидел. Спасибо
 

Shikar

Новичок
Пользователь
Дек 14, 2021
14
0
1
Спасибо большое, все работает. Добавил разное отображение цвета для ок и даун, красота!
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 599
464
83
Спасибо большое, все работает. Добавил разное отображение цвета для ок и даун, красота!
рад помочь
 

Форум IT Специалистов