Permalink
Browse files

Merge pull request #679 from MikeTheWatchGuy/Dev-latest

Dev latest
  • Loading branch information...
MikeTheWatchGuy committed Nov 8, 2018
2 parents 5f033c6 + 32254b3 commit 2736e6a2b837eac0de64691d3bcc2d8710431fbc
Showing with 37 additions and 16 deletions.
  1. +14 −8 PySimpleGUI.py
  2. +23 −8 PySimpleGUIQt/PySimpleGUIQt.py
@@ -2128,21 +2128,25 @@ def __del__(self):
# TkScrollableFrame (Used by Column) #
# ---------------------------------------------------------------------- #
class TkScrollableFrame(tk.Frame):
def __init__(self, master, **kwargs):
def __init__(self, master, vertical_only, **kwargs):
tk.Frame.__init__(self, master, **kwargs)
# create a canvas object and a vertical scrollbar for scrolling it
self.vscrollbar = tk.Scrollbar(self, orient=tk.VERTICAL)
self.vscrollbar.pack(side='right', fill="y", expand="false")
self.hscrollbar = tk.Scrollbar(self, orient=tk.HORIZONTAL)
self.hscrollbar.pack(side='bottom', fill="x", expand="false")
if not vertical_only:
self.hscrollbar = tk.Scrollbar(self, orient=tk.HORIZONTAL)
self.hscrollbar.pack(side='bottom', fill="x", expand="false")
self.canvas = tk.Canvas(self, yscrollcommand=self.vscrollbar.set, xscrollcommand=self.hscrollbar.set)
else:
self.canvas = tk.Canvas(self, yscrollcommand=self.vscrollbar.set)
self.canvas = tk.Canvas(self, yscrollcommand=self.vscrollbar.set, xscrollcommand=self.hscrollbar.set)
self.canvas.pack(side="left", fill="both", expand=True)
self.vscrollbar.config(command=self.canvas.yview)
self.hscrollbar.config(command=self.canvas.xview)
if not vertical_only:
self.hscrollbar.config(command=self.canvas.xview)
# reset the view
self.canvas.xview_moveto(0)
@@ -2164,7 +2168,8 @@ def __init__(self, master, **kwargs):
self.bind('<Configure>', self.set_scrollregion)
self.bind_mouse_scroll(self.canvas, self.yscroll)
self.bind_mouse_scroll(self.hscrollbar, self.xscroll)
if not vertical_only:
self.bind_mouse_scroll(self.hscrollbar, self.xscroll)
self.bind_mouse_scroll(self.vscrollbar, self.yscroll)
def resize_frame(self, e):
@@ -2198,7 +2203,7 @@ def set_scrollregion(self, event=None):
# Column #
# ---------------------------------------------------------------------- #
class Column(Element):
def __init__(self, layout, background_color=None, size=(None, None), pad=None, scrollable=False, key=None):
def __init__(self, layout, background_color=None, size=(None, None), pad=None, scrollable=False, vertical_scroll_only=False, key=None):
'''
Column Element
:param layout:
@@ -2217,6 +2222,7 @@ def __init__(self, layout, background_color=None, size=(None, None), pad=None, s
self.Rows = []
self.TKFrame = None
self.Scrollable = scrollable
self.VerticalScrollOnly = vertical_scroll_only
# self.ImageFilename = image_filename
# self.ImageData = image_data
# self.ImageSize = image_size
@@ -3968,7 +3974,7 @@ def CharWidthInPixels():
# ------------------------- COLUMN element ------------------------- #
if element_type == ELEM_TYPE_COLUMN:
if element.Scrollable:
col_frame = TkScrollableFrame(tk_row_frame) # do not use yet! not working
col_frame = TkScrollableFrame(tk_row_frame, element.VerticalScrollOnly) # do not use yet! not working
PackFormIntoFrame(element, col_frame.TKFrame, toplevel_form)
col_frame.TKFrame.update()
if element.Size == (None, None): # if no size specified, use column width x column height/2
@@ -2570,7 +2570,7 @@ def _TimeoutAlarmCallback(self):
def Read(self, timeout=None, timeout_key=TIMEOUT_KEY):
if timeout == 0: # timeout of zero runs the old readnonblocking
event, values = self.ReadNonBlocking()
event, values = self._ReadNonBlocking()
if event is None:
event = timeout_key
if values is None:
@@ -2636,11 +2636,13 @@ def Read(self, timeout=None, timeout_key=TIMEOUT_KEY):
else:
return self.ReturnValues
def ReadNonBlocking(self):
def _ReadNonBlocking(self):
if self.TKrootDestroyed:
return None, None
if not self.Shown:
self.Show(non_blocking=True)
else:
self.QTApplication.processEvents() # refresh the window
if 0: # TODO add window closed with X logic
self.TKrootDestroyed = True
_my_windows.Decrement()
@@ -3267,7 +3269,7 @@ def BuildResultsForSubform(form, initialize_only, top_level_form):
value = 0
elif element.Type == ELEM_TYPE_INPUT_LISTBOX:
try:
value= [element.QT_ListWidget.currentItem().text(),]
value= [item.text() for item in element.QT_ListWidget.selectedItems()]
except:
value = []
elif element.Type == ELEM_TYPE_INPUT_SPIN:
@@ -3552,22 +3554,31 @@ def PackFormIntoFrame(window, containing_frame, toplevel_win):
element_pad = full_element_pad
# ------------------------- COLUMN element ------------------------- #
if element_type == ELEM_TYPE_COLUMN:
column_widget = QWidget()
# column_widget = QWidget()
column_widget = QGroupBox()
# column_widget.setFrameShape(QtWidgets.QFrame.NoFrame)
style = ''
if font is not None:
style += 'font-family: %s;'%font[0]
style += 'font-size: %spt;'%font[1]
if element.BackgroundColor is not None:
style += 'background-color: %s;' % element.BackgroundColor
style += 'border: 0px solid gray; '
column_widget.setStyleSheet(style)
# print(style)
column_layout = QFormLayout()
column_vbox = QVBoxLayout()
PackFormIntoFrame(element, column_layout, toplevel_win)
column_vbox.addLayout(column_layout)
column_widget.setLayout(column_vbox)
column_widget.setStyleSheet(style)
qt_row_layout.addWidget(column_widget)
# ------------------------- TEXT element ------------------------- #
elif element_type == ELEM_TYPE_TEXT:
@@ -3623,7 +3634,8 @@ def PackFormIntoFrame(window, containing_frame, toplevel_win):
qt_row_layout.addWidget(element.QT_QPushButton)
element.QT_QPushButton.setContentsMargins(*full_element_pad)
if element.Tooltip:
element.QT_QPushButton.setToolTip(element.Tooltip)
element.QT_QPushButton.clicked.connect(element.ButtonCallBack)
# element.QT_QPushButton.clicked.connect(window.QTApplication.exit)
# ------------------------- INPUT (Single Line) element ------------------------- #
@@ -4118,10 +4130,13 @@ def StartupTK(window):
if window.FocusElement is not None:
window.FocusElement.setFocus()
window.QTWindow.show() ####### The thing that causes the window to be visible ######
if not window.NonBlocking:
window.QTWindow.show() ####### The thing that causes the window to be visible ######
window.QTApplication.exec_()
else:
window.QTWindow.show() ####### The thing that causes the window to be visible ######
window.QTApplication.processEvents()
window.QTApplication.exec_()
window.CurrentlyRunningMainloop = False

0 comments on commit 2736e6a

Please sign in to comment.