Это потому, что когда вы использовали tray()
, ваше основное приложение запустилось, и GUI main l oop было запущено. Он работает до выхода из вашего приложения, после чего выполняется while loop
.
Однако, если вы хотите, чтобы l oop запускался одновременно, вы должны интегрировать его с основным * *1004* l * 1014. *. В Gtk
мы делаем это, используя GLib.add_main_thread
и другие методы, о Qt
я не знаю, но вы можете использовать это общее решение, используя Threading.
from threading import Thread
import time
import os
import sys
from PySide2 import QtWidgets, QtGui
def loop_function():
print("Nice") # anything executable
def thread_loop():
while True:
loop_function() # executing every minute
time.sleep(60)
class SystemTrayIcon(QtWidgets.QSystemTrayIcon):
def __init__(self, icon, parent=None):
QtWidgets.QSystemTrayIcon.__init__(self, icon, parent)
self.setToolTip(f'Wallpy')
menu = QtWidgets.QMenu(parent)
exit_ = menu.addAction("Exit")
exit_.triggered.connect(lambda: sys.exit())
menu.addSeparator()
self.setContextMenu(menu)
def tray():
app = QtWidgets.QApplication(sys.argv)
w = QtWidgets.QWidget()
tray_icon = SystemTrayIcon(QtGui.QIcon("tray.ico"), w)
tray_icon.show()
app.exec_()
my_loop = Thread(target=thread_loop, args=()) # Start the thread with no args
my_loop.start()
tray() # launch tray icon