(parser)
| 36 | queue = None |
| 37 | |
| 38 | def runGui(parser): |
| 39 | try: |
| 40 | from thirdparty.six.moves import tkinter as _tkinter |
| 41 | from thirdparty.six.moves import tkinter_scrolledtext as _tkinter_scrolledtext |
| 42 | from thirdparty.six.moves import tkinter_ttk as _tkinter_ttk |
| 43 | from thirdparty.six.moves import tkinter_messagebox as _tkinter_messagebox |
| 44 | except ImportError as ex: |
| 45 | raise SqlmapMissingDependence("missing dependence ('%s')" % getSafeExString(ex)) |
| 46 | |
| 47 | # Reference: https://www.reddit.com/r/learnpython/comments/985umy/limit_user_input_to_only_int_with_tkinter/e4dj9k9?utm_source=share&utm_medium=web2x |
| 48 | class ConstrainedEntry(_tkinter.Entry): |
| 49 | def __init__(self, master=None, **kwargs): |
| 50 | self.var = _tkinter.StringVar() |
| 51 | self.regex = kwargs["regex"] |
| 52 | del kwargs["regex"] |
| 53 | _tkinter.Entry.__init__(self, master, textvariable=self.var, **kwargs) |
| 54 | self.old_value = '' |
| 55 | self.var.trace('w', self.check) |
| 56 | self.get, self.set = self.var.get, self.var.set |
| 57 | |
| 58 | def check(self, *args): |
| 59 | if re.search(self.regex, self.get()): |
| 60 | self.old_value = self.get() |
| 61 | else: |
| 62 | self.set(self.old_value) |
| 63 | |
| 64 | try: |
| 65 | window = _tkinter.Tk() |
| 66 | except Exception as ex: |
| 67 | errMsg = "unable to create GUI window ('%s')" % getSafeExString(ex) |
| 68 | raise SqlmapSystemException(errMsg) |
| 69 | |
| 70 | window.title("sqlmap - Tkinter GUI") |
| 71 | |
| 72 | # Set theme and colors |
| 73 | bg_color = "#f5f5f5" |
| 74 | fg_color = "#333333" |
| 75 | accent_color = "#2c7fb8" |
| 76 | window.configure(background=bg_color) |
| 77 | |
| 78 | # Configure styles |
| 79 | style = _tkinter_ttk.Style() |
| 80 | |
| 81 | # Try to use a more modern theme if available |
| 82 | available_themes = style.theme_names() |
| 83 | if 'clam' in available_themes: |
| 84 | style.theme_use('clam') |
| 85 | elif 'alt' in available_themes: |
| 86 | style.theme_use('alt') |
| 87 | |
| 88 | # Configure notebook style |
| 89 | style.configure("TNotebook", background=bg_color) |
| 90 | style.configure("TNotebook.Tab", |
| 91 | padding=[10, 4], |
| 92 | background="#e1e1e1", |
| 93 | font=('Helvetica', 9)) |
| 94 | style.map("TNotebook.Tab", |
| 95 | background=[("selected", accent_color), ("active", "#7fcdbb")], |
no test coverage detected
searching dependent graphs…