Button color, Button font, Text Font, background color, text color, size, justification, tab title,
This commit is contained in:
parent
588f332983
commit
799a6bd05d
|
@ -48,7 +48,7 @@ DEFAULT_BASE64_ICON = b'iVBORw0KGgoAAAANSUhEUgAAACEAAAAgCAMAAACrZuH4AAAABGdBTUEA
|
||||||
|
|
||||||
# ----====----====----==== Constants the user CAN safely change ====----====----====----#
|
# ----====----====----==== Constants the user CAN safely change ====----====----====----#
|
||||||
DEFAULT_WINDOW_ICON = 'default_icon.ico'
|
DEFAULT_WINDOW_ICON = 'default_icon.ico'
|
||||||
DEFAULT_ELEMENT_SIZE = (45, 1) # In CHARACTERS
|
DEFAULT_ELEMENT_SIZE = (250, 26) # In pixels
|
||||||
DEFAULT_BUTTON_ELEMENT_SIZE = (10, 1) # In CHARACTERS
|
DEFAULT_BUTTON_ELEMENT_SIZE = (10, 1) # In CHARACTERS
|
||||||
DEFAULT_MARGINS = (10, 5) # Margins for each LEFT/RIGHT margin is first term
|
DEFAULT_MARGINS = (10, 5) # Margins for each LEFT/RIGHT margin is first term
|
||||||
DEFAULT_ELEMENT_PADDING = (5, 3) # Padding between elements (row, col) in pixels
|
DEFAULT_ELEMENT_PADDING = (5, 3) # Padding between elements (row, col) in pixels
|
||||||
|
@ -464,6 +464,7 @@ class Element():
|
||||||
|
|
||||||
|
|
||||||
def Update(self, widget, background_color=None, text_color=None, font=None, visible=None, disabled=None, tooltip=None):
|
def Update(self, widget, background_color=None, text_color=None, font=None, visible=None, disabled=None, tooltip=None):
|
||||||
|
return
|
||||||
if font:
|
if font:
|
||||||
widget.SetFont(font_to_wx_font(font))
|
widget.SetFont(font_to_wx_font(font))
|
||||||
if text_color not in (None, COLOR_SYSTEM_DEFAULT):
|
if text_color not in (None, COLOR_SYSTEM_DEFAULT):
|
||||||
|
@ -1024,49 +1025,56 @@ class Multiline(Element):
|
||||||
# Text #
|
# Text #
|
||||||
# ---------------------------------------------------------------------- #
|
# ---------------------------------------------------------------------- #
|
||||||
class Text(Element):
|
class Text(Element):
|
||||||
def __init__(self, text, size=(None, None), auto_size_text=None, click_submits=None, relief=None, font=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_color=None, background_color=None, justification=None, pad=None, key=None, tooltip=None):
|
"""
|
||||||
'''
|
Text
|
||||||
Text Element
|
|
||||||
:param text:
|
:param text:
|
||||||
:param size:
|
:param size:
|
||||||
:param auto_size_text:
|
:param auto_size_text:
|
||||||
:param click_submits:
|
:param click_submits:
|
||||||
|
:param enable_events:
|
||||||
:param relief:
|
:param relief:
|
||||||
:param font:
|
:param font:
|
||||||
:param text_color:
|
:param text_color:
|
||||||
:param background_color:
|
:param background_color:
|
||||||
:param justification:
|
:param justification:
|
||||||
:param pad:
|
:param pad:
|
||||||
|
:param margins:
|
||||||
:param key:
|
:param key:
|
||||||
:param tooltip:
|
:param tooltip:
|
||||||
'''
|
:param visible:
|
||||||
|
:param size_px:
|
||||||
|
"""
|
||||||
self.DisplayText = text
|
self.DisplayText = text
|
||||||
self.TextColor = text_color if text_color else DEFAULT_TEXT_COLOR
|
self.TextColor = text_color if text_color else DEFAULT_TEXT_COLOR
|
||||||
self.Justification = justification
|
self.Justification = justification
|
||||||
self.Relief = relief
|
self.Relief = relief
|
||||||
self.ClickSubmits = click_submits
|
self.ClickSubmits = click_submits or enable_events
|
||||||
|
self.Margins = margins
|
||||||
|
self.size_px = size_px
|
||||||
if background_color is None:
|
if background_color is None:
|
||||||
bg = DEFAULT_TEXT_ELEMENT_BACKGROUND_COLOR
|
bg = DEFAULT_TEXT_ELEMENT_BACKGROUND_COLOR
|
||||||
else:
|
else:
|
||||||
bg = background_color
|
bg = background_color
|
||||||
self.Widget = None # type: remi.gui.Label
|
pixelsize = size
|
||||||
|
if size[1] is not None and size[1] < 10:
|
||||||
|
pixelsize = size[0]*10, size[1]*20
|
||||||
|
self.WxStaticText:wx.StaticText = 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, size, auto_size_text, background_color=bg, font=font if font else DEFAULT_FONT,
|
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)
|
text_color=self.TextColor, pad=pad, key=key, tooltip=tooltip, size_px=size_px, visible=visible)
|
||||||
return
|
return
|
||||||
|
|
||||||
def Update(self, value=None, background_color=None, text_color=None, font=None):
|
def Update(self, value=None, background_color=None, text_color=None, font=None, visible=None):
|
||||||
if value is not None:
|
if value is not None:
|
||||||
self.DisplayText = value
|
self.Widget.set_text(value)
|
||||||
stringvar = self.TKStringVar
|
# if background_color is not None:
|
||||||
stringvar.set(value)
|
# self.TKText.configure(background=background_color)
|
||||||
if background_color is not None:
|
# if text_color is not None:
|
||||||
self.TKText.configure(background=background_color)
|
# self.TKText.configure(fg=text_color)
|
||||||
if text_color is not None:
|
# if font is not None:
|
||||||
self.TKText.configure(fg=text_color)
|
# self.TKText.configure(font=font)
|
||||||
if font is not None:
|
|
||||||
self.TKText.configure(font=font)
|
|
||||||
|
|
||||||
def __del__(self):
|
def __del__(self):
|
||||||
super().__del__()
|
super().__del__()
|
||||||
|
@ -1442,8 +1450,7 @@ class Button(Element):
|
||||||
|
|
||||||
def Update(self, text=None, button_color=(None, None), disabled=None, image_data=None, image_filename=None, font=None, visible=None):
|
def Update(self, text=None, button_color=(None, None), disabled=None, image_data=None, image_filename=None, font=None, visible=None):
|
||||||
if text is not None:
|
if text is not None:
|
||||||
self.QT_QPushButton.setText(str(text))
|
self.Widget.set_text(text)
|
||||||
self.ButtonText = text
|
|
||||||
if self.ParentForm.Font and (self.Font == DEFAULT_FONT or not self.Font):
|
if self.ParentForm.Font and (self.Font == DEFAULT_FONT or not self.Font):
|
||||||
font = self.ParentForm.Font
|
font = self.ParentForm.Font
|
||||||
elif self.Font is not None:
|
elif self.Font is not None:
|
||||||
|
@ -1465,11 +1472,11 @@ class Button(Element):
|
||||||
self.QT_QPushButton.setDisabled(False)
|
self.QT_QPushButton.setDisabled(False)
|
||||||
# fg, bg = self.ButtonColor
|
# fg, bg = self.ButtonColor
|
||||||
# print(f'Button update fg, bg {fg}, {bg}')
|
# print(f'Button update fg, bg {fg}, {bg}')
|
||||||
super().Update(self.WxButton, background_color=bg, text_color=fg, font=font, visible=visible)
|
super().Update(self.Widget, background_color=bg, text_color=fg, font=font, visible=visible)
|
||||||
|
|
||||||
|
|
||||||
def GetText(self):
|
def GetText(self):
|
||||||
return self.ButtonText
|
return self.Widget.get_text()
|
||||||
|
|
||||||
def SetFocus(self):
|
def SetFocus(self):
|
||||||
self.QT_QPushButton.setFocus()
|
self.QT_QPushButton.setFocus()
|
||||||
|
@ -2632,10 +2639,11 @@ class Window:
|
||||||
self.BackgroundImage = background_image
|
self.BackgroundImage = background_image
|
||||||
self.XFound = False
|
self.XFound = False
|
||||||
self.DisableMinimize = disable_minimize
|
self.DisableMinimize = disable_minimize
|
||||||
self.App = None # type: wx.App
|
|
||||||
self.MasterFrame = None # type: wx.Frame
|
self.MasterFrame = None # type: wx.Frame
|
||||||
self.MasterPanel = None # type wx.Panel
|
self.MasterPanel = None # type wx.Panel
|
||||||
self.IgnoreClose = False
|
self.IgnoreClose = False
|
||||||
|
self.thread_id = None
|
||||||
|
self.App = None # type: Window.MyApp
|
||||||
self.MessageQueue = Queue()
|
self.MessageQueue = Queue()
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
@ -2760,7 +2768,10 @@ class Window:
|
||||||
except: # timeout
|
except: # timeout
|
||||||
self.LastButtonClicked = timeout_key
|
self.LastButtonClicked = timeout_key
|
||||||
elif timeout == 0:
|
elif timeout == 0:
|
||||||
self.LastButtonClicked = self.MessageQueue.get_nowait()
|
try:
|
||||||
|
self.LastButtonClicked = self.MessageQueue.get_nowait()
|
||||||
|
except:
|
||||||
|
self.LastButtonClicked = timeout_key
|
||||||
else:
|
else:
|
||||||
self.LastButtonClicked = self.MessageQueue.get()
|
self.LastButtonClicked = self.MessageQueue.get()
|
||||||
# print('--------------------- BACK FROM MESSAGE QUEUE GET ----------------------')
|
# print('--------------------- BACK FROM MESSAGE QUEUE GET ----------------------')
|
||||||
|
@ -2988,6 +2999,7 @@ class Window:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def Close(self):
|
def Close(self):
|
||||||
|
self.App.close()
|
||||||
if self.TKrootDestroyed:
|
if self.TKrootDestroyed:
|
||||||
return
|
return
|
||||||
# try:
|
# try:
|
||||||
|
@ -2995,6 +3007,7 @@ class Window:
|
||||||
# except:
|
# except:
|
||||||
# print('error closing window')
|
# print('error closing window')
|
||||||
|
|
||||||
|
|
||||||
CloseNonBlockingForm = Close
|
CloseNonBlockingForm = Close
|
||||||
CloseNonBlocking = Close
|
CloseNonBlocking = Close
|
||||||
|
|
||||||
|
@ -3096,13 +3109,12 @@ class Window:
|
||||||
element.__del__()
|
element.__del__()
|
||||||
|
|
||||||
|
|
||||||
def remi_thread(self, window):
|
def remi_thread(self):
|
||||||
# print('In Remi Thread....', window)
|
|
||||||
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(window.MyApp, debug=False, address='0.0.0.0', port=0, start_browser=True, userdata=(window,)) # 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)
|
||||||
window.MessageQueue.put(None)
|
self.MessageQueue.put(None)
|
||||||
|
|
||||||
class MyApp(remi.App):
|
class MyApp(remi.App):
|
||||||
def __init__(self,*args):
|
def __init__(self,*args):
|
||||||
|
@ -3110,6 +3122,7 @@ class Window:
|
||||||
# print(args[-1])
|
# print(args[-1])
|
||||||
userdata = args[-1].userdata
|
userdata = args[-1].userdata
|
||||||
self.window = userdata[0] # type: Window
|
self.window = userdata[0] # type: Window
|
||||||
|
self.window.App = self
|
||||||
super(Window.MyApp, self).__init__(*args)
|
super(Window.MyApp, self).__init__(*args)
|
||||||
|
|
||||||
def main(self, name='world'):
|
def main(self, name='world'):
|
||||||
|
@ -3117,6 +3130,8 @@ class Window:
|
||||||
wid = remi.gui.VBox()
|
wid = remi.gui.VBox()
|
||||||
wid.style['justify-content'] = 'flex-start'
|
wid.style['justify-content'] = 'flex-start'
|
||||||
wid.style['align-items'] = 'baseline'
|
wid.style['align-items'] = 'baseline'
|
||||||
|
wid.style['background-color'] = self.window.BackgroundColor
|
||||||
|
|
||||||
PackFormIntoFrame(self.window, wid, self.window)
|
PackFormIntoFrame(self.window, wid, self.window)
|
||||||
#
|
#
|
||||||
# lbl = remi.gui.Label("Close or reload the page, the console thread will stop automatically.")
|
# lbl = remi.gui.Label("Close or reload the page, the console thread will stop automatically.")
|
||||||
|
@ -3182,7 +3197,7 @@ def convert_tkinter_size_to_Wx(size):
|
||||||
return qtsize
|
return qtsize
|
||||||
|
|
||||||
|
|
||||||
def font_to_wx_font(font):
|
def font_parse_string(font):
|
||||||
"""
|
"""
|
||||||
Convert from font string/tyuple into a Qt style sheet string
|
Convert from font string/tyuple into a Qt style sheet string
|
||||||
:param font: "Arial 10 Bold" or ('Arial', 10, 'Bold)
|
:param font: "Arial 10 Bold" or ('Arial', 10, 'Bold)
|
||||||
|
@ -3196,23 +3211,15 @@ def font_to_wx_font(font):
|
||||||
_font = font.split(' ')
|
_font = font.split(' ')
|
||||||
else:
|
else:
|
||||||
_font = font
|
_font = font
|
||||||
name = _font[0]
|
|
||||||
family = _font[0]
|
family = _font[0]
|
||||||
point_size = int(_font[1])
|
point_size = int(_font[1])
|
||||||
|
|
||||||
# style = _font[2]
|
style = _font[2:] if len(_font) > 1 else None
|
||||||
|
|
||||||
underline = 'underline' in _font[2:]
|
# underline = 'underline' in _font[2:]
|
||||||
bold = 'bold' in _font
|
# bold = 'bold' in _font
|
||||||
|
|
||||||
wxfont = wx.Font(point_size,
|
return family, point_size, style
|
||||||
wx.FONTFAMILY_DEFAULT,
|
|
||||||
wx.FONTSTYLE_NORMAL,
|
|
||||||
wx.FONTWEIGHT_BOLD if bold else wx.FONTWEIGHT_NORMAL,
|
|
||||||
underline,
|
|
||||||
faceName=family)
|
|
||||||
|
|
||||||
return wxfont
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -3860,6 +3867,50 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
def CharWidthInPixels():
|
def CharWidthInPixels():
|
||||||
return tkinter.font.Font().measure('A') # single character width
|
return tkinter.font.Font().measure('A') # single character width
|
||||||
|
|
||||||
|
def pad_widget(widget):
|
||||||
|
lrsizer = wx.BoxSizer(wx.HORIZONTAL)
|
||||||
|
if full_element_pad[1] == full_element_pad[3]: # if right = left
|
||||||
|
lrsizer.Add(widget, 0, wx.LEFT | wx.RIGHT, border=full_element_pad[1])
|
||||||
|
else:
|
||||||
|
sizer = wx.BoxSizer(wx.HORIZONTAL)
|
||||||
|
sizer.Add(widget, 0, wx.LEFT, border=full_element_pad[3])
|
||||||
|
lrsizer.Add(sizer, 0, wx.RIGHT, border=full_element_pad[1])
|
||||||
|
|
||||||
|
top_bottom_sizer = wx.BoxSizer(wx.HORIZONTAL)
|
||||||
|
if full_element_pad[0] == full_element_pad[2]: # if top = bottom
|
||||||
|
top_bottom_sizer.Add(lrsizer, 0, wx.TOP | wx.BOTTOM, border=full_element_pad[0])
|
||||||
|
else:
|
||||||
|
sizer = wx.BoxSizer(wx.HORIZONTAL)
|
||||||
|
sizer.Add(lrsizer, 0, wx.TOP, border=full_element_pad[0])
|
||||||
|
top_bottom_sizer.Add(sizer, 0, wx.BOTTOM, border=full_element_pad[2])
|
||||||
|
return top_bottom_sizer
|
||||||
|
|
||||||
|
#
|
||||||
|
# font, text color, background color, size, disabled, visible, tooltip
|
||||||
|
#
|
||||||
|
def do_font_and_color(widget):
|
||||||
|
font_info = font_parse_string(font) # family, point size, other
|
||||||
|
widget.style['font-family'] = font_info[0]
|
||||||
|
if element.BackgroundColor not in (None, COLOR_SYSTEM_DEFAULT):
|
||||||
|
widget.style['background-color'] = element.BackgroundColor
|
||||||
|
if element.TextColor not in (None, COLOR_SYSTEM_DEFAULT):
|
||||||
|
widget.style['color'] = element.TextColor
|
||||||
|
widget.style['font-size'] = '{}px'.format(font_info[1])
|
||||||
|
size = convert_tkinter_size_to_Wx(element_size)
|
||||||
|
widget.style['height'] = '{}px'.format(size[1])
|
||||||
|
widget.style['width'] = '{}px'.format(size[0])
|
||||||
|
#
|
||||||
|
# widget.SetMinSize(element_size)
|
||||||
|
# if element.Disabled:
|
||||||
|
# widget.Enable(False)
|
||||||
|
# if not element.Visible:
|
||||||
|
# widget.Hide()
|
||||||
|
# if element.Tooltip:
|
||||||
|
# widget.SetToolTip(element.Tooltip)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
border_depth = toplevel_form.BorderDepth if toplevel_form.BorderDepth is not None else DEFAULT_BORDER_WIDTH
|
border_depth = toplevel_form.BorderDepth if toplevel_form.BorderDepth is not None else DEFAULT_BORDER_WIDTH
|
||||||
# --------------------------------------------------------------------------- #
|
# --------------------------------------------------------------------------- #
|
||||||
# **************** Use FlexForm to build the tkinter window ********** ----- #
|
# **************** Use FlexForm to build the tkinter window ********** ----- #
|
||||||
|
@ -3875,6 +3926,8 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
tk_row_frame = remi.gui.HBox() # TODO Get horizontal ROW widget to put others into
|
tk_row_frame = remi.gui.HBox() # TODO Get horizontal ROW widget to put others into
|
||||||
tk_row_frame.style['justify-content'] = 'flex-start'
|
tk_row_frame.style['justify-content'] = 'flex-start'
|
||||||
tk_row_frame.style['align-items'] = 'baseline'
|
tk_row_frame.style['align-items'] = 'baseline'
|
||||||
|
tk_row_frame.style['background-color'] = toplevel_form.BackgroundColor
|
||||||
|
|
||||||
for col_num, element in enumerate(flex_row):
|
for col_num, element in enumerate(flex_row):
|
||||||
element.ParentForm = toplevel_form # save the button's parent form object
|
element.ParentForm = toplevel_form # save the button's parent form object
|
||||||
if toplevel_form.Font and (element.Font == DEFAULT_FONT or not element.Font):
|
if toplevel_form.Font and (element.Font == DEFAULT_FONT or not element.Font):
|
||||||
|
@ -3933,6 +3986,13 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
element = element # type: Text
|
element = element # type: Text
|
||||||
element.Widget = remi.gui.Label(element.DisplayText)
|
element.Widget = remi.gui.Label(element.DisplayText)
|
||||||
element.Widget.set_layout_orientation(True)
|
element.Widget.set_layout_orientation(True)
|
||||||
|
do_font_and_color(element.Widget)
|
||||||
|
if element.Justification:
|
||||||
|
if element.Justification.startswith('c'):
|
||||||
|
element.Widget.style['text-align'] = 'center'
|
||||||
|
elif element.Justification.startswith('r'):
|
||||||
|
element.Widget.style['text-align'] = 'right'
|
||||||
|
|
||||||
tk_row_frame.append(element.Widget)
|
tk_row_frame.append(element.Widget)
|
||||||
|
|
||||||
# auto_size_text = element.AutoSizeText
|
# auto_size_text = element.AutoSizeText
|
||||||
|
@ -3986,8 +4046,10 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
elif element_type == ELEM_TYPE_BUTTON:
|
elif element_type == ELEM_TYPE_BUTTON:
|
||||||
element = element # type: Button
|
element = element # type: Button
|
||||||
size = convert_tkinter_size_to_Wx(element_size)
|
size = convert_tkinter_size_to_Wx(element_size)
|
||||||
|
print(size)
|
||||||
element.Widget = remi.gui.Button(element.ButtonText, width=size[0], height=size[1], margin='10px')
|
element.Widget = remi.gui.Button(element.ButtonText, width=size[0], height=size[1], margin='10px')
|
||||||
element.Widget.onclick.connect(element.ButtonCallBack)
|
element.Widget.onclick.connect(element.ButtonCallBack)
|
||||||
|
do_font_and_color(element.Widget)
|
||||||
tk_row_frame.append(element.Widget)
|
tk_row_frame.append(element.Widget)
|
||||||
|
|
||||||
# stringvar = tk.StringVar()
|
# stringvar = tk.StringVar()
|
||||||
|
@ -4069,6 +4131,7 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
element.Widget = remi.gui.TextInput()
|
element.Widget = remi.gui.TextInput()
|
||||||
if element.DefaultText:
|
if element.DefaultText:
|
||||||
element.Widget.set_value(element.DefaultText)
|
element.Widget.set_value(element.DefaultText)
|
||||||
|
do_font_and_color(element.Widget)
|
||||||
tk_row_frame.append(element.Widget)
|
tk_row_frame.append(element.Widget)
|
||||||
|
|
||||||
# default_text = element.DefaultText
|
# default_text = element.DefaultText
|
||||||
|
@ -4795,8 +4858,9 @@ def StartupTK(window:Window):
|
||||||
# master.update_idletasks() # don't forget
|
# master.update_idletasks() # don't forget
|
||||||
|
|
||||||
|
|
||||||
thread = threading.Thread(target=window.remi_thread, args=(window,), daemon=True)
|
window.thread_id = threading.Thread(target=window.remi_thread, daemon=True)
|
||||||
thread.start()
|
window.thread_id.daemon = True
|
||||||
|
window.thread_id.start()
|
||||||
item = window.MessageQueue.get() # Get the layout complete message
|
item = window.MessageQueue.get() # Get the layout complete message
|
||||||
|
|
||||||
|
|
||||||
|
@ -6393,7 +6457,8 @@ def PopupGetText(message, default_text='', password_char='', size=(None, None),
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
layout = [[Text('You are running the PySimpleGUI.py file itself')],
|
SetOptions(background_color='blue', text_element_background_color='blue', text_color='white')
|
||||||
|
layout = [[Text('You are running the PySimpleGUI.py file itself', background_color='blue', font='Courier 20')],
|
||||||
[Text('You should be importing it rather than running it', size=(50, 2))],
|
[Text('You should be importing it rather than running it', size=(50, 2))],
|
||||||
[Text('Here is your sample input window....')],
|
[Text('Here is your sample input window....')],
|
||||||
[Text('Source Folder',justification='right'), InputText('Source', focus=True),
|
[Text('Source Folder',justification='right'), InputText('Source', focus=True),
|
||||||
|
@ -6401,7 +6466,7 @@ def main():
|
||||||
[Text('Destination Folder', justification='right'), InputText('Dest'), FolderBrowse()],
|
[Text('Destination Folder', justification='right'), InputText('Dest'), FolderBrowse()],
|
||||||
[Ok(), Cancel()]]
|
[Ok(), Cancel()]]
|
||||||
|
|
||||||
window = Window('Demo window..').Layout(layout)
|
window = Window('Demo window..', background_color='blue', font='Courier 18').Layout(layout)
|
||||||
while True:
|
while True:
|
||||||
event, values = window.Read()
|
event, values = window.Read()
|
||||||
print(event, values)
|
print(event, values)
|
||||||
|
|
Loading…
Reference in New Issue