Merge pull request #1110 from PySimpleGUI/Dev-latest

Dev latest
This commit is contained in:
MikeTheWatchGuy 2019-01-24 02:42:12 -05:00 committed by GitHub
commit 84372b5db7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 162 additions and 112 deletions

View File

@ -129,15 +129,18 @@ DEFAULT_SLIDER_BORDER_WIDTH = 1
DEFAULT_SLIDER_RELIEF = 00000 DEFAULT_SLIDER_RELIEF = 00000
DEFAULT_FRAME_RELIEF = 00000 DEFAULT_FRAME_RELIEF = 00000
DEFAULT_LISTBOX_SELECT_MODE = 00000
SELECT_MODE_MULTIPLE = 00000 DEFAULT_LISTBOX_SELECT_MODE = 'extended'
SELECT_MODE_MULTIPLE = 'multiple'
LISTBOX_SELECT_MODE_MULTIPLE = 'multiple' LISTBOX_SELECT_MODE_MULTIPLE = 'multiple'
SELECT_MODE_BROWSE = 00000 SELECT_MODE_BROWSE = 'browse'
LISTBOX_SELECT_MODE_BROWSE = 'browse' LISTBOX_SELECT_MODE_BROWSE = 'browse'
SELECT_MODE_EXTENDED =00000 SELECT_MODE_EXTENDED = 'extended'
LISTBOX_SELECT_MODE_EXTENDED = 'extended' LISTBOX_SELECT_MODE_EXTENDED = 'extended'
SELECT_MODE_SINGLE = 00000 SELECT_MODE_SINGLE = 'single'
LISTBOX_SELECT_MODE_SINGLE = 'single' LISTBOX_SELECT_MODE_SINGLE = 'single'
SELECT_MODE_CONTIGUOUS = 'contiguous'
LISTBOX_SELECT_MODE_CONTIGUOUS = 'contiguous'
TABLE_SELECT_MODE_NONE = 00000 TABLE_SELECT_MODE_NONE = 00000
TABLE_SELECT_MODE_BROWSE = 00000 TABLE_SELECT_MODE_BROWSE = 00000
@ -494,7 +497,8 @@ class Element():
class InputText(Element): class InputText(Element):
def __init__(self, default_text='', size=(None, None), disabled=False, password_char='', def __init__(self, default_text='', size=(None, None), disabled=False, password_char='',
justification=None, background_color=None, text_color=None, font=None, tooltip=None, justification=None, background_color=None, text_color=None, font=None, tooltip=None,
change_submits=False, do_not_clear=False, key=None, focus=False, pad=None): change_submits=False, enable_events=False,
do_not_clear=False, key=None, focus=False, pad=None, visible=True, size_px=(None, None)):
''' '''
Input a line of text Element Input a line of text Element
:param default_text: Default value to display :param default_text: Default value to display
@ -508,12 +512,14 @@ class InputText(Element):
fg = text_color if text_color is not None else DEFAULT_INPUT_TEXT_COLOR fg = text_color if text_color is not None else DEFAULT_INPUT_TEXT_COLOR
self.Focus = focus self.Focus = focus
self.do_not_clear = do_not_clear self.do_not_clear = do_not_clear
self.Justification = justification self.Justification = justification or 'left'
self.Disabled = disabled self.Disabled = disabled
self.ChangeSubmits = change_submits self.ChangeSubmits = change_submits or enable_events
self.Widget = None # type: remi.gui.TextInput self.QT_QLineEdit = None
self.ValueWasChanged = False
self.Widget = None # type: remi.gui.TextInput
super().__init__(ELEM_TYPE_INPUT_TEXT, size=size, background_color=bg, text_color=fg, key=key, pad=pad, super().__init__(ELEM_TYPE_INPUT_TEXT, size=size, background_color=bg, text_color=fg, key=key, pad=pad,
font=font, tooltip=tooltip) font=font, tooltip=tooltip, visible=visible, size_px=size_px)
def Update(self, value=None, disabled=None): def Update(self, value=None, disabled=None):
if disabled is True: if disabled is True:
@ -548,10 +554,10 @@ Input = InputText
# ---------------------------------------------------------------------- # # ---------------------------------------------------------------------- #
# Combo # # Combo #
# ---------------------------------------------------------------------- # # ---------------------------------------------------------------------- #
class InputCombo(Element): class Combo(Element):
def __init__(self, values, default_value=None, size=(None, None), auto_size_text=None, background_color=None, def __init__(self, values, default_value=None, size=(None, None), auto_size_text=None, background_color=None,
text_color=None, change_submits=False, disabled=False, key=None, pad=None, tooltip=None, text_color=None, change_submits=False, enable_events=False, disabled=False, key=None, pad=None, tooltip=None,
readonly=False, font=None): readonly=False, visible_items=10, font=None, auto_complete=True, visible=True, size_px=(None,None)):
''' '''
Input Combo Box Element (also called Dropdown box) Input Combo Box Element (also called Dropdown box)
:param values: :param values:
@ -561,63 +567,52 @@ class InputCombo(Element):
''' '''
self.Values = values self.Values = values
self.DefaultValue = default_value self.DefaultValue = default_value
self.ChangeSubmits = change_submits self.ChangeSubmits = change_submits or enable_events
self.TKCombo = None
# self.InitializeAsDisabled = disabled # self.InitializeAsDisabled = disabled
self.Disabled = disabled self.Disabled = disabled
self.Readonly = readonly self.Readonly = readonly
bg = background_color if background_color else DEFAULT_INPUT_ELEMENTS_COLOR bg = background_color if background_color else DEFAULT_INPUT_ELEMENTS_COLOR
fg = text_color if text_color is not None else DEFAULT_INPUT_TEXT_COLOR fg = text_color if text_color is not None else DEFAULT_INPUT_TEXT_COLOR
self.VisibleItems = visible_items
self.AutoComplete = auto_complete
self.Widget = None # type: remi.gui.DropDown
super().__init__(ELEM_TYPE_INPUT_COMBO, size=size, auto_size_text=auto_size_text, background_color=bg, super().__init__(ELEM_TYPE_INPUT_COMBO, size=size, auto_size_text=auto_size_text, background_color=bg,
text_color=fg, key=key, pad=pad, tooltip=tooltip, font=font or DEFAULT_FONT) text_color=fg, key=key, pad=pad, tooltip=tooltip, font=font or DEFAULT_FONT, visible=visible, size_px=size_px)
def Update(self, value=None, values=None, set_to_index=None, disabled=None, readonly=None, font=None):
def QtCurrentItemChanged(self, state):
if self.ChangeSubmits:
element_callback_quit_mainloop(self)
def Update(self, value=None, values=None, set_to_index=None, disabled=None, readonly=None, background_color=None, text_color=None, font=None, visible=None):
if values is not None: if values is not None:
try: self.WxComboBox.Set(values)
self.TKCombo['values'] = values if value:
self.TKCombo.current(0) self.WxComboBox.SetSelection(self.WxComboBox.FindString(value))
except:
pass
self.Values = values
if value is not None:
for index, v in enumerate(self.Values):
if v == value:
try:
self.TKCombo.current(index)
except:
pass
self.DefaultValue = value
break
if set_to_index is not None: if set_to_index is not None:
try: self.WxComboBox.SetSelection(set_to_index)
self.TKCombo.current(set_to_index) if disabled is True:
self.DefaultValue = self.Values[set_to_index] self.WxComboBox.Enable(False)
except: elif disabled is False:
pass self.WxComboBox.Enable(True)
if disabled == True: if readonly is not None:
self.TKCombo['state'] = 'disable' self.WxComboBox.SetWindowStyle(wx.CB_READONLY)
elif disabled == False:
self.TKCombo['state'] = 'enable' super().Update(self.WxComboBox, background_color=background_color, text_color=text_color, font=font, visible=visible)
if readonly is not None:
self.Readonly = readonly
if self.Readonly:
self.TKCombo['state'] = 'readonly'
if font is not None:
self.TKText.configure(font=font)
def __del__(self): def __del__(self):
try:
self.TKCombo.__del__()
except:
pass
super().__del__() super().__del__()
# ------------------------- INPUT COMBO Element lazy functions ------------------------- # # ------------------------- INPUT COMBO Element lazy functions ------------------------- #
Combo = InputCombo InputCombo = Combo
DropDown = InputCombo DropDown = Combo
Drop = InputCombo Drop = Combo
# ---------------------------------------------------------------------- # # ---------------------------------------------------------------------- #
@ -678,13 +673,13 @@ class OptionMenu(Element):
InputOptionMenu = OptionMenu InputOptionMenu = OptionMenu
# ---------------------------------------------------------------------- # # ---------------------------------------------------------------------- #
# Listbox # # Listbox #
# ---------------------------------------------------------------------- # # ---------------------------------------------------------------------- #
class Listbox(Element): class Listbox(Element):
def __init__(self, values, default_values=None, select_mode=None, change_submits=False, bind_return_key=False, def __init__(self, values, default_values=None, select_mode=None, change_submits=False, enable_events=False, bind_return_key=False, size=(None, None), disabled=False, auto_size_text=None, font=None, background_color=None,
size=(None, None), disabled=False, auto_size_text=None, font=None, background_color=None, text_color=None, key=None, pad=None, tooltip=None, visible=True, size_px=(None,None)):
text_color=None, key=None, pad=None, tooltip=None):
''' '''
Listbox Element Listbox Element
:param values: :param values:
@ -705,7 +700,7 @@ class Listbox(Element):
self.Values = values self.Values = values
self.DefaultValues = default_values self.DefaultValues = default_values
self.TKListbox = None self.TKListbox = None
self.ChangeSubmits = change_submits self.ChangeSubmits = change_submits or enable_events
self.BindReturnKey = bind_return_key self.BindReturnKey = bind_return_key
self.Disabled = disabled self.Disabled = disabled
if select_mode == LISTBOX_SELECT_MODE_BROWSE: if select_mode == LISTBOX_SELECT_MODE_BROWSE:
@ -716,48 +711,55 @@ class Listbox(Element):
self.SelectMode = SELECT_MODE_MULTIPLE self.SelectMode = SELECT_MODE_MULTIPLE
elif select_mode == LISTBOX_SELECT_MODE_SINGLE: elif select_mode == LISTBOX_SELECT_MODE_SINGLE:
self.SelectMode = SELECT_MODE_SINGLE self.SelectMode = SELECT_MODE_SINGLE
elif select_mode == LISTBOX_SELECT_MODE_CONTIGUOUS:
self.SelectMode = SELECT_MODE_CONTIGUOUS
else: else:
self.SelectMode = DEFAULT_LISTBOX_SELECT_MODE self.SelectMode = DEFAULT_LISTBOX_SELECT_MODE
bg = background_color if background_color else DEFAULT_INPUT_ELEMENTS_COLOR bg = background_color if background_color else DEFAULT_INPUT_ELEMENTS_COLOR
fg = text_color if text_color is not None else DEFAULT_INPUT_TEXT_COLOR fg = text_color if text_color is not None else DEFAULT_INPUT_TEXT_COLOR
self.Widget = None # type: remi.gui.ListView
tsize = size # convert tkinter size to pixels
if size[0] is not None and size[0] < 100:
tsize = size[0]*DEFAULT_PIXELS_TO_CHARS_SCALING[0], size[1]*DEFAULT_PIXELS_TO_CHARS_SCALING[1]
super().__init__(ELEM_TYPE_INPUT_LISTBOX, size=size, auto_size_text=auto_size_text, font=font, super().__init__(ELEM_TYPE_INPUT_LISTBOX, size=tsize, auto_size_text=auto_size_text, font=font,
background_color=bg, text_color=fg, key=key, pad=pad, tooltip=tooltip) background_color=bg, text_color=fg, key=key, pad=pad, tooltip=tooltip, visible=visible, size_px=size_px)
def Update(self, values=None, disabled=None): def QtCurrentRowChanged(self, state):
if disabled == True: if self.ChangeSubmits:
self.TKListbox.configure(state='disabled') element_callback_quit_mainloop(self)
elif disabled == False:
self.TKListbox.configure(state='normal')
def Update(self, values=None, disabled=None, set_to_index=None,background_color=None, text_color=None, font=None, visible=None):
if values is not None: if values is not None:
self.TKListbox.delete(0, 'end')
for item in values:
self.TKListbox.insert(tk.END, item)
self.TKListbox.selection_set(0, 0)
self.Values = values self.Values = values
for i in range(self.QT_ListWidget.count()):
self.QT_ListWidget.takeItem(0)
self.QT_ListWidget.addItems(values)
if disabled == True:
self.QT_ListWidget.setDisabled(True)
elif disabled == False:
self.QT_ListWidget.setDisabled(False)
if set_to_index is not None:
self.QT_ListWidget.setCurrentRow(set_to_index)
super().Update(self.QT_ListWidget, background_color=background_color, text_color=text_color, font=font, visible=visible)
return
def SetValue(self, values): def SetValue(self, values):
for index, item in enumerate(self.Values): # for index, item in enumerate(self.Values):
try: for index, value in enumerate(self.Values):
if item in values: item = self.QT_ListWidget.item(index)
self.TKListbox.selection_set(index) if value in values:
else: self.QT_ListWidget.setItemSelected(item, True)
self.TKListbox.selection_clear(index)
except:
pass
self.DefaultValues = values
def GetListValues(self): def GetListValues(self):
return self.Values return self.Values
def __del__(self): def __del__(self):
try:
self.TKListBox.__del__()
except:
pass
super().__del__() super().__del__()
# ---------------------------------------------------------------------- # # ---------------------------------------------------------------------- #
# Radio # # Radio #
# ---------------------------------------------------------------------- # # ---------------------------------------------------------------------- #
@ -820,7 +822,7 @@ class Radio(Element):
# ---------------------------------------------------------------------- # # ---------------------------------------------------------------------- #
class Checkbox(Element): class Checkbox(Element):
def __init__(self, text, default=False, size=(None, None), auto_size_text=None, font=None, background_color=None, def __init__(self, text, default=False, size=(None, None), auto_size_text=None, font=None, background_color=None,
text_color=None, change_submits=False, disabled=False, key=None, pad=None, tooltip=None): text_color=None, change_submits=False, enable_events=False, disabled=False, key=None, pad=None, tooltip=None, visible=True, size_px=(None,None)):
''' '''
Checkbox Element Checkbox Element
:param text: :param text:
@ -838,35 +840,35 @@ class Checkbox(Element):
''' '''
self.Text = text self.Text = text
self.InitialState = default self.InitialState = default
self.Value = None
self.TKCheckbutton = None
self.Disabled = disabled self.Disabled = disabled
self.TextColor = text_color if text_color else DEFAULT_TEXT_COLOR self.TextColor = text_color if text_color else DEFAULT_TEXT_COLOR
self.ChangeSubmits = change_submits self.ChangeSubmits = change_submits or enable_events
self.Widget = None # type: remi.gui.CheckBox
super().__init__(ELEM_TYPE_INPUT_CHECKBOX, size=size, auto_size_text=auto_size_text, font=font, super().__init__(ELEM_TYPE_INPUT_CHECKBOX, size=size, auto_size_text=auto_size_text, font=font,
background_color=background_color, text_color=self.TextColor, key=key, pad=pad, background_color=background_color, text_color=self.TextColor, key=key, pad=pad,
tooltip=tooltip) tooltip=tooltip, visible=visible, size_px=size_px)
def Get(self): def Get(self):
return self.TKIntVar.get() return self.WxCheckbox.GetValue()
def Update(self, value=None, disabled=None): def Update(self, value=None, disabled=None):
if value is not None: if value is not None:
try: try:
self.TKIntVar.set(value) self.WxCheckbox.SetValue(value)
self.InitialState = value self.InitialState = value
except: except:
pass pass
if disabled == True: if disabled == True:
self.TKCheckbutton.configure(state='disabled') self.WxCheckbox.Disable()
elif disabled == False: elif disabled == False:
self.TKCheckbutton.configure(state='normal') self.WxCheckbox.Enable()
def __del__(self): def __del__(self):
super().__del__() super().__del__()
# ------------------------- CHECKBOX Element lazy functions ------------------------- # # ------------------------- CHECKBOX Element lazy functions ------------------------- #
CB = Checkbox CB = Checkbox
CBox = Checkbox CBox = Checkbox
@ -2999,6 +3001,7 @@ class Window:
def Close(self): def Close(self):
self.App.close() self.App.close()
if self.TKrootDestroyed: if self.TKrootDestroyed:
return return
# try: # try:
@ -3114,14 +3117,15 @@ class Window:
logging.getLogger('remi.server').disabled = True logging.getLogger('remi.server').disabled = True
logging.getLogger('remi.request').disabled = True logging.getLogger('remi.request').disabled = True
# use this code to start the application instead of the **start** call # use this code to start the application instead of the **start** call
s = remi.Server(self.MyApp, start=True, title=self.Title, address='0.0.0.0', port=8081, start_browser=True, userdata=(self,), multiple_instance=False, update_interval=.001) # s = remi.Server(self.MyApp, start=True, title=self.Title, address='0.0.0.0', port=8081, start_browser=True, userdata=(self,), multiple_instance=False, update_interval=.001)
# logging.getLogger('remi').setLevel(level=logging.CRITICAL) # logging.getLogger('remi').setLevel(level=logging.CRITICAL)
# logging.getLogger('remi').disabled = True # logging.getLogger('remi').disabled = True
# logging.disable(logging.CRITICAL) # logging.disable(logging.CRITICAL)
# remi.start(self.MyApp, title=self.Title ,debug=False, address='0.0.0.0', port=0, start_browser=True, userdata=(self,)) # standalone=True) remi.start(self.MyApp, title=self.Title ,debug=False, address='0.0.0.0', port=0, start_browser=True, userdata=(self,)) # standalone=True)
self.MessageQueue.put(None) self.MessageQueue.put(None)
class MyApp(remi.App): class MyApp(remi.App):
def __init__(self,*args): def __init__(self,*args):
# self.window = window # type: Window # self.window = window # type: Window
@ -3592,8 +3596,8 @@ def BuildResultsForSubform(form, initialize_only, top_level_form):
if not top_level_form.NonBlocking and not element.do_not_clear and not top_level_form.ReturnKeyboardEvents: if not top_level_form.NonBlocking and not element.do_not_clear and not top_level_form.ReturnKeyboardEvents:
element.Widget.set_value('') element.Widget.set_value('')
elif element.Type == ELEM_TYPE_INPUT_CHECKBOX: elif element.Type == ELEM_TYPE_INPUT_CHECKBOX:
value = element.TKIntVar.get() element = element # type: Checkbox
value = (value != 0) value = element.Widget.get_value()
elif element.Type == ELEM_TYPE_INPUT_RADIO: elif element.Type == ELEM_TYPE_INPUT_RADIO:
RadVar = element.TKIntVar.get() RadVar = element.TKIntVar.get()
this_rowcol = EncodeRadioRowCol(row_num, col_num) this_rowcol = EncodeRadioRowCol(row_num, col_num)
@ -3614,15 +3618,15 @@ def BuildResultsForSubform(form, initialize_only, top_level_form):
except: except:
value = None value = None
elif element.Type == ELEM_TYPE_INPUT_COMBO: elif element.Type == ELEM_TYPE_INPUT_COMBO:
value = element.TKStringVar.get() element = element # type: Combo
value = element.Widget.get_value()
elif element.Type == ELEM_TYPE_INPUT_OPTION_MENU: elif element.Type == ELEM_TYPE_INPUT_OPTION_MENU:
value = element.TKStringVar.get() value = element.TKStringVar.get()
elif element.Type == ELEM_TYPE_INPUT_LISTBOX: elif element.Type == ELEM_TYPE_INPUT_LISTBOX:
try: element = element # type: Listbox
items = element.TKListbox.curselection() value = element.Widget.get_value()
value = [element.Values[int(item)] for item in items] # items = element.TKListbox.curselection()
except: # value = [element.Values[int(item)] for item in items]
value = ''
elif element.Type == ELEM_TYPE_INPUT_SPIN: elif element.Type == ELEM_TYPE_INPUT_SPIN:
try: try:
value = element.TKStringVar.get() value = element.TKStringVar.get()
@ -3907,6 +3911,7 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
# if not auto_size_text: # if not auto_size_text:
widget.style['height'] = '{}px'.format(size[1]) widget.style['height'] = '{}px'.format(size[1])
widget.style['width'] = '{}px'.format(size[0]) widget.style['width'] = '{}px'.format(size[0])
widget.style['margin'] = '{}px {}px {}px {}px'.format(*full_element_pad)
if element.Disabled: if element.Disabled:
widget.set_enabled(False) widget.set_enabled(False)
# #
@ -3965,6 +3970,20 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
element_size = toplevel_form.DefaultButtonElementSize element_size = toplevel_form.DefaultButtonElementSize
else: else:
auto_size_text = False # if user has specified a size then it shouldn't autosize auto_size_text = False # if user has specified a size then it shouldn't autosize
full_element_pad = [0, 0, 0, 0] # Top, Right, Bottom, Left
elementpad = element.Pad if element.Pad is not None else toplevel_form.ElementPadding
if type(elementpad[0]) != tuple: # left and right
full_element_pad[1] = full_element_pad[3] = elementpad[0]
else:
full_element_pad[3], full_element_pad[1] = elementpad[0]
if type(elementpad[1]) != tuple: # top and bottom
full_element_pad[0] = full_element_pad[2] = elementpad[1]
else:
full_element_pad[0], full_element_pad[2] = elementpad[1]
# ------------------------- COLUMN element ------------------------- # # ------------------------- COLUMN element ------------------------- #
if element_type == ELEM_TYPE_COLUMN: if element_type == ELEM_TYPE_COLUMN:
pass pass
@ -4170,10 +4189,14 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
# element.TKEntry['state'] = 'disabled' # element.TKEntry['state'] = 'disabled'
# if element.Tooltip is not None: # if element.Tooltip is not None:
# element.TooltipObject = ToolTip(element.TKEntry, text=element.Tooltip, timeout=DEFAULT_TOOLTIP_TIME) # element.TooltipObject = ToolTip(element.TKEntry, text=element.Tooltip, timeout=DEFAULT_TOOLTIP_TIME)
# ------------------------- COMBO BOX (Drop Down) element ------------------------- # # ------------------------- COMBO element ------------------------- #
elif element_type == ELEM_TYPE_INPUT_COMBO: elif element_type == ELEM_TYPE_INPUT_COMBO:
pass element = element # type: Combo
element.Widget = remi.gui.DropDown.new_from_list(element.Values)
if element.DefaultValue is not None:
element.Widget.select_by_value(element.DefaultValue)
do_font_and_color(element.Widget)
tk_row_frame.append(element.Widget)
# max_line_len = max([len(str(l)) for l in element.Values]) # max_line_len = max([len(str(l)) for l in element.Values])
# if auto_size_text is False: # if auto_size_text is False:
# width = element_size[0] # width = element_size[0]
@ -4257,7 +4280,10 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
# timeout=DEFAULT_TOOLTIP_TIME) # timeout=DEFAULT_TOOLTIP_TIME)
# # ------------------------- LISTBOX element ------------------------- # # # ------------------------- LISTBOX element ------------------------- #
elif element_type == ELEM_TYPE_INPUT_LISTBOX: elif element_type == ELEM_TYPE_INPUT_LISTBOX:
pass element = element # type: Listbox
element.Widget = remi.gui.ListView.new_from_list(element.Values)
do_font_and_color(element.Widget)
tk_row_frame.append(element.Widget)
# max_line_len = max([len(str(l)) for l in element.Values]) if len(element.Values) != 0 else 0 # max_line_len = max([len(str(l)) for l in element.Values]) if len(element.Values) != 0 else 0
# if auto_size_text is False: # if auto_size_text is False:
# width = element_size[0] # width = element_size[0]
@ -4317,7 +4343,13 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
# element.TooltipObject = ToolTip(element.TKText, text=element.Tooltip, timeout=DEFAULT_TOOLTIP_TIME) # element.TooltipObject = ToolTip(element.TKText, text=element.Tooltip, timeout=DEFAULT_TOOLTIP_TIME)
# ------------------------- INPUT CHECKBOX element ------------------------- # # ------------------------- INPUT CHECKBOX element ------------------------- #
elif element_type == ELEM_TYPE_INPUT_CHECKBOX: elif element_type == ELEM_TYPE_INPUT_CHECKBOX:
pass element = element # type: Checkbox
element.Widget = remi.gui.CheckBoxLabel(element.Text)
if element.InitialState:
element.Widget.set_value(element.InitialState)
do_font_and_color(element.Widget)
tk_row_frame.append(element.Widget)
# width = 0 if auto_size_text else element_size[0] # width = 0 if auto_size_text else element_size[0]
# default_value = element.InitialState # default_value = element.InitialState
# element.TKIntVar = tk.IntVar() # element.TKIntVar = tk.IntVar()
@ -5917,7 +5949,7 @@ def Popup(*args, button_color=None, background_color=None, text_color=None, butt
if non_blocking: if non_blocking:
PopupButton = DummyButton # important to use or else button will close other windows too! PopupButton = DummyButton # important to use or else button will close other windows too!
else: else:
PopupButton = CloseButton PopupButton = Button
# show either an OK or Yes/No depending on paramater # show either an OK or Yes/No depending on paramater
if custom_text != (None, None): if custom_text != (None, None):
if type(custom_text) is not tuple: if type(custom_text) is not tuple:
@ -5953,7 +5985,7 @@ def Popup(*args, button_color=None, background_color=None, text_color=None, butt
button, values = window.Read(timeout=0) button, values = window.Read(timeout=0)
else: else:
button, values = window.Read() button, values = window.Read()
window.Close()
return button return button
@ -6487,4 +6519,5 @@ def main():
if __name__ == '__main__': if __name__ == '__main__':
main() main()
print('back from main')
exit(69) exit(69)

View File

@ -8,7 +8,7 @@
![Python Version](https://img.shields.io/badge/Python-3.x-yellow.svg) ![Python Version](https://img.shields.io/badge/Python-3.x-yellow.svg)
![Python Version](https://img.shields.io/badge/PySimpleGUIWeb_Version-0.2.0-orange.svg?longCache=true&style=for-the-badge) ![Python Version](https://img.shields.io/badge/PySimpleGUIWeb_Version-0.3.0-orange.svg?longCache=true&style=for-the-badge)
@ -72,7 +72,13 @@ PySimpleGUIWeb runs only on Python 3. Legacy Python is not supported.
* Text Element * Text Element
* Input Text Element * Input Text Element
* Button Element * Button Element
* Combobox Element
* Checkbox Element
* Listbox Element
* Window background color
* Element padding
* Read with timeout
* Read with timeout = 0
# Release Notes: # Release Notes:
@ -102,6 +108,14 @@ Day 2 of development brings fonts, sizes, and colors...
* Window close * Window close
* Window background color * Window background color
## 0.3.0 PySimpleGUIWeb 24-Jan-2019
* Checkbox Element
* Combobox Element
* Listbox Element
* Element padding for all elements
# Design # Design
@ -113,3 +127,6 @@ Day 2 of development brings fonts, sizes, and colors...
GNU Lesser General Public License (LGPL 3) + GNU Lesser General Public License (LGPL 3) +
# Acknowledgments # Acknowledgments
<!--stackedit_data:
eyJoaXN0b3J5IjpbLTExNjA2ODQzMzldfQ==
-->