Welcome!
This is the community forum for my apps Pythonista and Editorial.
For individual support questions, you can also send an email. If you have a very short question or just want to say hello — I'm @olemoritz on Twitter.
Pythonista 1.6 Beta
-
Most strings you're dealing with will probably be binary data, so I'd recommend encoding them as hex before printing (
print c.value.encode('hex')
). Nevertheless, there are definitely some stability issues when you encounter exceptions in any of the callbacks. I might change this to disconnect when an exception is thrown in a callback, which might make it more likely to recover successfully.@hyshai
Is it new in this version that the various console.alert "types" now return the button number (as an int)? It broke a couple of my scipts...
The standard
alert()
function always did this, but I assume you're referring to other alert types? There are definitely some bugs with those right now, looking into it.for reminders.get_reminders(completed=TRUE) is there currently, or could there be in a future version, a way to filter completed reminders with completion date.
Right now, it's not possible, but I will at the very least add a
completion_date
attribute to theReminder
class, so you could filter them manually.I assume the appex module you teased on Twitter is not integrated/activated in this Beta?
No, this won't be in 1.6.
The Pythonista.app bundle is now fully moved out of the "Data" folder and no longer easily accessible (sad face)
That's an iOS 8 thing, nothing I can do about it, though it is still accessible if you have the correct path. Right now, you could do this with
scene.get_image_path
(which will return a path that is within the app bundle, you'd have to walk up the hierarchy a bit to get the root directory of the app). -
Also would like to see this module in Editorial eventually. Better than using url schemes in all these reminder workflows.
Yes, the
reminders
module will definitely be in the next update of Editorial as well, same goes fortwitter
and probablydialogs
. I don't plan to integratecb
in Editorial though. -
I have been working with the dialogs form_dialog and this test code:
import dialogs import datetime dt = datetime.datetime.now() fields = [ {'key' : 'the_key0', 'type' : 'switch', 'value' : 'the_value'}, {'key' : 'the_key1', 'type' : 'text', 'value' : 'the_value'}, {'key' : 'the_key2', 'type' : 'url', 'value' : 'the_value'}, {'key' : 'the_key3', 'type' : 'email', 'value' : 'the_value'}, {'key' : 'the_key4', 'type' : 'password', 'value' : 'the_value'}, {'key' : 'the_key5', 'type' : 'number', 'value' : '100' }, {'key' : 'the_key6', 'type' : 'check', 'value' : 'the_value'}, {'key' : 'the_key7', 'type' : 'datetime', 'value' : dt}, {'key' : 'the_key8', 'type' : 'date', 'value' : dt}, {'key' : 'the_key9', 'type' : 'time', 'value' : dt} ] result=dialogs.form_dialog(title='look at all this stuff', fields=fields) print 'text:', result
When I look at this, I can't help thinking that all the field data should be aligned right and that there should be labels on each one. Should there be a 'label' key added? How is the user suppose to know what each field represents?
I suppose you could use sections to implement labels, but that seems wrong. Section as a way of breaking up and labeling combinations of like fields is good.
sections = [ ('switch section', [{'key' : 'the_key0', 'type' : 'switch', 'value' : 'the_value'}]), ('text section', [{'key' : 'the_key1', 'type' : 'text', 'value' : 'the_value'}]) ] result=dialogs.form_dialog(title='look at all this stuff', sections=sections) print 'text:', result
Also - datetime requires/returns a datetime and date and time do as well. Should date and time require and return date and time objects?
Also, Also - email, url, number don't seem to do anything different then text. Shouldn't they be enforcing formatting or something?
-
How is the user suppose to know what each field represents?
There's a
'title'
key you can use, the documentation is a little incomplete right now with regards to the supported keys.Also - datetime requires/returns a datetime and date and time do as well. Should date and time require and return date and time objects?
Maybe, it was a bit easier to implement this way, and you can easily convert it to a
date
ortime
object by callingdatetime.date()
ordatetime.time()
.Also, Also - email, url, number don't seem to do anything different then text. Shouldn't they be enforcing formatting or something?
The keyboard for URL and email fields is different (e.g. the email keyboard has an additional '@' key), and they have autocorrection disabled by default.
-
text = dialogs.text_dialog(title='Name Your Reminder', autocapitalization=ui.AUTOCAPITALIZE_SENTENCES, spellchecking=None)
r = reminders.Reminder()
r.title = text
r.save()Gives me a excepted string error.
-
@techteej Did you use the Done button in the text dialog? If you cancel the dialog (via 'x'), it'll return
None
. -
It shows up while the dialog is up
-
@techteej Is that really your entire code?
-
There's a 'title' key you can use ...
The title key works perfectly. I noticed that the text color defaults to black except for the checkbox case where it is blue (or same as check color).
Looking forward to more keys assuming now that you are going to have color, font, etc. to really allow full control.
What about field validation? Popping up a special keyboard is nice, but a delegate function called on each keystroke would nail it. I used to work on named entity extraction in text and you can do a lot with simple regex matching, but you need to run code to do credit card numbers (for the checksum). I think mapping field types to entities would be super cool.
-
@omz Here is my entire code.
# coding: utf-8 import dialogs import reminders import ui class Data (ui.ListDataSource): def __init__(self, items=None): ui.ListDataSource.__init__(self, items) def tableview_cell_for_row(self, tableview, section, row): cell = ui.TableViewCell() cell.text_label.text = str(self.items[row]) return cell v = ui.load_view('reminders') def button_action(sender): if segment.selected_index == 0: todo = reminders.get_reminders(completed=False) for r in todo: full = r.title reminders_table.data_source = Data(items=[full]) reminders_table.reload() elif segment.selected_index == 1: done = reminders.get_reminders(completed=True) for r in done: full = r.title reminders_table.data_source = Data(items=[full]) reminders_table.reload() def but_action(sender): text = dialogs.text_dialog(title='Name Your Reminder', autocapitalization=ui.AUTOCAPITALIZE_SENTENCES, spellchecking=None) r = reminders.Reminder() r.title = text r.save() segment = v['segmentedcontrol1'] segment.action = button_action reminders_table = v['reminders'] create_button = ui.ButtonItem() create_button.image = ui.Image.named('ionicons-ios7-plus-empty-32') create_button.action = but_action v.right_button_items = [create_button] v.present('sheet')
-
@techteej Similar to
console
alerts, dialogs don't work from the main UI thread (allowing this would essentially lead to a deadlock). Try decorating yourbut_action
function with@ui.in_background
. -
Found a bug. In the UI Editor when delete enabled is off, you can still delete rows in a table.
-
Will dialogs allow me to create tables with cells (rows and columns)?
This would be most useful, otherwise I don't see an advantage to dialogs over UI.
Pinch to zoom in the UI editor would be nice too, as well as saving UI control presets.
-
The beta doesn't seem to ask for permission to use Location Services when using the location module for the first time.
I thought it might be for all required permissions, but the Reminders seems to work fine.
Anyone have any ideas on this?
-
Found a bug. In the UI Editor when delete enabled is off, you can still delete rows in a table.
I can't reproduce this. Note however that the "delete enabled" attribute only applies to the default
ListDataSource
that gets created as a convenience when loading aTableView
from a pyui file. If you set a different data source after loading the view, it doesn't have an effect.Will dialogs allow me to create tables with cells (rows and columns)?
This would be most useful, otherwise I don't see an advantage to dialogs over UI.No. For the most part,
dialogs
doesn't really let you do things you couldn't do with theui
module, but things likeform_dialog
would require a lot more code when done withui
directly. There are also some things that you couldn't do otherwise, likedialogs.import_file()
ordialogs.share()
.The beta doesn't seem to ask for permission to use Location Services when using the location module for the first time.
Are you sure that you didn't give permission with the previous version? The beta would inherit those permissions (it's the same app after all).
-
I uninstalled the beta, installed the current App Store version and ran a simple get location script. It prompted for Location permissions and retrieved my location.
I then uninstalled the App Store version, installed the beta again and ran the script.
The script prints out the value of location.get_location(). It is currently printing out
None
in the beta with no prompt to allow access to Location Services. -
Bluetooth LE? Bless you! I'd love to beta test that. Sending email as soon as I track down your email address ;-)
-steve (aka zencuke)
-
@andymitchhank Hmm, that does sound like a bug indeed. Which version of iOS are you using?
-
8.1 on an iPad 3 and iPhone 6 Plus. Both are having the same issue.
-
@andymitchhank Thanks, I've been able to reproduce the issue. Apparently this has to do with some new requirements for location permissions in iOS 8, looking into it.