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.
General bug report thread
I'm having weird behavior when using the
uimodule. I'll post an example of when it happens, though I think it can happen in other instances as well but I haven't narrowed it down.
I have 2 unrelated scripts that both use the
uimodule and use the same names for delegate handlers for
ListDataSourcee.g. the name of the method for
foobar. I run one script (but don't call the delegate method) and then leave Pythonista. When I come back and run the second [unrelated] script and (e.g.) tap the
TableViewCellit calls the method of the OTHER script with the data of the CURRENT script (and outputs that result and/or throws an error, for obvious reasons).
I think the key issue is Pythonista caching of code - when it sees a method name that it already knows (even if it wasn't called prior) it will call that method. Is this expected behavior and/or is there a workaround (other than renaming all my methods)?
Are you running these as scripts? Or do you import?
If importing, note that if you have already imported a module, it won't reimport unless you specifically
When you say you leave pythonista and come back, do you actually kill the app?
If you just task switch away, then come back within 15 minutes or so, generally the interpreter hasn't been cleared. If you see the large >>> splash screen, I think that means the interpreter has restarted, otherwise your old interpreter session is active(unless you set the setting to clear globals). You can also hold the clear button in the console screen, which lets you restart pythonista.
Also, are you setting delegate handlers in the ui editor, or in the script?
If you have set a custom class in the ui editor, loading the pyui actually creates an instance of that custom class, so if you were sharing a pyui between two scripts...maybe you might get unexpected things happening.
Are you sure that your second script defines the method before using it? You should be able to redefine a method and it will overwrite the existing definition..
It might help if you can post an example of two minimal scripts that show this problem, and steps to recreate.
@JonB It does seem to only happen when there is a pyui file although if 1 script has a pyui and one doesn't (no shared pyui) it still happens. I'm trying to make a minimal example that reproduces this.
OK here's a minimal example that I extracted from my code. 1 script uses a pyui file and the other does not.
2 ways to reproduce:
when starting Pythonista from a cold start and launching
test1.py(has a pyui file) and tapping the accessory button nothing happens. If I re-launch it then the proper action is executed.
test2.pyand then launch
test1.pyand tap the accessory button, the
console.alertwill have the data from
The problem is, your action and accessory action must be define BEFORE your load your view, if the pyui references them.
In test1, when you load the pyui first, the actions are not defined, thus nothing happens, until you run the second time, at which point it is defined.
When you run test2 first, you are defining the accessory action, which gets used when you load the pyui.
The solution: in test1.py, define your actions, before you load the pyui. I posted a comment on your gist.
@JonB yes that's it! Thanks so much.
I guess I'll leave this conversation here - although it's not a bug, the default behavior should be to throw a
NameErrorexception instead of using a "cached" method from a totally different script.
If you don't want old scripts to carry over, you can set Clear Global Variables before run in the interpreter options menu. That way it is more like the python commandline. Default behaves more like an interactive interpreter, which personally I prefer, but you do have to be wary of leftover globals that make otherwise invalid code run without exceptions. So, your case 2 doesn't bother me.
I was surprised that case 1 failed silently. For other actions, like button, if the function cannot be found it doesn't generate a NameError, but does at least print a warning to the console. If delegate actions just fail silently, that may be a bug, or at least an oversight.
Warning: Couldn't bind action 'some_undefined_action' of 'button1'
Yeah it fails silently in both cases if Clear Global Variables is on.
1)Since upgrading to iOS 8.x any alert that takes input doesn't open the keyboard.
console.login_alert, when prompted for
keychain.master_password. Before iOS 8 the keyboard would automatically pop up.
- switching to a 3rd party keyboard and using it, then switching to another keyboard (maybe only 1st party?) crashes Pythonista.
The current Paramiko module (version 1.13.0) in Pythonista is not compatible with newer OpenSSH versions
(I already told Ole on twitter - but just want to put it in the forums also)
blmacbeth last edited by
@omz I have been playing around with the
ui.Imagemodule and have found what I may think is a bug. When I use
ui.Image.named('Test_Lenna')it works as expected, but when I do the following:
None. For now, I have a work-around, where I first open the image in
PILand then convert the Image to a bytes and then use
Let me know if there is something obvious I have overlooked or if this kind of picture importing is not possible. Thank you!!!
Sebastian last edited by
@blmacbeth If it's not a built in image, I believe you have to use the image's full path.
Perhaps not technically a bug, but a common source of incompatibilities:
sys.stdin, std.stdout, and sys.stderrshould have an
isatty()method which returns false. This might not technically be a "bug", since python docs don't seem to require all file methods to be implemented, except maybe
write, many other external libraries assume a file-like object.