Server IP : 103.119.228.120 / Your IP : 3.145.106.7 Web Server : Apache System : Linux v8.techscape8.com 3.10.0-1160.119.1.el7.tuxcare.els2.x86_64 #1 SMP Mon Jul 15 12:09:18 UTC 2024 x86_64 User : nobody ( 99) PHP Version : 5.6.40 Disable Function : shell_exec,symlink,system,exec,proc_get_status,proc_nice,proc_terminate,define_syslog_variables,syslog,openlog,closelog,escapeshellcmd,passthru,ocinum cols,ini_alter,leak,listen,chgrp,apache_note,apache_setenv,debugger_on,debugger_off,ftp_exec,dl,dll,myshellexec,proc_open,socket_bind,proc_close,escapeshellarg,parse_ini_filepopen,fpassthru,exec,passthru,escapeshellarg,escapeshellcmd,proc_close,proc_open,ini_alter,popen,show_source,proc_nice,proc_terminate,proc_get_status,proc_close,pfsockopen,leak,apache_child_terminate,posix_kill,posix_mkfifo,posix_setpgid,posix_setsid,posix_setuid,dl,symlink,shell_exec,system,dl,passthru,escapeshellarg,escapeshellcmd,myshellexec,c99_buff_prepare,c99_sess_put,fpassthru,getdisfunc,fx29exec,fx29exec2,is_windows,disp_freespace,fx29sh_getupdate,fx29_buff_prepare,fx29_sess_put,fx29shexit,fx29fsearch,fx29ftpbrutecheck,fx29sh_tools,fx29sh_about,milw0rm,imagez,sh_name,myshellexec,checkproxyhost,dosyayicek,c99_buff_prepare,c99_sess_put,c99getsource,c99sh_getupdate,c99fsearch,c99shexit,view_perms,posix_getpwuid,posix_getgrgid,posix_kill,parse_perms,parsesort,view_perms_color,set_encoder_input,ls_setcheckboxall,ls_reverse_all,rsg_read,rsg_glob,selfURL,dispsecinfo,unix2DosTime,addFile,system,get_users,view_size,DirFiles,DirFilesWide,DirPrintHTMLHeaders,GetFilesTotal,GetTitles,GetTimeTotal,GetMatchesCount,GetFileMatchesCount,GetResultFiles,fs_copy_dir,fs_copy_obj,fs_move_dir,fs_move_obj,fs_rmdir,SearchText,getmicrotime MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /lib/mysqlsh/lib/python3.9/idlelib/ |
Upload File : |
"Zoom a window to maximum height." import re import sys import tkinter class WmInfoGatheringError(Exception): pass class ZoomHeight: # Cached values for maximized window dimensions, one for each set # of screen dimensions. _max_height_and_y_coords = {} def __init__(self, editwin): self.editwin = editwin self.top = self.editwin.top def zoom_height_event(self, event=None): zoomed = self.zoom_height() if zoomed is None: self.top.bell() else: menu_status = 'Restore' if zoomed else 'Zoom' self.editwin.update_menu_label(menu='options', index='* Height', label=f'{menu_status} Height') return "break" def zoom_height(self): top = self.top width, height, x, y = get_window_geometry(top) if top.wm_state() != 'normal': # Can't zoom/restore window height for windows not in the 'normal' # state, e.g. maximized and full-screen windows. return None try: maxheight, maxy = self.get_max_height_and_y_coord() except WmInfoGatheringError: return None if height != maxheight: # Maximize the window's height. set_window_geometry(top, (width, maxheight, x, maxy)) return True else: # Restore the window's height. # # .wm_geometry('') makes the window revert to the size requested # by the widgets it contains. top.wm_geometry('') return False def get_max_height_and_y_coord(self): top = self.top screen_dimensions = (top.winfo_screenwidth(), top.winfo_screenheight()) if screen_dimensions not in self._max_height_and_y_coords: orig_state = top.wm_state() # Get window geometry info for maximized windows. try: top.wm_state('zoomed') except tkinter.TclError: # The 'zoomed' state is not supported by some esoteric WMs, # such as Xvfb. raise WmInfoGatheringError( 'Failed getting geometry of maximized windows, because ' + 'the "zoomed" window state is unavailable.') top.update() maxwidth, maxheight, maxx, maxy = get_window_geometry(top) if sys.platform == 'win32': # On Windows, the returned Y coordinate is the one before # maximizing, so we use 0 which is correct unless a user puts # their dock on the top of the screen (very rare). maxy = 0 maxrooty = top.winfo_rooty() # Get the "root y" coordinate for non-maximized windows with their # y coordinate set to that of maximized windows. This is needed # to properly handle different title bar heights for non-maximized # vs. maximized windows, as seen e.g. in Windows 10. top.wm_state('normal') top.update() orig_geom = get_window_geometry(top) max_y_geom = orig_geom[:3] + (maxy,) set_window_geometry(top, max_y_geom) top.update() max_y_geom_rooty = top.winfo_rooty() # Adjust the maximum window height to account for the different # title bar heights of non-maximized vs. maximized windows. maxheight += maxrooty - max_y_geom_rooty self._max_height_and_y_coords[screen_dimensions] = maxheight, maxy set_window_geometry(top, orig_geom) top.wm_state(orig_state) return self._max_height_and_y_coords[screen_dimensions] def get_window_geometry(top): geom = top.wm_geometry() m = re.match(r"(\d+)x(\d+)\+(-?\d+)\+(-?\d+)", geom) return tuple(map(int, m.groups())) def set_window_geometry(top, geometry): top.wm_geometry("{:d}x{:d}+{:d}+{:d}".format(*geometry)) if __name__ == "__main__": from unittest import main main('idlelib.idle_test.test_zoomheight', verbosity=2, exit=False) # Add htest?