PyQt4でトレイを最小化する方法はありますか? 既に QSystemTrayIcon クラスを使用していますが、アプリ ウィンドウを最小化または「非表示」にして、トレイ アイコンのみを表示したいと考えています。
誰もこれをやったことがありますか?任意の方向をいただければ幸いです。
Window XP Pro で Python 2.5.4 と PyQt4 を使用する
PyQt4でトレイを最小化する方法はありますか? 既に QSystemTrayIcon クラスを使用していますが、アプリ ウィンドウを最小化または「非表示」にして、トレイ アイコンのみを表示したいと考えています。
誰もこれをやったことがありますか?任意の方向をいただければ幸いです。
Window XP Pro で Python 2.5.4 と PyQt4 を使用する
システム トレイに実際に最小化する方法がないことを覚えていれば、非常に簡単です。
代わりに、次のようにして偽装します。
コードが役立つので、最小化イベントの代わりに closeEvent を除いて、アプリケーション用に書いたものを次に示します。
ノート:
「closeEvent(event)」はオーバーライドされた Qt イベントであるため、非表示にするウィンドウを実装するクラスに配置する必要があります。
「okayToClose()」は、systray に最小化する代わりに実際にアプリケーションを終了したい場合があるため、実装を検討できる関数 (または保存したいブール値のフラグ) です。
ウィンドウを再度 show() する方法の例もあります。
def __init__(self):
traySignal = "activated(QSystemTrayIcon::ActivationReason)"
QtCore.QObject.connect(self.trayIcon, QtCore.SIGNAL(traySignal), self.__icon_activated)
def closeEvent(self, event):
if self.okayToClose():
#user asked for exit
self.trayIcon.hide()
event.accept()
else:
#"minimize"
self.hide()
self.trayIcon.show() #thanks @mojo
event.ignore()
def __icon_activated(self, reason):
if reason == QtGui.QSystemTrayIcon.DoubleClick:
self.show()
クリスの例に追加するだけです:
シグナルを宣言するときは Qt 表記を使用することが重要です。
正しい:
self.connect(self.icon, SIGNAL("activated(QSystemTrayIcon::ActivationReason)"), self.iconClicked)
PyQtのものではありません
正しくなく、動作しません:
self.connect(self.icon, SIGNAL("activated(QSystemTrayIcon.ActivationReason)"), self.iconClicked)
::
シグナル文字列の に注意してください。これを理解するのに約3時間かかりました。
ここに作業コードがあります.CrucialのMatzeに感謝します.SIGNALは私にさらに多くの時間を費やしました..しかし、他のことをしています。#だからta!一瞬 :-)
def create_sys_tray(self):
self.sysTray = QtGui.QSystemTrayIcon(self)
self.sysTray.setIcon( QtGui.QIcon('../images/corp/blip_32.png') )
self.sysTray.setVisible(True)
self.connect(self.sysTray, QtCore.SIGNAL("activated(QSystemTrayIcon::ActivationReason)"), self.on_sys_tray_activated)
self.sysTrayMenu = QtGui.QMenu(self)
act = self.sysTrayMenu.addAction("FOO")
def on_sys_tray_activated(self, reason):
print "reason-=" , reason
これはコードであり、コードを表示するのに役立ちます
import sys
from PyQt4 import QtGui, QtCore
from PyQt4.QtGui import QDialog, QApplication, QPushButton, QLineEdit, QFormLayout, QSystemTrayIcon
class Example(QtGui.QWidget):
def __init__(self):
super(Example, self).__init__()
self.initUI()
def initUI(self):
self.icon = QSystemTrayIcon()
r = self.icon.isSystemTrayAvailable()
print r
self.icon.setIcon(QtGui.QIcon('/home/vzades/Desktop/web.png'))
self.icon.show()
# self.icon.setVisible(True)
self.setGeometry(300, 300, 250, 150)
self.setWindowIcon(QtGui.QIcon('/home/vzades/Desktop/web.png'))
self.setWindowTitle('Message box')
self.show()
self.icon.activated.connect(self.activate)
self.show()
def closeEvent(self, event):
reply = QtGui.QMessageBox.question(self, 'Message', "Are you sure to quit?", QtGui.QMessageBox.Yes |
QtGui.QMessageBox.No, QtGui.QMessageBox.No)
if reply == QtGui.QMessageBox.Yes:
event.accept()
else:
self.icon.show()
self.hide()
event.ignore()
def activate(self, reason):
print reason
if reason == 2:
self.show()
def __icon_activated(self, reason):
if reason == QtGui.QSystemTrayIcon.DoubleClick:
self.show()
def main():
app = QtGui.QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
if __name__ == '__main__':
main()