我有一个小应用程序,我想最小化到系统托盘,并且我确实有创建图标并将其最小化到系统托盘的代码(故意我不想覆盖默认关闭操作)。
但是,我不知道如何从 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);
但正如我所见,这不再起作用了。但我还没有找到任何类似的方法。