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


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Как использовать диалоговые окна в PyQt, если программа работает в цикле?  (Прочитано 1472 раз)

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

Оффлайн Xyanight

  • Автор темы
  • Забанен
  • Участник
  • *
  • Сообщений: 147
  • Это просто какой-то Python!
    • Просмотр профиля
Есть вот такой код: 

import sys
import types

from collections import OrderedDict
from PyQt4 import QtGui, QtCore


class ProgramTray(QtCore.QThread):
    def __init__(self, icon):
        QtCore.QThread.__init__(self)
        self.menu = QtGui.QMenu()
        self.icon = QtGui.QSystemTrayIcon(QtGui.QIcon(icon))
        self.flag_exit = True
        # Пользовательсеий код работающий в отдельном потоке в трее.
        self.code = None


    def run(self):
        if isinstance(self.code, types.MethodType) \
            or isinstance(self.code, types.FunctionType):
            self.code()
        else:
            QtGui.QApplication.quit()
            raise TypeError, "Parameter code has to be a function or class " \
                             "method"


    def stop(self):
        self.flag_exit = False


    def setMenu(self, menu=None):
        """Устанавливает пункты меню на иконке в трее"""

        if not menu:
            menu = []

        # Создаем коллекцию не отсортированых элементов.
        collection = OrderedDict(menu)
        items = collection.keys()  # [имена пунктов]
        functions = collection.values()  # [функции. соотвествующие пунктам]

        for i, item in enumerate(items):
            function = functions[i] 

            if isinstance(function, types.MethodType) \
                or isinstance(function, types.FunctionType):
                self.menu.addAction(QtGui.QAction(item, self,
                                    triggered=function))

        self.quitAction = QtGui.QAction("Exit", self,
                                        triggered=self.stop)
        self.menu.addAction(self.quitAction)

        self.icon.setContextMenu(self.menu)


if __name__ == "__main__":
    import time


    def yourCode():
        while programTray.flag_exit:
            time.sleep(1)
            print "Work your code ..."

        QtGui.QApplication.quit()


    app = QtGui.QApplication(sys.argv)

    programTray = ProgramTray("./icon.png")
    programTray.code = yourCode
    programTray.setMenu()
    programTray.icon.show()
    programTray.start()

    app.exec_()

Подскажите, как я могу вызывать диалоговые окна QtGui.QMessageBox.Information, QtGui.QMessageBox.Critical, QtGui.QMessageBox.Question, QtGui.QMessageBox.Warning и QtGui.QFileDialog.Options в функции yourCode?
Это просто какой-то Python!

 

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