66"""
77
88import re
9- import tkinter as tk
109import webbrowser
1110
11+ from lib .core .common import getSafeExString
1212from lib .core .defaults import defaults
13+ from lib .core .exception import SqlmapMissingDependence
1314from lib .core .settings import DEV_EMAIL_ADDRESS
1415from lib .core .settings import ISSUES_PAGE
1516from lib .core .settings import GIT_PAGE
1617from lib .core .settings import SITE
1718from lib .core .settings import VERSION_STRING
1819from lib .core .settings import WIKI_PAGE
1920from thirdparty .six .moves import tkinter_messagebox as _tkinter_messagebox
20- from tkinter import ttk
2121
2222def runGui (parser ):
23+ try :
24+ import tkinter
25+ import tkinter .ttk
26+ except ImportError as ex :
27+ raise SqlmapMissingDependence ("missing dependence ('%s')" % getSafeExString (ex ))
28+
2329 # Reference: https://www.reddit.com/r/learnpython/comments/985umy/limit_user_input_to_only_int_with_tkinter/e4dj9k9?utm_source=share&utm_medium=web2x
24- class ConstrainedEntry (tk .Entry ):
30+ class ConstrainedEntry (tkinter .Entry ):
2531 def __init__ (self , master = None , ** kwargs ):
26- self .var = tk .StringVar ()
32+ self .var = tkinter .StringVar ()
2733 self .regex = kwargs ["regex" ]
2834 del kwargs ["regex" ]
29- tk .Entry .__init__ (self , master , textvariable = self .var , ** kwargs )
35+ tkinter .Entry .__init__ (self , master , textvariable = self .var , ** kwargs )
3036 self .old_value = ''
3137 self .var .trace ('w' , self .check )
3238 self .get , self .set = self .var .get , self .var .set
@@ -38,9 +44,9 @@ def check(self, *args):
3844 self .set (self .old_value )
3945
4046 # Reference: https://code.activestate.com/recipes/580726-tkinter-notebook-that-fits-to-the-height-of-every-/
41- class AutoresizableNotebook (ttk .Notebook ):
47+ class AutoresizableNotebook (tkinter . ttk .Notebook ):
4248 def __init__ (self , master = None , ** kw ):
43- ttk .Notebook .__init__ (self , master , ** kw )
49+ tkinter . ttk .Notebook .__init__ (self , master , ** kw )
4450 self .bind ("<<NotebookTabChanged>>" , self ._on_tab_changed )
4551
4652 def _on_tab_changed (self ,event ):
@@ -49,30 +55,30 @@ def _on_tab_changed(self,event):
4955 tab = event .widget .nametowidget (event .widget .select ())
5056 event .widget .configure (height = tab .winfo_reqheight ())
5157
52- window = tk .Tk ()
58+ window = tkinter .Tk ()
5359 window .title (VERSION_STRING )
5460
5561 # Reference: https://www.holadevs.com/pregunta/64750/change-selected-tab-color-in-ttknotebook
56- style = ttk .Style ()
62+ style = tkinter . ttk .Style ()
5763 settings = {"TNotebook.Tab" : {"configure" : {"padding" : [5 , 1 ], "background" : "#fdd57e" }, "map" : {"background" : [("selected" , "#C70039" ), ("active" , "#fc9292" )], "foreground" : [("selected" , "#ffffff" ), ("active" , "#000000" )]}}}
5864 style .theme_create ("custom" , parent = "alt" , settings = settings )
5965 style .theme_use ("custom" )
6066
6167 def dummy ():
6268 pass
6369
64- menubar = tk .Menu (window )
70+ menubar = tkinter .Menu (window )
6571
66- filemenu = tk .Menu (menubar , tearoff = 0 )
67- filemenu .add_command (label = "Open" , command = dummy , state = tk .DISABLED )
68- filemenu .add_command (label = "Save" , command = dummy , state = tk .DISABLED )
72+ filemenu = tkinter .Menu (menubar , tearoff = 0 )
73+ filemenu .add_command (label = "Open" , command = dummy , state = tkinter .DISABLED )
74+ filemenu .add_command (label = "Save" , command = dummy , state = tkinter .DISABLED )
6975 filemenu .add_separator ()
7076 filemenu .add_command (label = "Exit" , command = window .quit )
7177 menubar .add_cascade (label = "File" , menu = filemenu )
7278
7379 menubar .add_command (label = "Run" , command = window .quit )
7480
75- helpmenu = tk .Menu (menubar , tearoff = 0 )
81+ helpmenu = tkinter .Menu (menubar , tearoff = 0 )
7682 helpmenu .add_command (label = "Official site" , command = lambda : webbrowser .open (SITE ))
7783 helpmenu .add_command (label = "Github pages" , command = lambda : webbrowser .open (GIT_PAGE ))
7884 helpmenu .add_command (label = "Wiki pages" , command = lambda : webbrowser .open (WIKI_PAGE ))
@@ -88,44 +94,44 @@ def dummy():
8894 first = None
8995 frames = {}
9096 for group in parser .option_groups :
91- frame = frames [group .title ] = tk .Frame (notebook , width = 200 , height = 200 )
97+ frame = frames [group .title ] = tkinter .Frame (notebook , width = 200 , height = 200 )
9298 notebook .add (frames [group .title ], text = group .title )
9399
94- tk .Label (frame ).grid (column = 0 , row = 0 , sticky = tk .W )
100+ tkinter .Label (frame ).grid (column = 0 , row = 0 , sticky = tkinter .W )
95101
96102 row = 1
97103 if group .get_description ():
98- tk .Label (frame , text = "%s:" % group .get_description ()).grid (column = 0 , row = 1 , columnspan = 3 , sticky = tk .W )
99- tk .Label (frame ).grid (column = 0 , row = 2 , sticky = tk .W )
104+ tkinter .Label (frame , text = "%s:" % group .get_description ()).grid (column = 0 , row = 1 , columnspan = 3 , sticky = tkinter .W )
105+ tkinter .Label (frame ).grid (column = 0 , row = 2 , sticky = tkinter .W )
100106 row += 2
101107
102108 for option in group .option_list :
103- tk .Label (frame , text = "%s " % parser .formatter ._format_option_strings (option )).grid (column = 0 , row = row , sticky = tk .W )
109+ tkinter .Label (frame , text = "%s " % parser .formatter ._format_option_strings (option )).grid (column = 0 , row = row , sticky = tkinter .W )
104110
105111 if option .type == "string" :
106- widget = tk .Entry (frame )
112+ widget = tkinter .Entry (frame )
107113 elif option .type == "float" :
108114 widget = ConstrainedEntry (frame , regex = r"\A\d*\.?\d*\Z" )
109115 elif option .type == "int" :
110116 widget = ConstrainedEntry (frame , regex = r"\A\d*\Z" )
111117 else :
112- var = tk .IntVar ()
113- widget = tk .Checkbutton (frame , variable = var )
118+ var = tkinter .IntVar ()
119+ widget = tkinter .Checkbutton (frame , variable = var )
114120 widget .var = var
115121
116122 first = first or widget
117- widget .grid (column = 1 , row = row , sticky = tk .W )
123+ widget .grid (column = 1 , row = row , sticky = tkinter .W )
118124
119125 default = defaults .get (option .dest )
120126 if default :
121127 if hasattr (widget , "insert" ):
122128 widget .insert (0 , default )
123129
124- tk .Label (frame , text = " %s" % option .help ).grid (column = 2 , row = row , sticky = tk .W )
130+ tkinter .Label (frame , text = " %s" % option .help ).grid (column = 2 , row = row , sticky = tkinter .W )
125131
126132 row += 1
127133
128- tk .Label (frame ).grid (column = 0 , row = row , sticky = tk .W )
134+ tkinter .Label (frame ).grid (column = 0 , row = row , sticky = tkinter .W )
129135
130136 notebook .pack (expand = 1 , fill = "both" )
131137 notebook .enable_traversal ()
0 commit comments