Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: PyQt Не меняется время отображения сообщения в QSystemTrayIcon.showMessage  (Прочитано 853 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ivsatel

  • Автор темы
  • Активист
  • *
  • Сообщений: 336
    • Просмотр профиля
Пытаюсь для себя реализовать сенсор состояния интернет соединения. ОС Unity Ubuntu 12.04 LTS. (NetworkManager удалил, а сторонние ставить не хочу)
Задача его, отображать иконку в трее в зависимости от состояния соединения и при смене состояния менять иконку на соответствующую.
Вот собственно сам скрипт:
Код: (python) [Выделить]
#! /usr/bin/env python3.2

from PyQt4 import QtGui, QtCore
import sys, os, socket, subprocess, re

class SystrayExample(QtGui.QWidget):

    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.style = self.style()

        # Переменные чекеры
        self.state = 0
        self.state_sum = 0
        self.check_conunt_conn1 = 0
        self.check_conunt_conn2 = 0
        self.pr_chek1 = 1
        self.pr_chek2 = 1

        # Меню
        self.menu = QtGui.QMenu('Menu')

        # Действие для выхода из программы
        self.exitAction = self.menu.addAction(QtGui.QIcon(self.check_con()),'Exit')

        # Ожидание сигнала для выхода
        QtCore.QObject.connect(self.exitAction,QtCore.SIGNAL("triggered()"), self.close_prog)

        # Создание трей
        self.tray = QtGui.QSystemTrayIcon(QtGui.QIcon(self.check_con()), self)
        self.tray.setVisible(True)
        self.tray.setContextMenu(self.menu)

    # Функция 1 проверки переменных и смены иконки
    def pr1(self):
        # print('1')
        if self.check_conunt_conn1 < 1 and self.pr_chek1 > 0:
            if self.tray.supportsMessages():
                self.tray.showMessage('Сообщение 2', 'Соединение установлено\n'+str(self.state), 0, 7000)
            self.pr_chek1 = 0
            self.pr_chek2 = 1
        self.tray.setIcon(QtGui.QIcon(self.check_con()))
        QtCore.QTimer.singleShot(5000, self.pr2)

    # Функция 2 проверки переменных и смены иконки
    def pr2(self):
        # print('2')
        if self.check_conunt_conn1 > 0 and self.pr_chek2 > 0:
            if self.tray.supportsMessages():
                self.tray.showMessage('Сообщение', 'Соединение разорвано\n'+str(self.state[0]), 0, 7000)
            self.pr_chek2 = 0
            self.pr_chek1 = 1
        self.tray.setIcon(QtGui.QIcon(self.check_con()))
        QtCore.QTimer.singleShot(5000, self.pr1)

    def all_check(self):

        self.state = []

        p = subprocess.Popen("ifconfig", shell=True, stdout = subprocess.PIPE)
        out = p.stdout.read().decode("utf-8")
        c = re.findall(r'inet addr\:(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})', out)
        if len(c) > 1:
            self.state.append(1)
        elif len(c) < 2:
            self.state.append(0)

        with open('/sys/class/net/eth0/carrier', 'r') as stat_carrier, open('/sys/class/net/eth0/operstate', 'r') as stat_operstate:
            for text_carrier in stat_carrier:
                if not '0' in text_carrier:
                    self.state.append(1)
                else:
                    self.state.append(0)
            for text_operstate in stat_operstate:
                if not 'down' in text_carrier:
                    self.state.append(1)
                else:
                    self.state.append(0)
            try:
                s = socket.create_connection((socket.gethostbyname("www.google.com"), 80), 2)
                self.state.append(1)
                s.close()
            except:
                self.state.append(0)
        return self.state

    # Функция проверки соединения
    def check_con(self):

        self.state_sum = sum(i for i in self.all_check())

        if self.state_sum == 4:
            self.icon_tipe = (os.path.dirname(os.path.abspath(__file__))+'/IconS/1Con.png')
            self.check_conunt_conn1 = 0
            self.check_conunt_conn2 += 1
        if self.state_sum < 4:
            self.icon_tipe = (os.path.dirname(os.path.abspath(__file__))+'/IconS/1DCon.png')
            self.check_conunt_conn2 = 0
            self.check_conunt_conn1 += 1
        return self.icon_tipe

    # Функция завершения работы
    def close_prog(self):
        self.close()

app = QtGui.QApplication(sys.argv)
pytest = SystrayExample()
QtCore.QTimer.singleShot(100, pytest.pr1)
sys.exit(app.exec_())
В нем хотел реализовать вывод всплывающих сообщений, но столкнулся с невозможностью задать время его отображения.
Код: (python) [Выделить]
QSystemTrayIcon.showMessage (self, QString title, QString msg, MessageIcon icon = QSystemTrayIcon.Information, int msecs = 10000)Тут последним параметром выступает "время жизни" насколько я понял. Но его изменение к примеру на 1000 не дает результатов так на 10000 и остается.
Не пойму что я делаю не так?
« Последнее редактирование: 09 Июня 2014, 18:23:52 от ivsatel »

 

Страница сгенерирована за 0.038 секунд. Запросов: 22.