システムトレイに最小化したい小さなアプリケーションがあり、ボタンを押すとアイコンを作成してシステムトレイに最小化するコードがあります(意図的に、デフォルトの閉じる操作を上書きしたくありませんでした)。
ただし、qml からルート オブジェクトを取得する方法がわからないため、アクションを実行できません。取得すると、どのタイプになりますか?
app = QApplication(sys.argv)
engine = QQmlApplicationEngine()
manager = Manager()
ctx = engine.rootContext()
ctx.setContextProperty("Manager", manager)
engine.load('main.qml')
if not engine.rootObjects():
sys.exit(-1)
app.setWindowIcon(QtGui.QIcon('ico.png'))
sys.exit(app.exec_())
class Manager(QObject):
def __init__(self):
QObject.__init__(self)
self.tray_icon = QSystemTrayIcon(self)
次のコードは、アプリケーションで「動作」するように作成しましたが、正しく動作していません。
self.tray_icon.setIcon(self.style().standardIcon(QStyle.SP_MediaPlay))
show_action = QAction("Show", self)
quit_action = QAction("Exit", self)
hide_action = QAction("Hide", self)
show_action.triggered.connect(self.show)
hide_action.triggered.connect(self.hide)
quit_action.triggered.connect(qApp.quit)
tray_menu = QMenu()
tray_menu.addAction(show_action)
tray_menu.addAction(hide_action)
tray_menu.addAction(quit_action)
self.tray_icon.setContextMenu(tray_menu)
self.tray_icon.show()
def minimize(self):
self.hide()
print("Test")
_translate = QtCore.QCoreApplication.translate
#self.hide()
self.tray_icon.showMessage(
"Tray Program",
"Application was minimized to Tray",
QSystemTrayIcon.Information,
2000
)
私がした唯一のことは私が変えた
class Manager(QObject): to (QMainWindow)
このコードを使用できましたが、ウィンドウを操作する代わりに、完全に新しいウィンドウが表示されましたが、通常のシステム トレイ アイコンと必要なすべてのメニュー項目が表示されました。
要するに、ルートの参照を取得する方法と、最小化を使用してその上にトレイを配置する方法です。
私のQMLのルートは通常のApplicationWindowです。
少し編集しただけで、彼らが使用していたいくつかのC++の例で見ました
root = engine.rootObjects().at(0);
しかし、私が見たように、これはもう機能しません。しかし、私は同様の方法を見つけていません。