Merge pull request #1043 from PySimpleGUI/Dev-latest
Input and Text enable_events, Text justification & relief, Input just…
This commit is contained in:
commit
2d2827d5d8
|
@ -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('<Key>', element.KeyboardHandler)
|
||||
# element.TKEntry.bind('<Return>', 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()],
|
||||
|
|
Loading…
Reference in New Issue