0.13.0
This commit is contained in:
parent
d62b1980d9
commit
327c48d428
|
@ -504,6 +504,7 @@ class InputText(Element):
|
||||||
self.DefaultText = value
|
self.DefaultText = value
|
||||||
|
|
||||||
def Get(self):
|
def Get(self):
|
||||||
|
return self.QT_QLineEdit.text()
|
||||||
return self.QT_QLineEdit.text()
|
return self.QT_QLineEdit.text()
|
||||||
# return self.TKStringVar.get()
|
# return self.TKStringVar.get()
|
||||||
|
|
||||||
|
@ -969,33 +970,33 @@ class Multiline(Element, QWidget):
|
||||||
key = event.key()
|
key = event.key()
|
||||||
if key in (Qt.Key_Return, Qt.Key_Enter):
|
if key in (Qt.Key_Return, Qt.Key_Enter):
|
||||||
self.Element.ReturnKeyHandler(0)
|
self.Element.ReturnKeyHandler(0)
|
||||||
# self.Element.ParentForm.LastButtonClicked = self.Element.Key
|
|
||||||
# self.Element.ParentForm.FormRemainedOpen = True
|
|
||||||
# if self.Element.ParentForm.CurrentlyRunningMainloop:
|
|
||||||
# self.Element.ParentForm.QTApplication.exit()
|
|
||||||
if event.type() == QEvent.FocusIn and widget is self.QT_TextEdit:
|
if event.type() == QEvent.FocusIn and widget is self.QT_TextEdit:
|
||||||
self.Element.ParentForm.FocusElement = self.Element
|
self.Element.ParentForm.FocusElement = self.Element
|
||||||
print('Multiline got focus')
|
|
||||||
|
|
||||||
return QWidget.eventFilter(self, widget, event)
|
return QWidget.eventFilter(self, widget, event)
|
||||||
|
|
||||||
|
|
||||||
|
def QtCallbackTextChanged(self):
|
||||||
|
if not self.ChangeSubmits:
|
||||||
|
return
|
||||||
|
element_callback_quit_mainloop(self)
|
||||||
|
|
||||||
|
|
||||||
def Update(self, value=None, disabled=None, append=False, font=None):
|
def Update(self, value=None, disabled=None, append=False, font=None):
|
||||||
if value is not None:
|
if value is not None and not append:
|
||||||
self.DefaultText = value
|
self.DefaultText = value
|
||||||
self.QT_TextEdit.setText(str(value))
|
self.QT_TextEdit.setText(str(value))
|
||||||
|
elif value is not None and append:
|
||||||
|
self.DefaultText = value
|
||||||
|
self.QT_TextEdit.setText(self.QT_TextEdit.toPlainText() + str(value))
|
||||||
if self.Autoscroll:
|
if self.Autoscroll:
|
||||||
pass
|
pass
|
||||||
if disabled == True:
|
if disabled == True:
|
||||||
pass
|
self.QT_TextEdit.setDisabled(True)
|
||||||
elif disabled == False:
|
elif disabled == False:
|
||||||
pass
|
self.QT_TextEdit.setDisabled(False)
|
||||||
if font is not None:
|
|
||||||
pass
|
|
||||||
|
|
||||||
def Get(self):
|
def Get(self):
|
||||||
self.QT_TextEdit.Text()
|
self.QT_TextEdit.toPlainText()
|
||||||
|
|
||||||
def SetFocus(self):
|
def SetFocus(self):
|
||||||
self.QT_TextEdit.setFocus()
|
self.QT_TextEdit.setFocus()
|
||||||
|
@ -1044,25 +1045,23 @@ class MultilineOutput(Element):
|
||||||
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)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
def Update(self, value=None, disabled=None, append=False, font=None):
|
def Update(self, value=None, disabled=None, append=False, font=None):
|
||||||
if value is not None:
|
if value is not None and not append:
|
||||||
self.DefaultText = value
|
self.QT_TextBrowser.setText(str(value))
|
||||||
self.QT_TextBrowser.insertPlainText(value)
|
elif value is not None and append:
|
||||||
|
self.QT_TextBrowser.insertPlainText(str(value))
|
||||||
self.QT_TextBrowser.moveCursor(QtGui.QTextCursor.End)
|
self.QT_TextBrowser.moveCursor(QtGui.QTextCursor.End)
|
||||||
|
# self.QT_TextBrowser.setText(self.QT_TextBrowser.toPlainText() + str(value))
|
||||||
if self.Autoscroll:
|
if self.Autoscroll:
|
||||||
pass
|
pass
|
||||||
if disabled == True:
|
if disabled == True:
|
||||||
pass
|
self.QT_TextBrowser.setDisabled(True)
|
||||||
elif disabled == False:
|
elif disabled == False:
|
||||||
pass
|
self.QT_TextBrowser.setDisabled(False)
|
||||||
if font is not None:
|
|
||||||
pass
|
|
||||||
|
|
||||||
def Get(self):
|
def Get(self):
|
||||||
pass
|
self.QT_TextBrowser.toPlainText()
|
||||||
|
|
||||||
def SetFocus(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def __del__(self):
|
def __del__(self):
|
||||||
super().__del__()
|
super().__del__()
|
||||||
|
@ -1108,13 +1107,11 @@ class Text(Element):
|
||||||
text_color=self.TextColor, pad=pad, key=key, tooltip=tooltip)
|
text_color=self.TextColor, pad=pad, key=key, tooltip=tooltip)
|
||||||
return
|
return
|
||||||
|
|
||||||
def QtCallbackTextClicked(self):
|
def QtCallbackTextClicked(self, event):
|
||||||
if not self.ClickSubmits:
|
if not self.ClickSubmits:
|
||||||
return
|
return
|
||||||
element_callback_quit_mainloop(self)
|
element_callback_quit_mainloop(self)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
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):
|
||||||
if value is not None:
|
if value is not None:
|
||||||
self.DisplayText = str(value)
|
self.DisplayText = str(value)
|
||||||
|
@ -2871,7 +2868,7 @@ class Window:
|
||||||
self.LastButtonClicked = None
|
self.LastButtonClicked = None
|
||||||
return results
|
return results
|
||||||
else:
|
else:
|
||||||
if not self.XFound and self.Timeout != 0 and self.Timeout is not None: # Special Qt case because returning for no reason so fake timeout
|
if not self.XFound and self.Timeout != 0 and self.Timeout is not None and self.ReturnValues[0] is None: # Special Qt case because returning for no reason so fake timeout
|
||||||
self.ReturnValues = self.TimeoutKey, self.ReturnValues[1] # fake a timeout
|
self.ReturnValues = self.TimeoutKey, self.ReturnValues[1] # fake a timeout
|
||||||
return self.ReturnValues
|
return self.ReturnValues
|
||||||
|
|
||||||
|
@ -3918,7 +3915,7 @@ def PackFormIntoFrame(window, containing_frame, toplevel_win):
|
||||||
element.QT_Label.setStyleSheet(style)
|
element.QT_Label.setStyleSheet(style)
|
||||||
|
|
||||||
if element.ClickSubmits:
|
if element.ClickSubmits:
|
||||||
qlabel.linkActivated.connect(element.QtCallbackTextClicked)
|
element.QT_Label.mousePressEvent = element.QtCallbackTextClicked
|
||||||
|
|
||||||
if element.Relief is not None:
|
if element.Relief is not None:
|
||||||
if element.Relief in (RELIEF_RIDGE, RELIEF_RAISED):
|
if element.Relief in (RELIEF_RIDGE, RELIEF_RAISED):
|
||||||
|
@ -4002,6 +3999,9 @@ def PackFormIntoFrame(window, containing_frame, toplevel_win):
|
||||||
focus_set = True
|
focus_set = True
|
||||||
toplevel_win.FocusElement = element.QT_QLineEdit
|
toplevel_win.FocusElement = element.QT_QLineEdit
|
||||||
|
|
||||||
|
if element.Disabled:
|
||||||
|
element.QT_QLineEdit.setDisabled(True)
|
||||||
|
|
||||||
if element.ChangeSubmits:
|
if element.ChangeSubmits:
|
||||||
element.QT_QLineEdit.textChanged.connect(element.QtCallbackTextChanged)
|
element.QT_QLineEdit.textChanged.connect(element.QtCallbackTextChanged)
|
||||||
|
|
||||||
|
@ -4105,16 +4105,21 @@ def PackFormIntoFrame(window, containing_frame, toplevel_win):
|
||||||
if element_size[1] is not None:
|
if element_size[1] is not None:
|
||||||
element.QT_TextEdit.setFixedHeight(element_size[1])
|
element.QT_TextEdit.setFixedHeight(element_size[1])
|
||||||
|
|
||||||
element.QT_TextEdit.setPlaceholderText(default_text)
|
if element.Disabled:
|
||||||
qt_row_layout.setContentsMargins(*full_element_pad)
|
element.QT_TextEdit.setDisabled(True)
|
||||||
|
|
||||||
element.MultiQWidget = Multiline.MultiQWidget(element.QT_TextEdit, element)
|
element.MultiQWidget = Multiline.MultiQWidget(element.QT_TextEdit, element)
|
||||||
element.QT_TextEdit.installEventFilter(element.MultiQWidget)
|
element.QT_TextEdit.installEventFilter(element.MultiQWidget)
|
||||||
|
|
||||||
|
if element.ChangeSubmits:
|
||||||
|
element.QT_TextEdit.textChanged.connect(element.QtCallbackTextChanged)
|
||||||
|
|
||||||
if (element.Focus or toplevel_win.UseDefaultFocus) and not focus_set:
|
if (element.Focus or toplevel_win.UseDefaultFocus) and not focus_set:
|
||||||
focus_set = True
|
focus_set = True
|
||||||
toplevel_win.FocusElement = element.QT_TextEdit
|
toplevel_win.FocusElement = element.QT_TextEdit
|
||||||
|
|
||||||
|
element.QT_TextEdit.setPlaceholderText(default_text)
|
||||||
|
qt_row_layout.setContentsMargins(*full_element_pad)
|
||||||
qt_row_layout.addWidget(element.QT_TextEdit)
|
qt_row_layout.addWidget(element.QT_TextEdit)
|
||||||
|
|
||||||
# ------------------------- OUTPUT MULTI LINE element ------------------------- #
|
# ------------------------- OUTPUT MULTI LINE element ------------------------- #
|
||||||
|
@ -4508,6 +4513,23 @@ def PackFormIntoFrame(window, containing_frame, toplevel_win):
|
||||||
|
|
||||||
# ------------------------- Separator element ------------------------- #
|
# ------------------------- Separator element ------------------------- #
|
||||||
elif element_type == ELEM_TYPE_SEPARATOR:
|
elif element_type == ELEM_TYPE_SEPARATOR:
|
||||||
|
element.QT_Label = qlabel = QLabel('', toplevel_win.QTWindow)
|
||||||
|
if not auto_size_text:
|
||||||
|
if element_size[0] is not None:
|
||||||
|
element.QT_Label.setFixedWidth(element_size[0])
|
||||||
|
if element_size[1] is not None:
|
||||||
|
element.QT_Label.setFixedHeight(element_size[1])
|
||||||
|
style = ''
|
||||||
|
if element.TextColor is not None and element.TextColor != COLOR_SYSTEM_DEFAULT:
|
||||||
|
style += 'color: %s;' % element.TextColor
|
||||||
|
if element.BackgroundColor is not None and element.BackgroundColor != COLOR_SYSTEM_DEFAULT:
|
||||||
|
style += 'background-color: %s;' % element.BackgroundColor
|
||||||
|
element.QT_Label.setStyleSheet(style)
|
||||||
|
|
||||||
|
qlabel.setFrameStyle(QFrame.VLine if element.Orientation[0] =='v' else QFrame.HLine)
|
||||||
|
|
||||||
|
qt_row_layout.addWidget(element.QT_Label)
|
||||||
|
|
||||||
pass
|
pass
|
||||||
|
|
||||||
# ............................DONE WITH ROW pack the row of widgets ..........................#
|
# ............................DONE WITH ROW pack the row of widgets ..........................#
|
||||||
|
@ -6269,7 +6291,12 @@ def main():
|
||||||
[Text('Destination Folder', size=(150, 25), justification='right'), InputText('Dest'), FolderBrowse()],
|
[Text('Destination Folder', size=(150, 25), justification='right'), InputText('Dest'), FolderBrowse()],
|
||||||
[Ok(bind_return_key=True), Cancel()]]
|
[Ok(bind_return_key=True), Cancel()]]
|
||||||
|
|
||||||
window = Window('Demo window..',auto_size_buttons=False, default_element_size=(280,22), default_button_element_size=(80,21)).Layout(layout)
|
window = Window('Demo window..',
|
||||||
|
auto_size_buttons=False,
|
||||||
|
default_element_size=(280,22),
|
||||||
|
auto_size_text=False,
|
||||||
|
default_button_element_size=(80,21)
|
||||||
|
).Layout(layout)
|
||||||
event, values = window.Read()
|
event, values = window.Read()
|
||||||
print(event, values)
|
print(event, values)
|
||||||
window.Close()
|
window.Close()
|
||||||
|
|
|
@ -77,7 +77,11 @@ It is recommended that you use PySide2, however, if that cannot be found, then P
|
||||||
|
|
||||||
## Testing your installation
|
## Testing your installation
|
||||||
Once you have installed, or copied the .py file to your app folder, you can test the installation using python. At the command prompt start up Python.
|
Once you have installed, or copied the .py file to your app folder, you can test the installation using python. At the command prompt start up Python.
|
||||||
``` python3 >>> import PySimpleGUIQt >>> PySimpleGUIQt.main() ```
|
|
||||||
|
python3
|
||||||
|
>>> import PySimpleGUIQt
|
||||||
|
>>> PySimpleGUIQt.main()
|
||||||
|
|
||||||
You will see a sample window in the center of your screen. If it's not installed correctly you are likely to get an error message during one of those commands
|
You will see a sample window in the center of your screen. If it's not installed correctly you are likely to get an error message during one of those commands
|
||||||
|
|
||||||
Here is the window you should see:
|
Here is the window you should see:
|
||||||
|
@ -96,6 +100,7 @@ PySide2 or PyQt5
|
||||||
`import PySimpleGUIQt as sg`
|
`import PySimpleGUIQt as sg`
|
||||||
Then use the exact same code as any other PySimpleGUI program that runs on tkinter.
|
Then use the exact same code as any other PySimpleGUI program that runs on tkinter.
|
||||||
|
|
||||||
|
|
||||||
## Status
|
## Status
|
||||||
|
|
||||||
### FEATURE COMPLETE!
|
### FEATURE COMPLETE!
|
||||||
|
@ -159,11 +164,38 @@ Dial element default value
|
||||||
Show expanded option for trees
|
Show expanded option for trees
|
||||||
Titles for popups
|
Titles for popups
|
||||||
|
|
||||||
|
### 0.13.0 - 22-Nov-2018
|
||||||
|
|
||||||
|
Focus for Input Text and Multiline Input
|
||||||
|
|
||||||
|
- Get focus
|
||||||
|
- Set focus
|
||||||
|
Window.FindElementWithFocus works
|
||||||
|
Multiline input
|
||||||
|
|
||||||
|
- Change submits
|
||||||
|
- Update - disabled, append
|
||||||
|
|
||||||
|
Multiline output - Update value, append, disabled, get value
|
||||||
|
Text clicked submits
|
||||||
|
File types for open files
|
||||||
|
Initial folder, file types, for browse buttons
|
||||||
|
File types standardized on tkinter data format
|
||||||
|
Find Element With Focus now works for input and multiline input
|
||||||
|
Yet more multiwindow handling
|
||||||
|
Relief for Text element
|
||||||
|
Input text disable
|
||||||
|
Correct sizing of Comboboxes using visible items parm
|
||||||
|
Correct default values for input and multiline input
|
||||||
|
Change submits for multiline
|
||||||
|
Horizontal and Vertical separators
|
||||||
|
PopupGetFile and PopupGetFolder - no_window option works
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Design
|
## Design
|
||||||
## Author
|
## Author
|
||||||
Mike B.
|
Mike B.
|
||||||
|
|
||||||
## Demo Code Contributors
|
## Demo Code Contributors
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue