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 UI
-
@shinya.ta Sorry, I didn't understand your last post, I have to say that English is not my mother language too π
-
I made this in the test now.
I will remodel this and make it a keyboard application for iPhone.
import ui
number = 0
def plus(sender):
global number textview = sender.superview['textview1'] number = number + 1 textview.text = str(number)
def minus(sender):
global number textview = sender.superview['textview1'] number = number - 1 textview.text = str(number) # 10δ»₯δΈγ γ£γγθ΅€γ«γγ if number >= 10: textview.text_color = 'red'
γ―γͺγ’γγΏγ³γγΏγγγγγ¨γγ«εΌγ°γγγ‘γΎγγ
def clear(sender):
global number
textview = sender.superview['textview1']number = 0 textview.text = str(number) #θ²γι»γ«ζ»γ textview_color = 'black'
v = ui.load_view()
v.present('sheet') -
@cvp
Please tell me again when it is difficult.
I'm sorry. -
@shinya.ta Little errors in clear def
I don't have your .pyui file, thus tried thisimport ui number = 0 def plus(sender): global number textview = sender.superview['textview1'] number = number + 1 textview.text = str(number) def minus(sender): global number textview = sender.superview['textview1'] number = number - 1 textview.text = str(number) # 10δ»₯δΈγ γ£γγθ΅€γ«γγ if number >= 10: textview.text_color = 'red' #γ―γͺγ’γγΏγ³γγΏγγγγγ¨γγ«εΌγ°γγγ‘γΎγγ def clear(sender): global number textview = sender.superview['textview1'] #θ²γι»γ«ζ»γ number = 0 textview.text = str(number) textview.text_color = 'black' #v = ui.load_view() v = ui.View() v.frame = (0,0,400,400) tv = ui.TextView(name='textview1') tv.frame = (120,10,260,64) v.add_subview(tv) b_plus =ui.Button(title='plus') b_plus.background_color = 'white' b_plus.frame = (10,10,100,32) b_plus.action = plus v.add_subview(b_plus) b_minus =ui.Button(title='minus') b_minus.background_color = 'white' b_minus.frame = (10,60,100,32) b_minus.action = minus v.add_subview(b_minus) b_clear =ui.Button(title='clear') b_clear.background_color = 'white' b_clear.frame = (10,110,100,32) b_clear.action = clear v.add_subview(b_clear) v.present('sheet')
-
-
Dear.@cvp
I changed to iPhone size.
I was able to change it well based on the hint.Also, I would like to add delete Key, NextKey, and AllClearKey.
Where should I enter?
-
-
import ui
from objc_util import *v = ui.View()
v.frame = (0,0,333,555)
v.name = 'Move cursor in TextView'tv = ui.TextView()
tv.name = 'TextView'
tv.frame = (0,0,333,296)
tv.font = ('Arial Rounded MT Bold',24)
tv.text = 'this is the sentence'
v.add_subview(tv)b_top = ui.Button()
b_top.frame = (5,310,78,78)
b_top.title = 'ζι '
b_top.background_color = 'white'
b_top.border_width = 1
def b_top_action(sender):
tv = sender.superview['TextView']
tv.selected_range = (0,0)
b_top.action = b_top_action
v.add_subview(b_top)b_left = ui.Button()
b_left.frame = (47,394,78,78)
b_left.title = 'β¬ οΈ'
b_left.background_color = 'white'
b_left.border_width = 1
def b_left_action(sender):
tv = sender.superview['TextView']
i = tv.selected_range[0] - 1
if i < 0:
i = 0
tv.selected_range = (i,i)
b_left.action = b_left_action
v.add_subview(b_left)b_right = ui.Button()
b_right.frame = (212,394,78,78)
b_right.title = 'β‘οΈοΈ'
b_right.background_color = 'white'
b_right.border_width = 1
def b_right_action(sender):
tv = sender.superview['TextView']
i = tv.selected_range[0] + 1
l = len(tv.text)
if i > l:
i = l
#tv.selected_range = (i,i) # refused if i = len(tv.text)
tvo = ObjCInstance(tv)
p1 = tvo.positionFromPosition_offset_(tvo.beginningOfDocument(), i)
p2 = p1
tvo.selectedTextRange = tvo.textRangeFromPosition_toPosition_(p1,p2)
b_right.action = b_right_action
v.add_subview(b_right)b_bottom = ui.Button()
b_bottom.frame = (130,394,78,78)
b_bottom.title = 'ζζ«'
b_bottom.background_color = 'white'
b_bottom.border_width = 1
def b_bottom_action(sender):
tv = sender.superview['TextView']
l = len(tv.text)
#tv.selected_range = (l,l) # refused if l = len(tv.text)
tvo = ObjCInstance(tv)
p1 = tvo.positionFromPosition_offset_(tvo.beginningOfDocument(), l)
p2 = p1
tvo.selectedTextRange = tvo.textRangeFromPosition_toPosition_(p1,p2)
b_bottom.action = b_bottom_action
v.add_subview(b_bottom)def get_xy(tv):
tvo = ObjCInstance(tv)
x_y = []
for i in range(0,len(tv.text)+1): # x,y of each character
p1 = tvo.positionFromPosition_offset_(tvo.beginningOfDocument(), i)
rge = tvo.textRangeFromPosition_toPosition_(p1,p1)
rect = tvo.firstRectForRange_(rge) # CGRect
x,y = rect.origin.x,rect.origin.y
if i == len(tv.text):
if i > 0:
x,y = x_y[i-1]
else:
# text is empty
x,y = 0,0
x_y.append((x,y))
return x_yb_up = ui.Button()
b_up.frame = (130,310,78,78)
b_up.title = 'β¬οΈ'
b_up.background_color = 'white'
b_up.border_width = 1
def b_up_action(sender):
tv = sender.superview['TextView']
x_y = get_xy(tv)
c = tv.selected_range[0]
xc,yc = x_y[c]
i = c - 1
while i >= 0:
x,y = x_y[i]
if y < yc:
# previous row
if x <= xc:
tv.selected_range = (i,i)
return
i = i - 1
b_up.action = b_up_action
v.add_subview(b_up)b_down = ui.Button()
b_down.frame = (130,475,78,78)
b_down.title = 'β¬οΈ'
b_down.background_color = 'white'
b_down.border_width = 1
def b_down_action(sender):
tv = sender.superview['TextView']
print(tv.selected_range,len(tv.text))
x_y = get_xy(tv)
c = tv.selected_range[0]
#print(x_y,c)
xc,yc = x_y[c]
i = c - 1
while i < len(tv.text):
x,y = x_y[i]
if y > yc:
# next row
if x >= xc:
tv.selected_range = (i,i)
return
else:
if (i+1) < len(tv.text):
if x_y[i+1][1] > y: # i = last character of row under cursor
tv.selected_range = (i,i)
return
else:
pass # try next x
else:
# last character of last row
tv.selected_range = (i,i)
return
i = i + 1
b_down.action = b_down_action
v.add_subview(b_down)v.present('sheet')
tv.selected_range = (0,0)
tv.begin_editing()v = ui.load_view()
v.present('sheet') -
@shinya.ta First of all, on this forum, you have to insert your code between two lines of ```
Only to keep the indentation and have a good visibility (3 back quote)
Or use the button above with </> -
@shinya.ta Then, I don't understand your request.
Do you need new buttons like led, right,... or keys in the keyboard?
And what exactly are the wanted functions?
Del exists as back on the keyboard
Next is right, isn'it?
Clear is delete all? -
@shinya.ta already del with position on iPad
b_del = ui.Button() b_del.frame = (10,250,100,32) b_del.title = 'del' b_del.background_color = 'white' b_del.border_width = 1 def b_del_action(sender): tv = sender.superview['TextView'] i = tv.selected_range[0] if i < len(tv.text): tv.text = tv.text[:i] + tv.text[i+1:] #tv.selected_range = (i,i) # refused if i = len(tv.text) tvo = ObjCInstance(tv) p1 = tvo.positionFromPosition_offset_(tvo.beginningOfDocument(), i) p2 = p1 tvo.selectedTextRange = tvo.textRangeFromPosition_toPosition_(p1,p2) b_del.action = b_del_action v.add_subview(b_del)
-
@shinya.ta clear
b_clear = ui.Button() b_clear.frame = (10,290,100,32) b_clear.title = 'clear' b_clear.background_color = 'white' b_clear.border_width = 1 def b_clear_action(sender): tv = sender.superview['TextView'] tv.text = '' b_clear.action = b_clear_action v.add_subview(b_clear)
-
Dear.@cvp
It is correct to add the button.
The biggest problem is to switch it to an existing keyboard on the iPhone.
I would like to add a keyboard for the globe of the iPhone.
-
π Key button.
-
Dear.@cvp
I tried delete, and there is no response of the button.
Is it written by mistake?
b_del = ui.Button()
b_del.frame = (10,250,100,32)
b_del.title = 'del'
b_del.background_color = 'white'
b_del.border_width = 1
def b_del_action(sender):
tv = sender.superview['TextView']
i = tv.selected_range[0]
if i < len(tv.text):
tv.text = tv.text[:i] + tv.text[i+1:]
#tv.selected_range = (i,i) # refused if i = len(tv.text)
tvo = ObjCInstance(tv)
p1 = tvo.positionFromPosition_offset_(tvo.beginningOfDocument(), i)
p2 = p1
tvo.selectedTextRange = tvo.textRangeFromPosition_toPosition_(p1,p2)
b_del.action = b_del_action
v.add_subview(b_del) -
@shinya.ta It should be ok but action deletes the character of the TextView where the cursor is. If the cursor is after the last character, there is obviously no effect.
Edit: you have also to change the frame else it could fall in your TExtView.
-
@shinya.ta I dont understand why you want a globe key because it is already in the keyboard.
-
You need a button to switch from an existing keyboard to an existing keyboard on the iPhone.
It is necessary to change it during the editing of the mail.
-
I haven't tried to delete the letter yet, but I think it is probably OK.
When using Voiceover, using Textfield instead of Textview, it was successful.
-
@shinya.ta I understand why you need the globe key but why don't you use the globe key of the keyboard?