diff --git a/PySimpleGUIWx/PySimpleGUIWx.py b/PySimpleGUIWx/PySimpleGUIWx.py index 692e6274..d5e55c95 100644 --- a/PySimpleGUIWx/PySimpleGUIWx.py +++ b/PySimpleGUIWx/PySimpleGUIWx.py @@ -479,6 +479,9 @@ class Element(): self.ParentForm.TKroot.quit() + def WxCallbackKeyboard(self, value): + element_callback_quit_mainloop(self) + def Update(self, widget, background_color=None, text_color=None, font=None, visible=None): if font: widget.SetFont(font_to_wx_font(font)) @@ -542,15 +545,10 @@ class InputText(Element): return - def QtCallbackTextChanged(self, value): - if not self.ChangeSubmits: - return - # if was changed using an "update" call, then skip the next changed callback - if self.ValueWasChanged: - self.ValueWasChanged = False - print('skipping update') - return - element_callback_quit_mainloop(self) + # def WxCallbackKeyboard(self, value): + # if not self.ChangeSubmits: + # return + # element_callback_quit_mainloop(self) def QtCallbackReturnPressed(self): self.ReturnKeyHandler(None) @@ -1068,7 +1066,7 @@ class Multiline(Element): # Text # # ---------------------------------------------------------------------- # class Text(Element): - def __init__(self, text, size=(None, None), auto_size_text=None, click_submits=None, enable_events=False, relief=None, font=None, text_color=None, background_color=None, justification=None, pad=None, margins=None, key=None, tooltip=None, visible=True, size_px=(None,None)): + def __init__(self, text, size=(None, None), auto_size_text=None, click_submits=None, enable_events=False, relief=None, border_width=None, font=None, text_color=None, background_color=None, justification=None, pad=None, margins=None, key=None, tooltip=None, visible=True, size_px=(None,None)): """ Text :param text: @@ -1104,6 +1102,7 @@ class Text(Element): if size[1] is not None and size[1] < 10: pixelsize = size[0]*10, size[1]*20 self.WxStaticText = None # wx.StaticText(form.MasterPanel, -1, element.DisplayText) + self.BorderWidth = border_width if border_width is not None else DEFAULT_BORDER_WIDTH super().__init__(ELEM_TYPE_TEXT, pixelsize, auto_size_text, background_color=bg, font=font if font else DEFAULT_FONT, text_color=self.TextColor, pad=pad, key=key, tooltip=tooltip, size_px=size_px) @@ -1476,7 +1475,7 @@ class Button(Element): if self.ParentForm.NonBlocking: Window.DecrementOpenCount() self.ParentForm._Close() - elif self.BType == BUTTON_TYPE_READ_FORM: # LEAVE THE WINDOW OPEN!! DO NOT CLOSE + elif self.BType == BUTTON_TYPE_READ_FORM: # Read Button # first, get the results table built # modify the Results table in the parent FlexForm object if self.Key is not None: @@ -3505,7 +3504,7 @@ def element_callback_quit_mainloop(element): element.ParentForm.LastButtonClicked = '' element.ParentForm.FormRemainedOpen = True if element.ParentForm.CurrentlyRunningMainloop: - element.ParentForm.QTApplication.exit() # kick the users out of the mainloop + element.ParentForm.App.ExitMainLoop() # kick the users out of the mainloop def quit_mainloop(window): @@ -4359,7 +4358,25 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form): # highlightcolor=element.BackgroundColor) # ------------------------- TEXT element ------------------------- # elif element_type == ELEM_TYPE_TEXT: - statictext = element.WxStaticText = wx.StaticText(form.MasterPanel, -1, element.DisplayText) + if element.Justification is not None: + justification = element.Justification + elif toplevel_form.TextJustification is not None: + justification = toplevel_form.TextJustification + else: + justification = DEFAULT_TEXT_JUSTIFICATION + style = wx.ALIGN_LEFT if justification.startswith('l') else wx.ALIGN_CENTER if justification.startswith('c') else wx.ALIGN_RIGHT + print(border_depth, element.BorderWidth) + if border_depth: + if element.Relief: + if element.Relief in (RELIEF_SOLID, RELIEF_FLAT): + style |= wx.SIMPLE_BORDER + elif element.Relief == RELIEF_SUNKEN: + style |= wx.SUNKEN_BORDER + elif element.Relief in(RELIEF_RAISED, RELIEF_RIDGE): + style |= wx.RAISED_BORDER + elif element.Relief in (RELIEF_SUNKEN, RELIEF_SUNKEN): + style |= wx.SUNKEN_BORDER + statictext = element.WxStaticText = wx.StaticText(form.MasterPanel, -1, element.DisplayText, style=style) if font: statictext.SetFont(font_to_wx_font(font)) if element.TextColor not in (None, COLOR_SYSTEM_DEFAULT): @@ -4379,27 +4396,20 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form): width = max_line_len height = num_lines + if element.ClickSubmits: + statictext.Bind(wx.EVT_LEFT_UP, element.WxCallbackKeyboard) + hsizer.Add(pad_widget(element.WxStaticText), 0) if not auto_size_text: statictext.SetMinSize((width,height)) + if element.Tooltip: statictext.SetToolTip(element.Tooltip) if not element.Visible: statictext.Hide() - # ---===--- LABEL widget create and place --- # - # stringvar = tk.StringVar() - # element.TKStringVar = stringvar - # stringvar.set(display_text) - # if auto_size_text: - # width = 0 - # if element.Justification is not None: - # justification = element.Justification - # elif toplevel_form.TextJustification is not None: - # justification = toplevel_form.TextJustification - # else: - # justification = DEFAULT_TEXT_JUSTIFICATION - # justify = tk.LEFT if justification == 'left' else tk.CENTER if justification == 'center' else tk.RIGHT + + # anchor = tk.NW if justification == 'left' else tk.N if justification == 'center' else tk.NE # tktext_label = tk.Label(tk_row_frame, textvariable=stringvar, width=width, height=height, # justify=justify, bd=border_depth, font=font) @@ -4460,6 +4470,9 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form): if not element.Visible: button.Hide() + if element.Tooltip: + button.SetToolTip(element.Tooltip) + # border_depth = element.BorderWidth # if btype != BUTTON_TYPE_REALTIME: @@ -4517,53 +4530,44 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form): # # ------------------------- INPUT element ------------------------- # elif element_type == ELEM_TYPE_INPUT_TEXT: - element.WxTextControl = text_ctrl = wx.TextCtrl(form.MasterPanel) + if element.Justification is not None: + justification = element.Justification + elif toplevel_form.TextJustification is not None: + justification = toplevel_form.TextJustification + else: + justification = DEFAULT_TEXT_JUSTIFICATION + justify = wx.ALIGN_LEFT if justification.startswith('l') else wx.ALIGN_CENTER_HORIZONTAL if justification.startswith('c') else wx.ALIGN_RIGHT + if element.PasswordCharacter: + justify |= wx.TE_PASSWORD + print(f'justify = {justify:0x}') + element.WxTextControl = text_ctrl = wx.TextCtrl(form.MasterPanel, style=justify) + if element.DefaultText: + text_ctrl.SetValue(element.DefaultText) if font: text_ctrl.SetFont(font_to_wx_font(font)) if element.TextColor not in (None, COLOR_SYSTEM_DEFAULT): text_ctrl.SetForegroundColour(element.TextColor) if element.BackgroundColor not in (None, COLOR_SYSTEM_DEFAULT): text_ctrl.SetBackgroundColour(element.BackgroundColor) - text_ctrl.SetMinSize(element_size) - if element.Disabled: text_ctrl.Enable(False) - + if element.ChangeSubmits: + text_ctrl.Bind(wx.EVT_KEY_UP, element.WxCallbackKeyboard) sizer = pad_widget(text_ctrl) + hsizer.Add(sizer, 0) if not element.Visible: text_ctrl.Hide() + if element.Tooltip: + text_ctrl.SetToolTip(element.Tooltip) + if element.Focus is True or (toplevel_form.UseDefaultFocus and not focus_set): + focus_set = True + element.SetFocus() - # default_text = element.DefaultText - # element.TKStringVar = tk.StringVar() - # element.TKStringVar.set(default_text) - # show = element.PasswordCharacter if element.PasswordCharacter else "" - # if element.Justification is not None: - # justification = element.Justification - # else: - # justification = DEFAULT_TEXT_JUSTIFICATION - # justify = tk.LEFT if justification == 'left' else tk.CENTER if justification == 'center' else tk.RIGHT - # # anchor = tk.NW if justification == 'left' else tk.N if justification == 'center' else tk.NE - # element.TKEntry = tk.Entry(tk_row_frame, width=element_size[0], textvariable=element.TKStringVar, - # bd=border_depth, font=font, show=show, justify=justify) - # if element.ChangeSubmits: - # element.TKEntry.bind('', element.KeyboardHandler) # element.TKEntry.bind('', element.ReturnKeyHandler) - # if element.BackgroundColor is not None and element.BackgroundColor != COLOR_SYSTEM_DEFAULT: - # element.TKEntry.configure(background=element.BackgroundColor) - # if text_color is not None and text_color != COLOR_SYSTEM_DEFAULT: - # element.TKEntry.configure(fg=text_color) - # element.TKEntry.pack(side=tk.LEFT, padx=element.Pad[0], pady=element.Pad[1], expand=True, fill='x') - # if element.Focus is True or (toplevel_form.UseDefaultFocus and not focus_set): - # focus_set = True - # element.TKEntry.focus_set() - # if element.Disabled: - # element.TKEntry['state'] = 'disabled' - # if element.Tooltip is not None: - # element.TooltipObject = ToolTip(element.TKEntry, text=element.Tooltip, timeout=DEFAULT_TOOLTIP_TIME) # ------------------------- COMBO BOX (Drop Down) element ------------------------- # elif element_type == ELEM_TYPE_INPUT_COMBO: pass @@ -5244,13 +5248,6 @@ def StartupTK(window): pass #TODO make moveable - # if not window.Resizable: - # root.resizable(False, False) - - # if window.KeepOnTop: - # root.wm_attributes("-topmost", 1) - - InitializeResults(window) if window.NoTitleBar: @@ -5258,12 +5255,6 @@ def StartupTK(window): if window.KeepOnTop: window.MasterFrame.ToggleWindowStyle(wx.STAY_ON_TOP) - # if flags: - # window.MasterFrame.SetWindowStyleFlag(flags) - - # else: - # window.MasterFrame.SetWindowStyleFlag(0) - vsizer = wx.BoxSizer(wx.VERTICAL) PackFormIntoFrame(window, vsizer, window) @@ -6761,7 +6752,7 @@ def PopupGetText(message, title=None, default_text='', password_char='', size=(N def main(): layout = [[Text('TEXT1',tooltip='Tooltip'), Text('TEXT2', )], - [Text('You should be importing it rather than running it', justification='r', size=(50, 1))], + [Text('You should be importing it rather than running it', justification='l', size=(50, 1))], [Text('Here is your sample input window....')], [Text('Source Folder', size=(15, 1), justification='right'), InputText('Source', focus=True), FileBrowse()],