Merhaba, ufak bir sorum olacak. Python ile yazdığımı programı system tray icon olarak göstermek istiyorum
bu işlemi yaparken program gizlenecek ama arkada çalışmaya devam edecek ve taskbar icon una tıkladığım zaman da program açılacak bunu nasıl yapabilirim?
Merhaba, konu hakkında çok bilgim yok. Ancak yaptığım araştırmalara göre bulduğum çözüm önerileri işletim sistemlerine göre değişiyor.
Windows için aşağıdaki yöntemi inceleyebilirsiniz:
pip install pypiwin32
from win32api import *
from win32gui import *
import win32con
import sys
import os
import time
class WindowsBalloonTip:
def __init__(self, title, msg):
message_map = {
win32con.WM_DESTROY: self.on_destroy,
}
wc = WNDCLASS()
hinst = wc.hInstance = GetModuleHandle(None)
wc.lpszClassName = "PythonTaskbar"
wc.lpfnWndProc = message_map
class_atom = RegisterClass(wc)
style = win32con.WS_OVERLAPPED | win32con.WS_SYSMENU
self.hwnd = CreateWindow(class_atom, "Taskbar", style, 0, 0, win32con.CW_USEDEFAULT,
win32con.CW_USEDEFAULT, 0, 0, hinst, None)
UpdateWindow(self.hwnd)
icon_path_name = os.path.abspath(os.path.join(sys.path[0], "icon.png"))
print(icon_path_name)
icon_flags = win32con.LR_LOADFROMFILE | win32con.LR_DEFAULTSIZE
try:
hicon = LoadImage(hinst, icon_path_name, win32con.IMAGE_ICON, 0, 0, icon_flags)
except:
hicon = LoadIcon(0, win32con.IDI_APPLICATION)
flags = NIF_ICON | NIF_MESSAGE | NIF_TIP
nid = (self.hwnd, 0, flags, win32con.WM_USER+20, hicon, "cloud")
Shell_NotifyIcon(NIM_ADD, nid)
Shell_NotifyIcon(NIM_MODIFY,
(self.hwnd, 0, NIF_INFO, win32con.WM_USER+20,
hicon, "Balloon tooltip", msg, 200, title))
time.sleep(10)
DestroyWindow(self.hwnd)
def on_destroy(self):
nid = (self.hwnd, 0)
Shell_NotifyIcon(NIM_DELETE, nid)
PostQuitMessage(0)
def balloon_tip(title, msg):
WindowsBalloonTip(title, msg)
if __name__ == '__main__':
balloon_tip("Opening from cloud", "File open")
Linux için ise aşağıdaki yöntemi inceleyebilirsiniz:
Not: PyQt4 modülü Windows’da da çalışmaktadır.
PyQt4 modülünün Windows’a kurulumu:
-
Bu siteden sisteminize uygun olan whl dosyasını indirin. İndireceğiniz dosya şuna benzemelidir. --> PyQt4-4.11.4-cp35-cp35m-win_amd64.whl --> Örneğin bu sürüm Python 3.5 ve Windows 64 bit içindir.
-
Dosyanın indiği dizinde cmd’yi açın ve aşağıdaki komutu yazın:
pip install PyQt4-4.11.4-cp35-cp35m-win_amd64.whl
# İndirdiğiniz sürümün adı neyse onu yazın.
- Bu sitede, programın çalışabilmesi için gerekli olan msvcp140.dll isimli bir dll dosyası mevcut. Onu bilgisayarınıza indirin ve PyQt4’ün bulunduğu dizine atın.
import sys
from PyQt4 import QtGui
class SystemTrayIcon(QtGui.QSystemTrayIcon):
def __init__(self, icon, parent=None):
QtGui.QSystemTrayIcon.__init__(self, icon, parent)
self.menu = QtGui.QMenu(parent)
exitAction = self.menu.addAction("Exit")
self.setContextMenu(self.menu)
def main():
app = QtGui.QApplication(sys.argv)
style = app.style()
icon = QtGui.QIcon(style.standardPixmap(QtGui.QStyle.SP_FileIcon))
tray_icon = SystemTrayIcon(icon)
tray_icon.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
Yukarıdaki kodlar çalışır durumdadır ancak hem windows’da hem de linux’de sistem tepsisinde gözüken simgelere tıkladığım zaman bir menü açılmadı. Her iki modül konusunda da bilgim yetersiz olduğu için simgelere tıklandığında program nasıl açılır bilmiyorum. Modülleri incelediğinizde bahsettiğim işlemin nasıl yapıldığını öğrenebileceğinizi sanıyorum.
İkonu değiştirmek için özellikler panelini kullanabilirsiniz ama başka bilgisayarlarda veya işletim sistemlerinde denediğinizde ne olur bilmen