ich lerne gerade Qt4 kennen. Ich habe per Qt-Designer ein MainWindow erstellt, mit dazugehörigem Menu. Nun arbeite ich an einem SysTray, also, die MDI in Systray zu verlegen. Vor diesem Hintergrund habe ich gleich zwei Fragen. Erst einmal den Code:
Code: Alles auswählen
import sys
import os
from PyQt4.QtCore import *
from PyQt4.QtGui import QApplication, QMainWindow, QWorkspace, QAction, QMenu, QSystemTrayIcon, QIcon, QMessageBox
from PyQt4.uic import *
class Mdi_Main(QMainWindow):
def __init__(self, parent=None):
QMainWindow.__init__(self, parent)
self.path_mdi_form = os.path.abspath(".")
self.trayIconMenu = QMenu()
self.createActions()
self.ui_TestMainWorkSpace = loadUi(self.path_mdi_form + '\\files\qt_ui\mdi_form.ui', self)
self.ui_TestMainWorkSpace.showMaximized()
self.workspace = QWorkspace()
self.workspace.setScrollBarsEnabled(True)
self.setCentralWidget(self.workspace)
self.ui_TestMainWorkSpace.setWindowTitle("MDIForm")
self.set_SysTray = self.actionSysTray.setText("Start in SysTrayIcon")
# Signal / Slot
self.ui_TestMainWorkSpace.actionSysTray.triggered.connect(self.createTrayIcon)
def createActions(self):
self.aboutAction = QAction("About", self,
triggered=self.showAbout)
self.maximizeAction = QAction("Show Appliacation", self,
triggered=self.showMaximized)
self.quitAction = QAction("Quit Application", self,
triggered=app.quit)
def createTrayIcon(self):
print "Los"
self.w = self.ui_TestMainWorkSpace
self.trayIconMenu.addAction(self.aboutAction)
self.trayIconMenu.addAction(self.maximizeAction)
self.trayIconMenu.addSeparator()
self.trayIconMenu.addAction(self.quitAction)
self.trayIcon = QSystemTrayIcon(QIcon('about.png'), self.w)
self.trayIcon.setContextMenu(self.trayIconMenu)
self.trayIcon.show()
self.hide()
def showAbout(self):
self.ui_about = loadUi(self.path_mdi_form + '\\files\qt_ui\pp_about.ui')
self.ui_about.show()
app = QApplication(sys.argv)
window = Mdi_Main()
sys.exit(app.exec_())
Folgendes Problem: Sobald meine MDIForm nun im SysTray ist, und ich über das SysTray-Menu auf "About" (Zeile 44) gehe, ich über die showAbout(self)-Funktion (Zeille 55) die pp_about.ui (Zeile 58) dynamisch laden und anschließend anzeigen lassen (Zeile 59). Die Form wird angezeigt. Aber beim schließen der Form wird gleich die gesamte MDIForm geschlossen. Wie kann ich das verhindern? Schließlich will man ja nicht nach einem "Über Prgramm" gleich das gesamte Programm beenden
Zweites Problem: Wie ihr in Zeile 50 seht, versuche ich ein Icon zu laden, damit dieser im SysTray zusehen ist. Jedoch ist dort nichts zu sehen, nur ein leerer Platzhalter. Aber der Menu ist trotzdem da. Das Icon liegt im selben Ordner wie die ausgeführte Datei.
Besten Dank
Euer Sophus