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.
Changing a variable with UI switches
-
How would I go about changing a variable with UI switches?
I am learning from everyone's help on here. Thanks in advance.
-
Short answer:
the_captain_wants_warp_speed = view['button_warp_speed'].value # or in an action function... def warp_action(sender): the_captain_wants_warp_speed = sender.value view['button_warp_speed'].action = warp_action
Long answer: warp_speed.py
-
Not quite sure if I'm doing this right
def warp_action(sender): global lang; val = sender.value if val: lang = 'en-US' else: lang = 'en-GB'
-
Looks right to me. An alternate formulation of brit_switch_action:
def brit_switch_action(sender): global lang lang = 'en-US' if sender.value else 'en-GB' print('lang is now set to: ' + lang)
-
I like that better, less code :). Anyway the reason I posted it was because it didn't work with this code below it.
def button_action(sender): global lang v['switch1'].action = brit_switch_action text = textview.text if text == '': speech.say('Please tell me something to say.', lang, 0.1) else: speech.say(text, lang, 0.1)
-
Is v in scope here? Seems like you might want to use
sender.superview['switch1']
Also, note that in this case your switch does not become 'live' until you click the button! You might want to set the switch action when you create the view, not inside the button action. -
Here is what I have so far
import speech import ui v = ui.load_view('speech') speech.say('Greetings', 'en-GB', 0.1) textview = v['textview1'] switch1 = v['switch1'] def brit_switch_action(sender): global lang lang = 'en-GB' if sender.value else 'en-US' def button_action(sender): global lang v['switch1'].action = brit_switch_action text = textview.text if text == '': speech.say('Please tell me something to say.', lang, 0.1) else: speech.say(text, lang, 0.1) button1 = v['button1'] button1.action = button_action v.present('sheet')
And the .pyui file:
[{"class":"View","attributes":{"name":"Siri Speak","tint_color":"RGBA(0.000000,0.478000,1.000000,1.000000)","background_color":"RGBA(1.000000,1.000000,1.000000,1.000000)","enabled":true,"border_color":"RGBA(0.000000,0.000000,0.000000,1.000000)","flex":""},"frame":"{{0, 0}, {540, 565}}","nodes":[{"class":"Button","attributes":{"tint_color":"RGBA(1.000000,1.000000,1.000000,1.000000)","font_size":15,"enabled":true,"font_bold":true,"name":"button1","flex":"","border_color":"RGBA(0.000000,0.000000,0.000000,1.000000)","uuid":"684E2AD0-6CF1-467C-B46A-6C4060F47C1B","background_color":"RGBA(0.541378,0.045918,0.642857,1.000000)","image_name":"ionicons-ios7-volume-high-32","title":""},"frame":"{{453, 510}, {80, 37}}","nodes":[]},{"class":"TextView","attributes":{"background_color":"RGBA(0.857143,0.857143,0.857143,1.000000)","alignment":"left","border_color":"RGBA(0.000000,0.000000,0.000000,1.000000)","font_size":17,"enabled":true,"flex":"","text":"Enter your text here\\n","text_color":"RGBA(0.000000,0.000000,0.000000,1.000000)","name":"textview1","corner_radius":0,"editable":true,"border_width":1,"uuid":"31844FF1-6024-47A8-B0C6-C8B45345DCE2"},"frame":"{{6, 16}, {441, 531}}","nodes":[]},{"class":"Switch","attributes":{"name":"switch1","value":true,"uuid":"379CDE5C-D02A-4EE3-B685-F53DDD0944EC","enabled":true,"border_color":"RGBA(0.000000,0.000000,0.000000,1.000000)","flex":""},"frame":"{{467, 56}, {51, 31}}","nodes":[]},{"class":"Label","attributes":{"font_size":17,"enabled":true,"text":"British","flex":"","name":"label1","border_color":"RGBA(0.000000,0.000000,0.000000,1.000000)","text_color":"RGBA(0.000000,0.000000,0.000000,1.000000)","alignment":"center","uuid":"90D9B957-9BAD-47E8-8FD1-972F0F77E5BB"},"frame":"{{453, 16}, {80, 32}}","nodes":[]}]}]
-
Please put this in a GitHub repo. It is easier to collaborate there.
-
It already is.
-
Pull request sent.
-
If I have two switches, it is possible for when one is active for the other to turn off?
-
Yes. Set .enabled to True or False the make a button active/inactive.