The child process calls the function count
Count for infinite loop time. Sleep to control events each cycle interval, 10 seconds each time,
The problem is:
The program does not enter the tray all normal, once every 10 seconds,
But a program to minimize the into the tray, the count in the infinite loop "been" suspended (strangely to minimize to tray for the first time, the time to perform a output code before pause)
I want to achieve, minimize to tray after the program is still normal execution, and not appear the code is suspended in the count,
All the code is as follows:
the import the OSThe import win32api
The import win32con
The import win32gui_struct
The import win32gui
The from tkinter import *
The import json
The import requests
The import time
The import win32com. Client
The import pypyodbc
The import threading
Mayi __author__=' '
Def print_ts (the message) :
Return "[% s] % s" % (time. Strftime (" % % Y - m - H: % d % % m: % s ", the time the localtime ()), the message)
The Main=None
The class SysTrayIcon (object) :
The QUIT='QUIT'
SPECIAL_ACTIONS=[the QUIT]
FIRST_ID=1314
Def __init__ (s,
Icon,
Hover_text,
Menu_options,
On_quit=None,
Default_menu_index=None,
Window_class_name=None) :
S.i con=icon
Sheldon horowitz over_text=hover_text
S.o n_quit=on_quit
Menu_options=menu_options + ((' exit 'None, s.Q UIT),)
S. _next_action_id=s. IRST_ID
S.m enu_actions_by_id=set ()
S.m enu_options=s. _add_ids_to_menu_options (list (menu_options))
S.m enu_actions_by_id=dict (s.m enu_actions_by_id)
Del s. _next_action_id
Spyware doctor efault_menu_index=(default_menu_index or 0)
S. indow_class_name=window_class_name or "SysTrayIconPy
"
Message_map={win32gui. RegisterWindowMessage (" TaskbarCreated ") : s.r efresh_icon,
Win32con. WM_DESTROY: spyware doctor estroy,
Mand win32con. WM_COMMAND: s.com,
Win32con. WM_USER + 20: s.n otify,}
# registered window class,
Window_class=win32gui. WNDCLASS ()
Window_class. HInstance=win32gui. GetModuleHandle (None)
Window_class. LpszClassName=s. indow_class_name
Window_class. Style=win32con. CS_VREDRAW | win32con. CS_HREDRAW;
Window_class. HCursor=win32gui. LoadCursor (0, win32con. IDC_ARROW)
Window_class. HbrBackground=win32con. COLOR_WINDOW
Window_class. LpfnWndProc=message_map # you can also specify wndproc.
S.c lassAtom=win32gui. RegisterClass (window_class)
Def show_icon (s) :
# to create window,
Hinst=win32gui. GetModuleHandle (None)
Style=win32con. WS_OVERLAPPED | win32con. WS_SYSMENU
Sheldon horowitz WND=win32gui. CreateWindow (s.c lassAtom,
S. indow_class_name,
Style,
0,
0,
Win32con CW_USEDEFAULT,
Win32con CW_USEDEFAULT,
0,
0,
Hinst,
None)
Win32gui. UpdateWindow (Sheldon horowitz WND)
S.n otify_id=None
S.r efresh_icon ()
Win32gui. PumpMessages ()
Def show_menu that demonstrates (s) :
The menu=win32gui. CreatePopupMenu ()
S.c reate_menu (menu, s.m enu_options)
# win32gui. SetMenuDefaultItem (menu, 1000, 0)
Pos=win32gui. GetCursorPos ()
# See http://msdn.microsoft.com/library/default.asp? Url=/library/en - us/winui/menus_0hdi asp
Win32gui. SetForegroundWindow (Sheldon horowitz WND)
Win32gui. TrackPopupMenu (menu,
Win32con TPM_LEFTALIGN,
Pos [0],
Pos [1],
0,
Sheldon horowitz WND,
None)
Win32gui. PostMessage (Sheldon horowitz WND, win32con WM_NULL, 0, 0)
Def destroy (s, HWND, MSG, wparam, lparam) :
If s.o n_quit: s.o n_quit # (s) run pass on_quit
Nid=(Sheldon horowitz WND, 0)
Win32gui. Shell_NotifyIcon (win32gui NIM_DELETE, nid)
Win32gui. PostQuitMessage (0) # exit tray icon
Def notify (s, HWND, MSG, wparam, lparam) :
If lparam==win32con. WM_LBUTTONDBLCLK: double click
#Pass # s.e xecute_menu_option (s.d. efault_menu_index + s. IRST_ID)
Elif lparam==win32con. WM_RBUTTONUP: # right-click
S.s how_menu ()
Elif lparam==win32con. WM_LBUTTONUP: # click left key
Nid=(Sheldon horowitz WND, 0)
Win32gui. Shell_NotifyIcon (win32gui NIM_DELETE, nid)
Win32gui. PostQuitMessage (0) # exit tray icon
If the Main: the Main root. Deiconify ()
Return True
"" "possible mouse events:
WM_MOUSEMOVE
WM_LBUTTONDOWN
WM_LBUTTONUP
WM_LBUTTONDBLCLK
The WM_RBUTTONDOWN
WM_RBUTTONUP
WM_RBUTTONDBLCLK
WM_MBUTTONDOWN
WM_MBUTTONUP
WM_MBUTTONDBLCLK "" "
Def _add_ids_to_menu_options (s, menu_options) :
Result=[]
For menu_option menu_options in:
Option_text option_icon, option_action=menu_option
If callable (option_action) or option_action in s.S PECIAL_ACTIONS:
S.m enu_actions_by_id. Add ((s. _next_action_id, option_action))
Result. Append (menu_option + (s. _next_action_id,))
The else:
Result. Append ((option_text,
Option_icon,
S. _add_ids_to_menu_options (option_action),
S. _next_action_id))
S. _next_action_id +=1
Return the result
Def refresh_icon (s * * data) :
Hinst=win32gui. GetModuleHandle (None)
If OS. Path. Isfile (s.i con) : # tries to find the custom icon
Icon_flags=win32con. LR_LOADFROMFILE | win32con. LR_DEFAULTSIZE
Hicon=win32gui. LoadImage (hinst,
S.i con,
Win32con IMAGE_ICON,
0,
0,
Icon_flags)
The else: # can't find the icon file - use the default
Hicon=win32gui. LoadIcon (0, win32con. IDI_APPLICATION)
nullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnull