commit
59f8529691
|
@ -7,6 +7,7 @@ import wx
|
||||||
import wx.adv
|
import wx.adv
|
||||||
import wx.lib.inspection
|
import wx.lib.inspection
|
||||||
from wx.lib.embeddedimage import PyEmbeddedImage
|
from wx.lib.embeddedimage import PyEmbeddedImage
|
||||||
|
import wx.lib.scrolledpanel
|
||||||
import types
|
import types
|
||||||
import datetime
|
import datetime
|
||||||
import textwrap
|
import textwrap
|
||||||
|
@ -535,7 +536,7 @@ class InputText(Element):
|
||||||
self.ChangeSubmits = change_submits or enable_events
|
self.ChangeSubmits = change_submits or enable_events
|
||||||
self.QT_QLineEdit = None
|
self.QT_QLineEdit = None
|
||||||
self.ValueWasChanged = False
|
self.ValueWasChanged = False
|
||||||
self.WxTextControl = None
|
self.WxTextCtrl = None
|
||||||
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, visible=visible, size_px=size_px)
|
font=font, tooltip=tooltip, visible=visible, size_px=size_px)
|
||||||
|
|
||||||
|
@ -565,27 +566,27 @@ class InputText(Element):
|
||||||
|
|
||||||
def Update(self, value=None, disabled=None, select=None, background_color=None, text_color=None, font=None, visible=None):
|
def Update(self, value=None, disabled=None, select=None, background_color=None, text_color=None, font=None, visible=None):
|
||||||
if disabled is True:
|
if disabled is True:
|
||||||
self.WxTextControl.Enable(True)
|
self.WxTextCtrl.Enable(True)
|
||||||
elif disabled is False:
|
elif disabled is False:
|
||||||
self.WxTextControl.Enable(False)
|
self.WxTextCtrl.Enable(False)
|
||||||
if value is not None:
|
if value is not None:
|
||||||
self.WxTextControl.SetValue(str(value))
|
self.WxTextCtrl.SetValue(str(value))
|
||||||
self.DefaultText = value
|
self.DefaultText = value
|
||||||
if select:
|
if select:
|
||||||
self.WxTextControl.SelectAll()
|
self.WxTextCtrl.SelectAll()
|
||||||
# if visible:
|
# if visible:
|
||||||
# self.WxTextControl.Show()
|
# self.WxTextCtrl.Show()
|
||||||
# self.ParentForm.VisibilityChanged()
|
# self.ParentForm.VisibilityChanged()
|
||||||
# elif visible is False:
|
# elif visible is False:
|
||||||
# self.WxTextControl.Hide()
|
# self.WxTextCtrl.Hide()
|
||||||
super().Update(self.WxTextControl, background_color=background_color, text_color=text_color, font=font, visible=visible)
|
super().Update(self.WxTextCtrl, background_color=background_color, text_color=text_color, font=font, visible=visible)
|
||||||
|
|
||||||
|
|
||||||
def Get(self):
|
def Get(self):
|
||||||
return self.WxTextControl.GetValue()
|
return self.WxTextCtrl.GetValue()
|
||||||
|
|
||||||
def SetFocus(self):
|
def SetFocus(self):
|
||||||
self.WxTextControl.SetFocus()
|
self.WxTextCtrl.SetFocus()
|
||||||
|
|
||||||
def __del__(self):
|
def __del__(self):
|
||||||
super().__del__()
|
super().__del__()
|
||||||
|
@ -885,7 +886,7 @@ class Checkbox(Element):
|
||||||
tooltip=tooltip, visible=visible, size_px=size_px)
|
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:
|
||||||
|
@ -916,8 +917,7 @@ Check = Checkbox
|
||||||
class Spin(Element):
|
class Spin(Element):
|
||||||
# Values = None
|
# Values = None
|
||||||
# TKSpinBox = None
|
# TKSpinBox = None
|
||||||
def __init__(self, values, initial_value=None, disabled=False, change_submits=False, enable_events=False, size=(None, None),
|
def __init__(self, values, initial_value=None, disabled=False, change_submits=False, enable_events=False, size=(None, None), readonly=True, auto_size_text=None, font=None, background_color=None, text_color=None, key=None, pad=None,
|
||||||
auto_size_text=None, font=None, background_color=None, text_color=None, key=None, pad=None,
|
|
||||||
tooltip=None, visible=True, size_px=(None,None)):
|
tooltip=None, visible=True, size_px=(None,None)):
|
||||||
'''
|
'''
|
||||||
Spinner Element
|
Spinner Element
|
||||||
|
@ -935,40 +935,27 @@ class Spin(Element):
|
||||||
:param tooltip:
|
:param tooltip:
|
||||||
'''
|
'''
|
||||||
self.Values = values
|
self.Values = values
|
||||||
self.DefaultValue = initial_value
|
self.DefaultValue = initial_value or values[0]
|
||||||
self.ChangeSubmits = change_submits or enable_events
|
self.ChangeSubmits = change_submits or enable_events
|
||||||
self.Disabled = disabled
|
self.Disabled = disabled
|
||||||
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.WxSpinCtrl : wx.SpinCtrl = None
|
self.WxSpinCtrl : wx.SpinCtrl = None
|
||||||
|
self.WxTextCtrl = None # type : wx.TextCtrl
|
||||||
|
self.CurrentValue = self.DefaultValue
|
||||||
|
self.ReadOnly = readonly
|
||||||
|
|
||||||
super().__init__(ELEM_TYPE_INPUT_SPIN, size, auto_size_text, font=font, background_color=bg, text_color=fg,
|
super().__init__(ELEM_TYPE_INPUT_SPIN, size, auto_size_text, font=font, background_color=bg, text_color=fg,
|
||||||
key=key, pad=pad, tooltip=tooltip, visible=visible, size_px=size_px)
|
key=key, pad=pad, tooltip=tooltip, visible=visible, size_px=size_px)
|
||||||
return
|
return
|
||||||
|
|
||||||
class StringBox(wx.SpinCtrl):
|
|
||||||
def __init__(self, strings, parent=None):
|
|
||||||
super(Spin.StringBox, self).__init__(parent)
|
|
||||||
self.setStrings(strings)
|
|
||||||
|
|
||||||
def strings(self):
|
def WxSpinCallback(self, event:wx.SpinEvent):
|
||||||
return self._strings
|
print(f'spin event {event.GetInt()} {self.WxSpinCtrl.GetValue()}')
|
||||||
|
offset = event.GetInt()
|
||||||
def setStrings(self, strings):
|
self.WxTextCtrl.SetValue(self.Values[offset])
|
||||||
self._strings = tuple(strings)
|
self.CurrentValue = self.Values[offset]
|
||||||
self._values = dict(zip(strings, range(len(strings))))
|
if self.ChangeSubmits:
|
||||||
self.setRange(0, len(strings) - 1)
|
|
||||||
|
|
||||||
def textFromValue(self, value):
|
|
||||||
return str(self._strings[value])
|
|
||||||
|
|
||||||
def valueFromText(self, text):
|
|
||||||
return self._values[text]
|
|
||||||
|
|
||||||
|
|
||||||
def QtCallbackValueChanged(self, value):
|
|
||||||
if not self.ChangeSubmits:
|
|
||||||
return
|
|
||||||
element_callback_quit_mainloop(self)
|
element_callback_quit_mainloop(self)
|
||||||
|
|
||||||
def Update(self, value=None, values=None, disabled=None, background_color=None, text_color=None, font=None, visible=None):
|
def Update(self, value=None, values=None, disabled=None, background_color=None, text_color=None, font=None, visible=None):
|
||||||
|
@ -990,7 +977,7 @@ class Spin(Element):
|
||||||
super().Update(self.QT_Spinner, background_color=background_color, text_color=text_color, font=font, visible=visible)
|
super().Update(self.QT_Spinner, background_color=background_color, text_color=text_color, font=font, visible=visible)
|
||||||
|
|
||||||
def Get(self):
|
def Get(self):
|
||||||
return self.QT_Spinner.value()
|
return self.WxSpinCtrl.GetValue()
|
||||||
|
|
||||||
def __del__(self):
|
def __del__(self):
|
||||||
super().__del__()
|
super().__del__()
|
||||||
|
@ -1031,7 +1018,7 @@ class Multiline(Element):
|
||||||
tsize = size # convert tkinter size to pixels
|
tsize = size # convert tkinter size to pixels
|
||||||
if size[0] is not None and size[0] < 100:
|
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]
|
tsize = size[0]*DEFAULT_PIXELS_TO_CHARS_SCALING[0], size[1]*DEFAULT_PIXELS_TO_CHARS_SCALING[1]
|
||||||
self.WxTextControl = None
|
self.WxTextCtrl = None
|
||||||
|
|
||||||
super().__init__(ELEM_TYPE_INPUT_MULTILINE, size=tsize, auto_size_text=auto_size_text, background_color=bg,
|
super().__init__(ELEM_TYPE_INPUT_MULTILINE, size=tsize, auto_size_text=auto_size_text, background_color=bg,
|
||||||
text_color=fg, key=key, pad=pad, tooltip=tooltip, font=font or DEFAULT_FONT, visible=visible, size_px=size_px)
|
text_color=fg, key=key, pad=pad, tooltip=tooltip, font=font or DEFAULT_FONT, visible=visible, size_px=size_px)
|
||||||
|
@ -1040,20 +1027,20 @@ class Multiline(Element):
|
||||||
|
|
||||||
def Update(self, value=None, disabled=None, append=False, background_color=None, text_color=None, font=None, visible=None):
|
def Update(self, value=None, disabled=None, append=False, background_color=None, text_color=None, font=None, visible=None):
|
||||||
if value is not None and not append:
|
if value is not None and not append:
|
||||||
self.WxTextControl.SetLabel(value)
|
self.WxTextCtrl.SetLabel(value)
|
||||||
elif value is not None and append:
|
elif value is not None and append:
|
||||||
self.WxTextControl.AppendText(value)
|
self.WxTextCtrl.AppendText(value)
|
||||||
if background_color is not None:
|
if background_color is not None:
|
||||||
self.WxTextControl.SetBackgroundColour(background_color)
|
self.WxTextCtrl.SetBackgroundColour(background_color)
|
||||||
if text_color is not None:
|
if text_color is not None:
|
||||||
self.WxTextControl.SetForegroundColour(text_color)
|
self.WxTextCtrl.SetForegroundColour(text_color)
|
||||||
if font is not None:
|
if font is not None:
|
||||||
self.WxTextControl.SetFont(font)
|
self.WxTextCtrl.SetFont(font)
|
||||||
if disabled:
|
if disabled:
|
||||||
self.WxTextControl.Enable(True)
|
self.WxTextCtrl.Enable(True)
|
||||||
elif disabled is False:
|
elif disabled is False:
|
||||||
self.WxTextControl.Enable(False)
|
self.WxTextCtrl.Enable(False)
|
||||||
super().Update(self.WxTextControl, background_color=background_color, text_color=text_color, font=font, visible=visible)
|
super().Update(self.WxTextCtrl, background_color=background_color, text_color=text_color, font=font, visible=visible)
|
||||||
|
|
||||||
#
|
#
|
||||||
# def Update(self, value=None, disabled=None, append=False, background_color=None, text_color=None, font=None, visible=None):
|
# def Update(self, value=None, disabled=None, append=False, background_color=None, text_color=None, font=None, visible=None):
|
||||||
|
@ -1071,10 +1058,10 @@ class Multiline(Element):
|
||||||
|
|
||||||
|
|
||||||
def Get(self):
|
def Get(self):
|
||||||
self.WxTextControl.GetValue()
|
self.WxTextCtrl.GetValue()
|
||||||
|
|
||||||
def SetFocus(self):
|
def SetFocus(self):
|
||||||
self.WxTextControl.SetFocus()
|
self.WxTextCtrl.SetFocus()
|
||||||
|
|
||||||
|
|
||||||
def __del__(self):
|
def __del__(self):
|
||||||
|
@ -1115,7 +1102,7 @@ class MultilineOutput(Element):
|
||||||
tsize = size # convert tkinter size to pixels
|
tsize = size # convert tkinter size to pixels
|
||||||
if size[0] is not None and size[0] < 100:
|
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]
|
tsize = size[0]*DEFAULT_PIXELS_TO_CHARS_SCALING[0], size[1]*DEFAULT_PIXELS_TO_CHARS_SCALING[1]
|
||||||
self.WxTextControl = None
|
self.WxTextCtrl = None
|
||||||
|
|
||||||
super().__init__(ELEM_TYPE_MULTILINE_OUTPUT, size=tsize, auto_size_text=auto_size_text, background_color=bg,
|
super().__init__(ELEM_TYPE_MULTILINE_OUTPUT, size=tsize, auto_size_text=auto_size_text, background_color=bg,
|
||||||
text_color=fg, key=key, pad=pad, tooltip=tooltip, font=font or DEFAULT_FONT, visible=visible, size_px=size_px)
|
text_color=fg, key=key, pad=pad, tooltip=tooltip, font=font or DEFAULT_FONT, visible=visible, size_px=size_px)
|
||||||
|
@ -1124,27 +1111,27 @@ class MultilineOutput(Element):
|
||||||
|
|
||||||
def Update(self, value=None, disabled=None, append=False, background_color=None, text_color=None, font=None, visible=None):
|
def Update(self, value=None, disabled=None, append=False, background_color=None, text_color=None, font=None, visible=None):
|
||||||
if value is not None and not append:
|
if value is not None and not append:
|
||||||
self.WxTextControl.SetLabel(value)
|
self.WxTextCtrl.SetLabel(value)
|
||||||
elif value is not None and append:
|
elif value is not None and append:
|
||||||
self.WxTextControl.AppendText(value)
|
self.WxTextCtrl.AppendText(value)
|
||||||
if background_color is not None:
|
if background_color is not None:
|
||||||
self.WxTextControl.SetBackgroundColour(background_color)
|
self.WxTextCtrl.SetBackgroundColour(background_color)
|
||||||
if text_color is not None:
|
if text_color is not None:
|
||||||
self.WxTextControl.SetForegroundColour(text_color)
|
self.WxTextCtrl.SetForegroundColour(text_color)
|
||||||
if font is not None:
|
if font is not None:
|
||||||
self.WxTextControl.SetFont(font)
|
self.WxTextCtrl.SetFont(font)
|
||||||
if disabled:
|
if disabled:
|
||||||
self.WxTextControl.Enable(True)
|
self.WxTextCtrl.Enable(True)
|
||||||
elif disabled is False:
|
elif disabled is False:
|
||||||
self.WxTextControl.Enable(False)
|
self.WxTextCtrl.Enable(False)
|
||||||
super().Update(self.WxTextControl, background_color=background_color, text_color=text_color, font=font, visible=visible)
|
super().Update(self.WxTextCtrl, background_color=background_color, text_color=text_color, font=font, visible=visible)
|
||||||
|
|
||||||
|
|
||||||
def Get(self):
|
def Get(self):
|
||||||
self.WxTextControl.GetValue()
|
self.WxTextCtrl.GetValue()
|
||||||
|
|
||||||
def SetFocus(self):
|
def SetFocus(self):
|
||||||
self.WxTextControl.SetFocus()
|
self.WxTextCtrl.SetFocus()
|
||||||
|
|
||||||
def __del__(self):
|
def __del__(self):
|
||||||
super().__del__()
|
super().__del__()
|
||||||
|
@ -1313,7 +1300,7 @@ class Output(Element):
|
||||||
self._TKOut = None
|
self._TKOut = None
|
||||||
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.WxTextControl = None # type: wx.TextCtrl
|
self.WxTextCtrl = None # type: wx.TextCtrl
|
||||||
self.redir = None
|
self.redir = None
|
||||||
self.output = None
|
self.output = None
|
||||||
self.Disabled = disabled
|
self.Disabled = disabled
|
||||||
|
@ -1327,7 +1314,7 @@ class Output(Element):
|
||||||
def reroute_stdout(self):
|
def reroute_stdout(self):
|
||||||
self.my_stdout = sys.stdout
|
self.my_stdout = sys.stdout
|
||||||
self.my_stderr = sys.stderr
|
self.my_stderr = sys.stderr
|
||||||
self.redir = RedirectText(self.WxTextControl)
|
self.redir = RedirectText(self.WxTextCtrl)
|
||||||
sys.stdout = self.redir
|
sys.stdout = self.redir
|
||||||
sys.stderr = self.redir
|
sys.stderr = self.redir
|
||||||
Window.stdout_is_rerouted = True
|
Window.stdout_is_rerouted = True
|
||||||
|
@ -1338,8 +1325,8 @@ class Output(Element):
|
||||||
|
|
||||||
def Update(self,value=None, background_color=None, text_color=None, font=None, visible=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.WxTextControl.AppendText(value)
|
self.WxTextCtrl.AppendText(value)
|
||||||
super().Update(self.WxTextControl, background_color=background_color, text_color=text_color, font=font, visible=visible)
|
super().Update(self.WxTextCtrl, background_color=background_color, text_color=text_color, font=font, visible=visible)
|
||||||
|
|
||||||
|
|
||||||
def __del__(self):
|
def __del__(self):
|
||||||
|
@ -2312,7 +2299,7 @@ class Slider(Element):
|
||||||
# Column #
|
# Column #
|
||||||
# ---------------------------------------------------------------------- #
|
# ---------------------------------------------------------------------- #
|
||||||
class Column(Element):
|
class Column(Element):
|
||||||
def __init__(self, layout, background_color=None, size=(None, None), pad=None, scrollable=False, vertical_scroll_only=False, right_click_menu=None, key=None, visible=True):
|
def __init__(self, layout, background_color=None, size=(None, None), size_px=(None, None), pad=None, scrollable=False, vertical_scroll_only=False, right_click_menu=None, key=None, visible=True):
|
||||||
'''
|
'''
|
||||||
Column Element
|
Column Element
|
||||||
:param layout:
|
:param layout:
|
||||||
|
@ -2337,7 +2324,7 @@ class Column(Element):
|
||||||
self.WxHSizer = None # type: wx.BoxSizer
|
self.WxHSizer = None # type: wx.BoxSizer
|
||||||
self.Layout(layout)
|
self.Layout(layout)
|
||||||
|
|
||||||
super().__init__(ELEM_TYPE_COLUMN, background_color=background_color, size=size, pad=pad, key=key, visible=visible)
|
super().__init__(ELEM_TYPE_COLUMN, background_color=background_color, size=size, size_px=size_px, pad=pad, key=key, visible=visible)
|
||||||
return
|
return
|
||||||
|
|
||||||
def AddRow(self, *args):
|
def AddRow(self, *args):
|
||||||
|
@ -2705,32 +2692,32 @@ class SystemTray:
|
||||||
self.App = Window.highest_level_app = wx.App(False)
|
self.App = Window.highest_level_app = wx.App(False)
|
||||||
else:
|
else:
|
||||||
self.App = Window.highest_level_app
|
self.App = Window.highest_level_app
|
||||||
|
self.Tooltip = tooltip
|
||||||
|
|
||||||
frame = wx.Frame(None, title='Tray icon frame')
|
frame = wx.Frame(None, title='Tray icon frame')
|
||||||
self.TaskBarIcon = self.CustomTaskBarIcon(frame, self.App, self.Menu, filename=self.Filename, data_base64=data_base64, tooltip=tooltip)
|
|
||||||
|
|
||||||
# self.App.MainLoop()
|
|
||||||
|
|
||||||
|
|
||||||
class CustomTaskBarIcon(wx.adv.TaskBarIcon):
|
|
||||||
def __init__(self, frame, app, menu, filename=None, data_base64=None, tooltip=None):
|
|
||||||
wx.adv.TaskBarIcon.__init__(self)
|
|
||||||
self.frame = frame
|
|
||||||
self.app = app
|
|
||||||
self.menu_item_chosen = None
|
|
||||||
self.menu = menu
|
|
||||||
self.id_to_text = {}
|
|
||||||
self.filename = filename
|
|
||||||
self.data_base64 = data_base64
|
|
||||||
self.tooltip = tooltip or wx.EmptyString
|
|
||||||
|
|
||||||
if filename:
|
if filename:
|
||||||
self.icon = wx.Icon(filename, wx.BITMAP_TYPE_ANY)
|
self.icon = wx.Icon(filename, wx.BITMAP_TYPE_ANY)
|
||||||
elif data_base64:
|
elif data_base64:
|
||||||
self.icon = PyEmbeddedImage(data_base64).GetIcon()
|
self.icon = PyEmbeddedImage(data_base64).GetIcon()
|
||||||
else:
|
else:
|
||||||
self.icon = PyEmbeddedImage(DEFAULT_BASE64_ICON).GetIcon()
|
self.icon = PyEmbeddedImage(DEFAULT_BASE64_ICON).GetIcon()
|
||||||
self.SetIcon(self.icon, tooltip=self.tooltip)
|
self.TaskBarIcon = self.CustomTaskBarIcon(frame, self.App, self.Menu, self.icon, tooltip=tooltip)
|
||||||
|
|
||||||
|
# self.App.MainLoop()
|
||||||
|
|
||||||
|
|
||||||
|
class CustomTaskBarIcon(wx.adv.TaskBarIcon):
|
||||||
|
def __init__(self, frame, app, menu, icon, tooltip=None):
|
||||||
|
wx.adv.TaskBarIcon.__init__(self)
|
||||||
|
self.frame = frame
|
||||||
|
self.app = app
|
||||||
|
self.menu_item_chosen = None
|
||||||
|
self.menu = menu
|
||||||
|
self.id_to_text = {}
|
||||||
|
self.tooltip = tooltip or wx.EmptyString
|
||||||
|
|
||||||
|
|
||||||
|
self.SetIcon(icon, tooltip=self.tooltip)
|
||||||
self.Bind(wx.adv.EVT_TASKBAR_LEFT_DOWN, self.OnTaskBarLeftClick)
|
self.Bind(wx.adv.EVT_TASKBAR_LEFT_DOWN, self.OnTaskBarLeftClick)
|
||||||
self.Bind(wx.adv.EVT_TASKBAR_LEFT_DCLICK, self.OnTaskBarLeftDoubleClick)
|
self.Bind(wx.adv.EVT_TASKBAR_LEFT_DCLICK, self.OnTaskBarLeftDoubleClick)
|
||||||
self.Bind(wx.adv.EVT_TASKBAR_RIGHT_DOWN, self.OnTaskBarRightClick)
|
self.Bind(wx.adv.EVT_TASKBAR_RIGHT_DOWN, self.OnTaskBarRightClick)
|
||||||
|
@ -2876,9 +2863,11 @@ class SystemTray:
|
||||||
self.icon = wx.Icon(filename, wx.BITMAP_TYPE_ANY)
|
self.icon = wx.Icon(filename, wx.BITMAP_TYPE_ANY)
|
||||||
elif data_base64:
|
elif data_base64:
|
||||||
self.icon = PyEmbeddedImage(data_base64).GetIcon()
|
self.icon = PyEmbeddedImage(data_base64).GetIcon()
|
||||||
else:
|
elif not self.icon:
|
||||||
self.icon = PyEmbeddedImage(DEFAULT_BASE64_ICON).GetIcon()
|
self.icon = PyEmbeddedImage(DEFAULT_BASE64_ICON).GetIcon()
|
||||||
self.TaskBarIcon.SetIcon(self.icon, tooltip=tooltip or '')
|
if self.icon:
|
||||||
|
self.Tooltip = tooltip or self.Tooltip
|
||||||
|
self.TaskBarIcon.SetIcon(self.icon, tooltip=self.Tooltip)
|
||||||
# Tooltip
|
# Tooltip
|
||||||
# if tooltip is not None:
|
# if tooltip is not None:
|
||||||
# self.TrayIcon.setToolTip(str(tooltip))
|
# self.TrayIcon.setToolTip(str(tooltip))
|
||||||
|
@ -3025,17 +3014,17 @@ class Window:
|
||||||
self.TimerCancelled = False
|
self.TimerCancelled = False
|
||||||
self.DisableClose = disable_close
|
self.DisableClose = disable_close
|
||||||
self._Hidden = False
|
self._Hidden = False
|
||||||
self.QTApplication = None
|
# self.QTApplication = None
|
||||||
self.QT_QMainWindow = None
|
# self.QT_QMainWindow = None
|
||||||
self._Size=size
|
self._Size=size
|
||||||
self.ElementPadding = element_padding or DEFAULT_ELEMENT_PADDING
|
self.ElementPadding = element_padding or DEFAULT_ELEMENT_PADDING
|
||||||
self.FocusElement = None
|
self.FocusElement = None
|
||||||
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
|
self.App = None # type: wx.App
|
||||||
self.MasterFrame = None
|
self.MasterFrame = None # type: wx.Frame
|
||||||
self.MasterPanel = None
|
self.MasterPanel = None # type wx.Panel
|
||||||
self.IgnoreClose = False
|
self.IgnoreClose = False
|
||||||
|
|
||||||
|
|
||||||
|
@ -3240,7 +3229,7 @@ class Window:
|
||||||
timer = None
|
timer = None
|
||||||
self.CurrentlyRunningMainloop = True
|
self.CurrentlyRunningMainloop = True
|
||||||
# print(f'In main {self.Title}')
|
# print(f'In main {self.Title}')
|
||||||
################################# CALL GUWxTextControlI MAINLOOP ############################
|
################################# CALL GUWxTextCtrlI MAINLOOP ############################
|
||||||
self.App.MainLoop()
|
self.App.MainLoop()
|
||||||
self.CurrentlyRunningMainloop = False
|
self.CurrentlyRunningMainloop = False
|
||||||
self.TimerCancelled = True
|
self.TimerCancelled = True
|
||||||
|
@ -3285,7 +3274,7 @@ class Window:
|
||||||
timer.Start(milliseconds=0, oneShot=wx.TIMER_ONE_SHOT)
|
timer.Start(milliseconds=0, oneShot=wx.TIMER_ONE_SHOT)
|
||||||
self.CurrentlyRunningMainloop = True
|
self.CurrentlyRunningMainloop = True
|
||||||
# print(f'In main {self.Title}')
|
# print(f'In main {self.Title}')
|
||||||
################################# CALL GUWxTextControlI MAINLOOP ############################
|
################################# CALL GUWxTextCtrlI MAINLOOP ############################
|
||||||
|
|
||||||
self.App.MainLoop()
|
self.App.MainLoop()
|
||||||
if Window.stdout_is_rerouted:
|
if Window.stdout_is_rerouted:
|
||||||
|
@ -3878,10 +3867,11 @@ def BuildResults(form, initialize_only, top_level_form):
|
||||||
form.DictionaryKeyCounter = 0
|
form.DictionaryKeyCounter = 0
|
||||||
form.ReturnValuesDictionary = {}
|
form.ReturnValuesDictionary = {}
|
||||||
form.ReturnValuesList = []
|
form.ReturnValuesList = []
|
||||||
try:
|
|
||||||
BuildResultsForSubform(form, initialize_only, top_level_form)
|
BuildResultsForSubform(form, initialize_only, top_level_form)
|
||||||
except:
|
# try:
|
||||||
print('Error building return values')
|
# BuildResultsForSubform(form, initialize_only, top_level_form)
|
||||||
|
# except:
|
||||||
|
# print('Error building return values')
|
||||||
if not top_level_form.LastButtonClickedWasRealtime:
|
if not top_level_form.LastButtonClickedWasRealtime:
|
||||||
top_level_form.LastButtonClicked = None
|
top_level_form.LastButtonClicked = None
|
||||||
return form.ReturnValues
|
return form.ReturnValues
|
||||||
|
@ -3944,9 +3934,9 @@ def BuildResultsForSubform(form, initialize_only, top_level_form):
|
||||||
|
|
||||||
if not initialize_only:
|
if not initialize_only:
|
||||||
if element.Type == ELEM_TYPE_INPUT_TEXT:
|
if element.Type == ELEM_TYPE_INPUT_TEXT:
|
||||||
value = element.WxTextControl.GetValue()
|
value = element.WxTextCtrl.GetValue()
|
||||||
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.WxTextControl.SetValue('')
|
element.WxTextCtrl.SetValue('')
|
||||||
elif element.Type == ELEM_TYPE_INPUT_CHECKBOX:
|
elif element.Type == ELEM_TYPE_INPUT_CHECKBOX:
|
||||||
value = element.WxCheckbox.GetValue()
|
value = element.WxCheckbox.GetValue()
|
||||||
value = (value != 0)
|
value = (value != 0)
|
||||||
|
@ -3978,19 +3968,17 @@ def BuildResultsForSubform(form, initialize_only, top_level_form):
|
||||||
except:
|
except:
|
||||||
value = ''
|
value = ''
|
||||||
elif element.Type == ELEM_TYPE_INPUT_SPIN:
|
elif element.Type == ELEM_TYPE_INPUT_SPIN:
|
||||||
try:
|
value = element.WxTextCtrl.GetValue()
|
||||||
value = element.TKStringVar.get()
|
# value = element.CurrentValue
|
||||||
except:
|
|
||||||
value = 0
|
|
||||||
elif element.Type == ELEM_TYPE_INPUT_SLIDER:
|
elif element.Type == ELEM_TYPE_INPUT_SLIDER:
|
||||||
try:
|
try:
|
||||||
value = element.TKIntVar.get()
|
value = element.TKIntVar.get()
|
||||||
except:
|
except:
|
||||||
value = 0
|
value = 0
|
||||||
elif element.Type == ELEM_TYPE_INPUT_MULTILINE:
|
elif element.Type == ELEM_TYPE_INPUT_MULTILINE:
|
||||||
value = element.WxTextControl.GetValue()
|
value = element.WxTextCtrl.GetValue()
|
||||||
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.WxTextControl.SetValue('')
|
element.WxTextCtrl.SetValue('')
|
||||||
elif element.Type == ELEM_TYPE_TAB_GROUP:
|
elif element.Type == ELEM_TYPE_TAB_GROUP:
|
||||||
try:
|
try:
|
||||||
value = element.TKNotebook.tab(element.TKNotebook.index('current'))['text']
|
value = element.TKNotebook.tab(element.TKNotebook.index('current'))['text']
|
||||||
|
@ -4373,12 +4361,12 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
# ------------------------- COLUMN element ------------------------- #
|
# ------------------------- COLUMN element ------------------------- #
|
||||||
if element_type == ELEM_TYPE_COLUMN:
|
if element_type == ELEM_TYPE_COLUMN:
|
||||||
element = element # type: Column
|
element = element # type: Column
|
||||||
# element.WxBoxSizer = vsizer = wx.BoxSizer(wx.VERTICAL)
|
|
||||||
element.WxBoxSizer = vsizer = wx.BoxSizer(wx.VERTICAL)
|
element.WxBoxSizer = vsizer = wx.BoxSizer(wx.VERTICAL)
|
||||||
element.WxHSizer = hsizer
|
element.WxHSizer = hsizer
|
||||||
|
# element.WxScrollBar = wx.ScrollBar(toplevel_form.MasterFrame, id=wx.ID_ANY, style=wx.SB_VERTICAL)
|
||||||
|
# vsizer.Add(element.WxScrollBar)
|
||||||
PackFormIntoFrame(element, vsizer, toplevel_form)
|
PackFormIntoFrame(element, vsizer, toplevel_form)
|
||||||
if element.Size != (None, None):
|
|
||||||
vsizer.SetMinSize(element.Size)
|
|
||||||
hsizer.Add(pad_widget(vsizer), 0)
|
hsizer.Add(pad_widget(vsizer), 0)
|
||||||
if not element.Visible:
|
if not element.Visible:
|
||||||
hsizer.Hide(vsizer, recursive=True)
|
hsizer.Hide(vsizer, recursive=True)
|
||||||
|
@ -4596,7 +4584,7 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
if element.PasswordCharacter:
|
if element.PasswordCharacter:
|
||||||
justify |= wx.TE_PASSWORD
|
justify |= wx.TE_PASSWORD
|
||||||
|
|
||||||
element.WxTextControl = text_ctrl = wx.TextCtrl(toplevel_form.MasterPanel, style=justify)
|
element.WxTextCtrl = text_ctrl = wx.TextCtrl(toplevel_form.MasterPanel, style=justify)
|
||||||
|
|
||||||
if element.DefaultText:
|
if element.DefaultText:
|
||||||
text_ctrl.SetValue(element.DefaultText)
|
text_ctrl.SetValue(element.DefaultText)
|
||||||
|
@ -4707,30 +4695,6 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
# element.TKCombo['state'] = 'disabled'
|
# element.TKCombo['state'] = 'disabled'
|
||||||
# if element.Tooltip is not None:
|
# if element.Tooltip is not None:
|
||||||
# element.TooltipObject = ToolTip(element.TKCombo, text=element.Tooltip, timeout=DEFAULT_TOOLTIP_TIME)
|
# element.TooltipObject = ToolTip(element.TKCombo, text=element.Tooltip, timeout=DEFAULT_TOOLTIP_TIME)
|
||||||
# ------------------------- OPTION MENU (Like ComboBox but different) element ------------------------- #
|
|
||||||
elif element_type == ELEM_TYPE_INPUT_OPTION_MENU:
|
|
||||||
pass
|
|
||||||
# max_line_len = max([len(str(l)) for l in element.Values])
|
|
||||||
# if auto_size_text is False:
|
|
||||||
# width = element_size[0]
|
|
||||||
# else:
|
|
||||||
# width = max_line_len
|
|
||||||
# element.TKStringVar = tk.StringVar()
|
|
||||||
# default = element.DefaultValue if element.DefaultValue else element.Values[0]
|
|
||||||
# element.TKStringVar.set(default)
|
|
||||||
# element.TKOptionMenu = tk.OptionMenu(tk_row_frame, element.TKStringVar, *element.Values)
|
|
||||||
# element.TKOptionMenu.config(highlightthickness=0, font=font, width=width)
|
|
||||||
# element.TKOptionMenu.config(borderwidth=border_depth)
|
|
||||||
# if element.BackgroundColor is not None and element.BackgroundColor != COLOR_SYSTEM_DEFAULT:
|
|
||||||
# element.TKOptionMenu.configure(background=element.BackgroundColor)
|
|
||||||
# if element.TextColor != COLOR_SYSTEM_DEFAULT and element.TextColor is not None:
|
|
||||||
# element.TKOptionMenu.configure(fg=element.TextColor)
|
|
||||||
# element.TKOptionMenu.pack(side=tk.LEFT, padx=element.Pad[0], pady=element.Pad[1])
|
|
||||||
# if element.Disabled == True:
|
|
||||||
# element.TKOptionMenu['state'] = 'disabled'
|
|
||||||
# if element.Tooltip is not None:
|
|
||||||
# element.TooltipObject = ToolTip(element.TKOptionMenu, text=element.Tooltip,
|
|
||||||
# timeout=DEFAULT_TOOLTIP_TIME)
|
|
||||||
# # ------------------------- LISTBOX element ------------------------- #
|
# # ------------------------- LISTBOX element ------------------------- #
|
||||||
elif element_type == ELEM_TYPE_INPUT_LISTBOX:
|
elif element_type == ELEM_TYPE_INPUT_LISTBOX:
|
||||||
pass
|
pass
|
||||||
|
@ -4773,7 +4737,7 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
if element.EnterSubmits:
|
if element.EnterSubmits:
|
||||||
justify |= wx.TE_PROCESS_ENTER
|
justify |= wx.TE_PROCESS_ENTER
|
||||||
justify |= wx.TE_MULTILINE
|
justify |= wx.TE_MULTILINE
|
||||||
element.WxTextControl = text_ctrl = wx.TextCtrl(toplevel_form.MasterPanel, style=justify)
|
element.WxTextCtrl = text_ctrl = wx.TextCtrl(toplevel_form.MasterPanel, style=justify)
|
||||||
|
|
||||||
if element.DefaultText:
|
if element.DefaultText:
|
||||||
text_ctrl.SetValue(element.DefaultText)
|
text_ctrl.SetValue(element.DefaultText)
|
||||||
|
@ -4809,11 +4773,11 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
if element.EnterSubmits:
|
if element.EnterSubmits:
|
||||||
style |= wx.TE_PROCESS_ENTER
|
style |= wx.TE_PROCESS_ENTER
|
||||||
style |= wx.TE_MULTILINE | wx.TE_READONLY
|
style |= wx.TE_MULTILINE | wx.TE_READONLY
|
||||||
element.WxTextControl = text_ctrl = wx.TextCtrl(toplevel_form.MasterPanel, style=style)
|
element.WxTextCtrl = text_ctrl = wx.TextCtrl(toplevel_form.MasterPanel, style=style)
|
||||||
if element.DefaultText:
|
if element.DefaultText:
|
||||||
text_ctrl.SetValue(element.DefaultText)
|
text_ctrl.SetValue(element.DefaultText)
|
||||||
|
|
||||||
do_font_and_color(element.WxTextControl)
|
do_font_and_color(element.WxTextCtrl)
|
||||||
|
|
||||||
if element.ChangeSubmits:
|
if element.ChangeSubmits:
|
||||||
text_ctrl.Bind(wx.EVT_KEY_UP, element.WxCallbackKeyboard)
|
text_ctrl.Bind(wx.EVT_KEY_UP, element.WxCallbackKeyboard)
|
||||||
|
@ -4834,9 +4798,9 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
style = 0
|
style = 0
|
||||||
style |= wx.TE_MULTILINE | wx.TE_READONLY
|
style |= wx.TE_MULTILINE | wx.TE_READONLY
|
||||||
style = wx.TE_MULTILINE | wx.TE_READONLY | wx.HSCROLL
|
style = wx.TE_MULTILINE | wx.TE_READONLY | wx.HSCROLL
|
||||||
element.WxTextControl = text_ctrl = wx.TextCtrl(toplevel_form.MasterPanel, style=style)
|
element.WxTextCtrl = text_ctrl = wx.TextCtrl(toplevel_form.MasterPanel, style=style)
|
||||||
|
|
||||||
do_font_and_color(element.WxTextControl)
|
do_font_and_color(element.WxTextCtrl)
|
||||||
|
|
||||||
sizer = pad_widget(text_ctrl)
|
sizer = pad_widget(text_ctrl)
|
||||||
|
|
||||||
|
@ -4885,28 +4849,41 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
if element.InitialState:
|
if element.InitialState:
|
||||||
widget.SetValue(True)
|
widget.SetValue(True)
|
||||||
|
|
||||||
# ------------------------- INPUT SPIN Box element ------------------------- #
|
# ------------------------- INPUT SPINNER element ------------------------- #
|
||||||
elif element_type == ELEM_TYPE_INPUT_SPIN:
|
elif element_type == ELEM_TYPE_INPUT_SPIN:
|
||||||
pass
|
element = element # type:Spin
|
||||||
# width, height = element_size
|
######## First make an Input widget that will be used to display the text ########
|
||||||
# width = 0 if auto_size_text else element_size[0]
|
style = wx.ALIGN_RIGHT
|
||||||
# element.TKStringVar = tk.StringVar()
|
if element.ReadOnly:
|
||||||
# element.TKSpinBox = tk.Spinbox(tk_row_frame, values=element.Values, textvariable=element.TKStringVar,
|
style |= wx.TE_READONLY
|
||||||
# width=width, bd=border_depth)
|
element.WxTextCtrl = text_ctrl = wx.TextCtrl(toplevel_form.MasterPanel, style=style)
|
||||||
# element.TKStringVar.set(element.DefaultValue)
|
do_font_and_color(element.WxTextCtrl)
|
||||||
# element.TKSpinBox.configure(font=font) # set wrap to width of widget
|
if element.ChangeSubmits:
|
||||||
# if element.BackgroundColor is not None and element.BackgroundColor != COLOR_SYSTEM_DEFAULT:
|
text_ctrl.Bind(wx.EVT_KEY_UP, element.WxCallbackKeyboard)
|
||||||
# element.TKSpinBox.configure(background=element.BackgroundColor)
|
text_ctrl.Bind(wx.EVT_TEXT_ENTER, element.ReturnKeyHandler)
|
||||||
# element.TKSpinBox.pack(side=tk.LEFT, padx=element.Pad[0], pady=element.Pad[1])
|
if element.DefaultValue:
|
||||||
# if text_color is not None and text_color != COLOR_SYSTEM_DEFAULT:
|
text_ctrl.SetValue(element.DefaultValue)
|
||||||
# element.TKSpinBox.configure(fg=text_color)
|
element.CurrentValue = element.DefaultValue
|
||||||
# if element.ChangeSubmits:
|
saved_pad = full_element_pad
|
||||||
# element.TKSpinBox.bind('<ButtonRelease-1>', element.SpinChangedHandler)
|
full_element_pad[3] = 0 # set right padding to 0
|
||||||
# if element.Disabled == True:
|
hsizer.Add(pad_widget(text_ctrl), 0)
|
||||||
# element.TKSpinBox['state'] = 'disabled'
|
|
||||||
# if element.Tooltip is not None:
|
full_element_pad = saved_pad
|
||||||
# element.TooltipObject = ToolTip(element.TKSpinBox, text=element.Tooltip,
|
######## Now make a "Spin Button" that has the arrows ########
|
||||||
# timeout=DEFAULT_TOOLTIP_TIME)
|
# element.WxSpinCtrl = widget = wx.SpinCtrl(toplevel_form.MasterPanel, style=wx.SP_WRAP|wx.SP_ARROW_KEYS)
|
||||||
|
element.WxSpinCtrl = widget = wx.SpinButton(toplevel_form.MasterPanel, style=wx.SP_WRAP|wx.SP_ARROW_KEYS)
|
||||||
|
do_font_and_color(element.WxSpinCtrl)
|
||||||
|
element.WxSpinCtrl.SetRange(0, len(element.Values)-1)
|
||||||
|
if element.DefaultValue:
|
||||||
|
element.WxSpinCtrl.SetValue(element.Values.index(element.DefaultValue))
|
||||||
|
widget.SetMinSize((25,25))
|
||||||
|
|
||||||
|
widget.Bind(wx.EVT_SPIN, element.WxSpinCallback)
|
||||||
|
saved_pad = full_element_pad
|
||||||
|
full_element_pad[1] = 0 # trying to set left pad to 0 but doesn't seem to work
|
||||||
|
hsizer.Add(pad_widget(widget), 0)
|
||||||
|
full_element_pad = saved_pad
|
||||||
|
|
||||||
# ------------------------- IMAGE element ------------------------- #
|
# ------------------------- IMAGE element ------------------------- #
|
||||||
elif element_type == ELEM_TYPE_IMAGE:
|
elif element_type == ELEM_TYPE_IMAGE:
|
||||||
pass
|
pass
|
||||||
|
@ -5302,8 +5279,8 @@ def StartupTK(window:Window):
|
||||||
else:
|
else:
|
||||||
frame = wx.Frame(None, title=window.Title)
|
frame = wx.Frame(None, title=window.Title)
|
||||||
|
|
||||||
panel = wx.Panel(frame)
|
panel = wx.Panel(frame, -1, style=wx.TRANSPARENT_WINDOW)
|
||||||
|
panel.SetTransparent(.5)
|
||||||
if window.GrabAnywhere:
|
if window.GrabAnywhere:
|
||||||
panel.Bind(wx.EVT_MOTION, frame.on_mouse)
|
panel.Bind(wx.EVT_MOTION, frame.on_mouse)
|
||||||
|
|
||||||
|
@ -6331,9 +6308,9 @@ def Popup(*args, title=None, button_color=None, background_color=None, text_colo
|
||||||
|
|
||||||
if non_blocking:
|
if non_blocking:
|
||||||
button, values = window.Read(timeout=0)
|
button, values = window.Read(timeout=0)
|
||||||
|
return button, window
|
||||||
else:
|
else:
|
||||||
button, values = window.Read()
|
button, values = window.Read()
|
||||||
|
|
||||||
return button
|
return button
|
||||||
|
|
||||||
|
|
||||||
|
@ -6399,7 +6376,7 @@ def PopupNonBlocking(*args, button_type=POPUP_BUTTONS_OK, button_color=None, bac
|
||||||
:param location:
|
:param location:
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
Popup(*args, button_color=button_color, background_color=background_color, text_color=text_color,
|
return Popup(*args, button_color=button_color, background_color=background_color, text_color=text_color,
|
||||||
button_type=button_type,
|
button_type=button_type,
|
||||||
auto_close=auto_close, auto_close_duration=auto_close_duration, non_blocking=non_blocking, icon=icon,
|
auto_close=auto_close, auto_close_duration=auto_close_duration, non_blocking=non_blocking, icon=icon,
|
||||||
line_width=line_width,
|
line_width=line_width,
|
||||||
|
@ -6851,14 +6828,19 @@ def PopupGetText(message, title=None, default_text='', password_char='', size=(N
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
# ChangeLookAndFeel('Black')
|
ChangeLookAndFeel('GreenTan')
|
||||||
layout = [[Text('TEXT1',tooltip='Tooltip'), Text('TEXT2', )],
|
layout = [
|
||||||
[Text('You should be importing it rather than running it', justification='l', size=(50, 1))],
|
[Text('Welcome to PySimpleGUI!', font='Arial 15', text_color='red')],
|
||||||
|
[Text('You should be importing this module rather than running it', justification='l', size=(50, 1))],
|
||||||
[Text('Here is your sample input window....')],
|
[Text('Here is your sample input window....')],
|
||||||
[Text('Source Folder', size=(15, 1), justification='right'), InputText('Source', focus=True),
|
[Text('Source Folder', size=(15, 1), justification='right'), InputText('Source', focus=True),
|
||||||
FileBrowse()],
|
FileBrowse()],
|
||||||
[Text('Destination Folder', size=(15, 1), justification='right'), InputText('Dest'), FolderBrowse()],
|
[Text('Destination Folder', size=(15, 1), justification='right'), InputText('Dest'), FolderBrowse()],
|
||||||
[Button('Ok')]]
|
[Combo(values=['Combo 1', 'Combo 2', 'Combo 3'], default_value='Combo 2', key='_COMBO_',
|
||||||
|
enable_events=True, readonly=False, tooltip='Combo box', disabled=False, font='Courier 18',
|
||||||
|
size=(12, 1))],
|
||||||
|
[Spin(values=['Spin a', 'Spin b', 'Spin c'], font='ANY 15', key='_SPIN_', size=(10, 1), enable_events=True)],
|
||||||
|
[Button('Ok'), Button('Exit')]]
|
||||||
|
|
||||||
window = Window('Demo window..',
|
window = Window('Demo window..',
|
||||||
default_element_size=(35,1),
|
default_element_size=(35,1),
|
||||||
|
@ -6869,8 +6851,12 @@ def main():
|
||||||
disable_minimize=True,
|
disable_minimize=True,
|
||||||
grab_anywhere=True,
|
grab_anywhere=True,
|
||||||
).Layout(layout)
|
).Layout(layout)
|
||||||
|
|
||||||
|
while True:
|
||||||
event, values = window.Read()
|
event, values = window.Read()
|
||||||
print(event, values)
|
print(event, values)
|
||||||
|
if event in (None, 'Exit'):
|
||||||
|
break
|
||||||
window.Close()
|
window.Close()
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue