Изменение цвета фона для кнопок для каждого активного хоста в Python

#python #for-loop #button #kivy #host

#python #для цикла #кнопка #kivy #хост

Вопрос:

У меня есть 4 кнопки, каждая из которых посвящена хосту

Я хотел бы выполнить пинг для каждого хоста и изменить цвет фона кнопки на (зеленый или красный) в случае успешного пинга (зеленый) или нет (красный).

Я могу сделать это в 4 разных функциях, но это будет намного лучше и быстрее, если это будет в одной функции

Вот функция:

 def Check(self):

    hosts = ['192.168.178.211', '192.168.178.212', '192.168.178.213', '192.168.178.214']

    for i in hosts:

        response = os.system("ping -n 1 -w 500 "   i   " > nul")

        if response == 0:
            self.button1.background_color = green
            self.button2.background_color = green
            self.button3.background_color = green
            self.button4.background_color = green

        else:
            self.button1.background_color = red
            self.button2.background_color = red
            self.button3.background_color = red
            self.button4.background_color = red

     pass
  

Я думаю, что проблема с моим кодом заключается в том, что когда один хост активен, все кнопки становятся зелеными, что неправильно. Иногда один хост включен, а другой выключен, и я хотел бы представить текущее состояние с цветом фона кнопки.

Ответ №1:

Вы можете создать список кнопок и перечислять в цикле и изменить цвет фона правой кнопки. Ниже приведена исправленная функция:

 def Check(self):

    hosts = ['192.168.178.211', '192.168.178.212', '192.168.178.213', '192.168.178.214']
    buttons = [self.button1, self.button2, self.button3, self.button4]
    
    for x, i in enumerate(hosts):

        response = os.system("ping -n 1 -w 500 "   i   " > nul")

        if response == 0:
            buttons[x].background_color = green
        else:
            buttons[x].background_color = red

     pass