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
-
Look at my chordcalc repository. The class debugStream allows you to acculumate depug output without calling print to slow things down. You can create multiple streams and dump each separtely when done.
-
Thanks polymerchm for the suggestion. I remember seeing this now as part of your app.
class debugStream(): """ create buffered output to speed up console printing""" def __init__(self): self.out = '' def push(self,string,*args): self.out += string.format(*args) + '\n' def send(self): print self.out self.out = ''
In my case I am in a callback handling a constant stream of MIDI data in the form of "time tick" events. This makes it difficult to know when to push and when to send. I guess I could just add some simple auto flushing logic to this based on the string length.
Thanks for the simple and practical suggestion.
-
A minor suggestion: the gui doesn't have presets for iPhone 6 or 6+. I haven't been able to run too much, though my standard scripts seem to work fine.
-
Potential bug
in betaView.present(style='full_screen', orientation=('landscape'))
Does not prevent rotation. With or without parens around 'landscape'
IPad Air 2
-
Potential bug in beta
View.present(style='full_screen', orientation=('landscape'))First off, it should be
orientations
(plural), notorientation
, but I assume that's just a typo (you'd get an error otherwise). More importantly, you should pass a sequence of valid orientations, not a single orientation. It looks like you're trying to pass a tuple, but tuples that only contain a single item must contain a trailing comma, like this:('landscape',)
. The method accepts your single string because it expects a sequence, and strings are actually sequences (of characters), but you won't get the proper behavior this way. -
Thanks. Didn't know about the trailing comma formalism in a in a tuple of text strings. Works just fine now. Sorry for false alarm.
-
Any chance of getting lxml in Pythonista 1.6 (and the next version of Editorial too, while I'm at it)? I would really, really like to use openpyxl (or python-xlsx) and python-docx to read/edit Excel and Word docs in my Dropbox but they have lxml as a dependency and, as a C-based library, it's not user-installable.
-
I've been having a lot of fun with the cb module. So far, I've been talking with a ti sensor tag. I have also been using a piconsole to communicate with a Raspberry pi via btle.
I'm having one issue and I'm not sure why. I have issue detecting my iphone. It seems to only detect it on rare occasions. Has anyone else been able to see with iphone while it's in discover mode?
-
Ole, remember to reinsert the xcode export!
-
@filippocld: I have found that using OMZ's online xCode snapshot is not quite as convenient but it works, in case the export functionality is an issue.
-
What is this xCode snapshot? Is this the template project currently needed build your own app? Is there a version we should look at that is for 1.6?
-
You will find a link to the snapshot mentioned in the 1.5 release notes. As far as I know that is still a snapshot of the 1.5 base but I haven't looked lately.
-
I would really appreciate a setting to make folders sort alphabetically within the list of files (Mac style) instead of at the top (Windows style). I find the latter incredibly rage-inducing.
-
@omz Just a few thoughts:
- [Bug] When archiving a folder to send as an email in the export menu, the email share sheet is never presented.
- [Feature Request] Would it be possible to get a color picker dialog?
- [Feature Request] Would it be possible to get a console.hud_alert with a loading icon? Sort of like when creating an archive?
-
[Bug] When archiving a folder to send as an email in the export menu, the email share sheet is never presented.
I can't reproduce this. iPhone or iPad? Which iOS version? Does it work with a single file?
[Feature Request] Would it be possible to get a console.hud_alert with a loading icon? Sort of like when creating an archive?
You can do this with
console.show_activity()
andconsole.hide_activity()
, e.g.:import console import time console.show_activity('Please wait') time.sleep(1) # do some work here... console.hide_activity()
-
@techteej I have a thing for you. It can (AND SHOULD) be cleaned up and or modified to look better.
import ui from random import random def color_chooser_dialog(): ''' Shows a color chooser dialog and returns the color as a hex value. I may have it return a tuple, but most Python modules will accept ANY color representation ''' def slider_action(sender): # Get the root view: v = sender.superview # Get the sliders: r = v['slider1'].value g = v['slider2'].value b = v['slider3'].value # Create the new color from the slider values: v['view1'].background_color = (r, g, b) v['label1'].text = '#%.02X%.02X%.02X' % (r*255, g*255, b*255) def shuffle_action(sender): v = sender.superview s1 = v['slider1'] s2 = v['slider2'] s3 = v['slider3'] s1.value = random() s2.value = random() s3.value = random() slider_action(s1) class ColorMixer (ui.View): def __init__(self): self.val = None self.background_color = 'white' self.frame = (0,0,320,244) view1 = ui.View(name='view1') view1.frame = (6,6,154,59) view1.flex = 'R' label1 = ui.Label(name='label1') label1.frame = (168,6,148,59) label1.flex = 'L' label1.font = ('<system>', 32) label1.number_of_lines = 0 label1.alignment = ui.ALIGN_CENTER label1.text = 'FFFFFF' slider1 = ui.Slider(name='slider1') slider1.frame = (6,73,308,34) slider1.flex = 'W' slider1.tint_color = '#ff0000' slider1.value = .5 slider1.continuous = True slider1.action = slider_action slider2 = ui.Slider(name='slider2') slider2.frame = (6,115,308,34) slider2.flex = 'W' slider2.tint_color = '#00ff00' slider2.value = .5 slider2.continuous = True slider2.action = slider_action slider3 = ui.Slider(name='slider3') slider3.frame = (6,157,308,34) slider3.flex = 'W' slider3.tint_color = '#0000ff' slider3.value = .5 slider3.continuous = True slider3.action = slider_action button1 = ui.Button(name='button1') button1.frame = (168,199,146,38) button1.flex = 'L' button1.title = 'Done' button1.font = ('<system>', 15) button1.action = self.done_action button2 = ui.Button(name='button2') button2.frame = (6,199,145.5,38) button2.flex = 'R' button2.title = 'Shuffle' button2.font = ('<system>', 15) button2.action = shuffle_action self.add_subview(view1) self.add_subview(label1) self.add_subview(slider1) self.add_subview(slider2) self.add_subview(slider3) self.add_subview(button1) self.add_subview(button2) shuffle_action(button2) def done_action(self, sender): self.val = self['label1'].text self.close() w = ColorMixer() w.present('popover') w.wait_modal() return w.val if __name__ == '__main__': print color_chooser_dialog()
Just remember to put
@ui.in_background
if you call it. I made that mistake too many times. -
@omz As for the bug, iPad on iOS 8.1.1 (and I had it on iOS 8.1 as well). Actually doesn't work on a single file either.
@blmacbeth Just think though, wouldn't
dialogs.color_picker_dialog(title='', multiple=False)
that returns a color be so much easier? -
ui.TableView.row_height is still always -1.
-
Not sure why line 10 gives me an error.
# coding: utf-8 import dialogs import reminders import ui v = ui.load_view('reminders') reminders_table = v['reminders'] def picked(sender): item = sender.items[sender.selected_row] # gives me error r = item['reminder'] r.completed = True r.save() del sender.items[sender.selected_row] def grabbed(): global todo_items, completed_items todo = reminders.get_reminders(completed=False) todo_items = [{'title': r.title, 'reminder': r} for r in todo] done = reminders.get_reminders(completed=True) completed_items = [{'title': r.title, 'reminder': r} for r in done] reminders_table.data_source = ui.ListDataSource(items=todo_items) reminders_table.data_source.action = picked reminders_table.reload() def button_action(sender): if segment.selected_index == 0: reminders_table.data_source = ui.ListDataSource(items=todo_items) reminders_table.data_source.action = picked reminders_table.reload() elif segment.selected_index == 1: reminders_table.data_source = ui.ListDataSource(items=completed_items) reminders_table.data_source.action = picked reminders_table.reload() @ui.in_background def but_action(sender): fields = [{'key' : 'name', 'type' : 'text', 'value' : 'Name your reminder'},] result=dialogs.form_dialog(title='Create a Reminder', fields=fields) r = reminders.Reminder() r.title = result['name'] r.save() segment.selected_index = 0 grabbed() segment = v['segmentedcontrol1'] segment.action = button_action reminders_table.data_source.action = picked create_button = ui.ButtonItem() create_button.image = ui.Image.named('ionicons-ios7-plus-empty-32') create_button.action = but_action grabbed() v.right_button_items = [create_button] v.present('sheet')
-
I've got a bad image loading related bug. If you do this:
import ui imageurl = 'http://s9.postimage.org/n92phj9tr/image1.jpg' v = ui.View() v.background_color = 'white' im = ui.ImageView() im.flex = 'LRTBWH' im.load_from_url(imageurl) v.add_subview(im) v.present()
Then run, cancel, and run again, Pythonista hangs and has to be closed from multitasking, then often the icon has to be pressed twice just to open it again.