Найти - Пользователи
Полная версия: pyQt4 SystemTrayIcon
Начало » Python для новичков » pyQt4 SystemTrayIcon
1
victor_user
Здравствуйте, не могу разобраться.
По нажатию на adderAction(скачать) я вызываю диалоговое окно, после нажатия
ок или отмена в диалоговом окне скрипт завершается.
Как заставить скрипт работать после нажатия ок\отмена в диалоговом окне?
import sys
from PyQt4 import QtGui,QtCore
class SystemTrayIcon(QtGui.QSystemTrayIcon):
    def __init__(self, icon, parent=None):
        QtGui.QSystemTrayIcon.__init__(self, icon, parent)
        
        menu = QtGui.QMenu(parent)
        adderAction = menu.addAction("Диалоговое окно")
        exitAction = menu.addAction("Выход")
        self.setContextMenu(menu)
        parent.connect(exitAction, QtCore.SIGNAL('triggered()'), QtCore.SLOT('close()'))
        parent.connect(adderAction, QtCore.SIGNAL('triggered()'), lambda: self.make_message(parent))
        
    def make_message(self,parent):
        link, ok = QtGui.QInputDialog.getText(parent, 'Заголовок', 'Введите текст:')
def main():
    app = QtGui.QApplication(sys.argv)
    w = QtGui.QMainWindow()
    trayIcon = SystemTrayIcon(QtGui.QIcon("icon.png"), w)
    trayIcon.show()
    sys.exit(app.exec_())
if __name__ == '__main__':
    main()
victor_user
Нагугленный пример после открытия окна и нажатия ок пишет:
Ошибка сегментирования (core dumped)
import sys
from PyQt4 import QtCore
from PyQt4 import QtGui
class SystemTrayIcon(QtGui.QSystemTrayIcon):
    def __init__(self, parent=None):
        QtGui.QSystemTrayIcon.__init__(self, parent)
        self.setIcon(QtGui.QIcon("icon.png"))
        self.iconMenu = QtGui.QMenu(parent)
        appabout = self.iconMenu.addAction("About")
        appexit = self.iconMenu.addAction("Exit")
        self.setContextMenu(self.iconMenu)
        self.connect(appabout,QtCore.SIGNAL('triggered()'),self.showAbout)
        self.connect(appexit,QtCore.SIGNAL('triggered()'),self.appExit)
        self.show()
    def showAbout(self):
        QtGui.QMessageBox.information(QtGui.QWidget(), self.tr("About Tunarium"), self.tr("Your text here."))
    def appExit(self):
        sys.exit()
if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    trayIcon = SystemTrayIcon()
    trayIcon.show()
    sys.exit(app.exec_())
victor_user
Ничего не решил с диалоговым окном, использую kdialog.Спасибо.
Rodegast
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
from PySide import QtCore
from PySide import QtGui
class SystemTrayIcon(QtGui.QDialog):
    def __init__(self, *arg, **args):
        QtGui.QDialog.__init__(self)
        self.trayIcon = QtGui.QSystemTrayIcon(QtGui.QIcon("icon.png"))
        iconMenu = QtGui.QMenu(self)
        appabout = QtGui.QAction(u"Диалог", self)
        self.connect(appabout, QtCore.SIGNAL('triggered()'), self.showAbout)
        appexit = QtGui.QAction(u"Выход", self)
        self.connect(appexit, QtCore.SIGNAL('triggered()'), sys.exit)
        iconMenu.addActions([appabout, appexit])
        self.trayIcon.setContextMenu(iconMenu)
        self.trayIcon.show()
        self.setVisible(False)
    def showAbout(self):
        QtGui.QMessageBox.information(self, "About Tunarium", "Your text here.")
if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    app.setQuitOnLastWindowClosed(False)
    trayIcon = SystemTrayIcon()
    sys.exit(app.exec_())
victor_user
Rodegast, спасибо, работает.
Сам догадался сделать только так:
import sys
from PyQt4 import QtGui,QtCore
class SystemTrayIcon(QtGui.QSystemTrayIcon):
    def __init__(self, icon, parent=None):
        QtGui.QSystemTrayIcon.__init__(self, icon, parent)
        
        menu = QtGui.QMenu(parent)
        adderAction = menu.addAction("Диалоговое окно")
        exitAction = menu.addAction("Выход")
        self.setContextMenu(menu)
        parent.connect(exitAction, QtCore.SIGNAL('triggered()'), QtCore.SLOT('close()'))
        parent.connect(adderAction, QtCore.SIGNAL('triggered()'), lambda: self.make_message(parent))
        
    def make_message(self,parent):
        os.system('kdialog --title "Данные" --inputbox "Введите данные:" >> data.txt ')
def main():
    app = QtGui.QApplication(sys.argv)
    w = QtGui.QMainWindow()
    trayIcon = SystemTrayIcon(QtGui.QIcon("icon.png"), w)
    trayIcon.show()
    sys.exit(app.exec_())
if __name__ == '__main__':
    main()
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB