omz:forum

    • Register
    • Login
    • Search
    • Recent
    • Popular

    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.


    New button addition.

    Pythonista
    5
    50
    14244
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • cvp
      cvp @shinya.ta last edited by

      @shinya.ta I understand your language problem, English is not my mother language and I also have a lot of problems of comprehension ๐Ÿ˜…
      Thus, do you want to have two buttons?
      One to read the text at the cursor (only one character? One word? All from the cursor?)
      A second button to read the entire text?

      1 Reply Last reply Reply Quote 0
      • shinya.ta
        shinya.ta last edited by

        All from the cursor.
        And the whole text.

        cvp 2 Replies Last reply Reply Quote 0
        • cvp
          cvp @shinya.ta last edited by

          @shinya.ta ok, last (I hope) questions: where do you want these buttons and which title on them?

          1 Reply Last reply Reply Quote 0
          • cvp
            cvp @shinya.ta last edited by cvp

            @shinya.ta first of all, @ccc advice followed here Emojis Keyboard.py
            Please try it, thanks

            1 Reply Last reply Reply Quote 0
            • shinya.ta
              shinya.ta last edited by

              Yes, it's necessary for me.

              cvp 2 Replies Last reply Reply Quote 0
              • cvp
                cvp @shinya.ta last edited by

                @shinya.ta said:

                Yes, it's necessary for me.

                sorry, I don't understand to which questions you answer ๐Ÿค”

                1 Reply Last reply Reply Quote 0
                • cvp
                  cvp @shinya.ta last edited by

                  @shinya.ta I have still an important question: do you use this keyboard in a text field of more than one line? Because Pythonista keyboard module does not support it easily.

                  1 Reply Last reply Reply Quote 0
                  • shinya.ta
                    shinya.ta last edited by

                    I need this reading button for my wife.

                    cvp 1 Reply Last reply Reply Quote 0
                    • cvp
                      cvp @shinya.ta last edited by

                      @shinya.ta i understand why you need it but you don't answer to my questions:

                      1. where do you want these buttons?
                      2. which title?
                        3 ) do you use it in a text field of multiple lines?

                      Ex:

                      1 Reply Last reply Reply Quote 0
                      • shinya.ta
                        shinya.ta last edited by

                        1. I want to have a button here.
                        2. It's okay with the title of the picture.
                        3. I use it in multiple lines.
                        cvp 3 Replies Last reply Reply Quote 0
                        • cvp
                          cvp @shinya.ta last edited by

                          @shinya.ta said:

                          I want to have a button here.

                          Sorry, but one more time I don't understand. For the moment, I'll keep "my" positions

                          1 Reply Last reply Reply Quote 0
                          • cvp
                            cvp @shinya.ta last edited by

                            @shinya.ta said:

                            I use it in multiple lines.

                            Let us begin with one line at once because Pythonista's keyboard module does not support multiple lines in keyboard.get_input_context() module

                            1 Reply Last reply Reply Quote 0
                            • cvp
                              cvp @shinya.ta last edited by

                              @shinya.ta I've problems with uploading to GitHub, just now, thus, please try this, it works for me in English and for one line, that's just the beginning.

                              import keyboard
                              import ui
                              from objc_util import *
                              import clipboard
                              import speech
                              import sys
                              
                              import time
                              import threading
                              			  
                              class MyView(ui.View):
                              	def __init__(self, *args, **kwargs):
                              		super().__init__(self, *args, **kwargs)
                              		self.background_color = 'lightgray'
                              		
                              		# bounds not yet known in init, let some delay		
                              		ui.delay(self.dimensions,0.1)
                              		
                              	def dimensions(self):				
                              		w,h = self.bounds.size
                              		
                              		h_icons = 40
                              		
                              		dd = 2
                              		d = (h-4*dd-h_icons)/3
                              		x0 = (w -3*d - 2*dd)/2
                              
                              		x = x0 - d/2
                              		y = h_icons + dd		
                              		def b_top_action(sender):
                              			t = keyboard.get_input_context()	# current line
                              			l = len(t[0])
                              			keyboard.move_cursor(-l)
                              		self.d = d
                              		self.make_button(x,y,d,'ๆ–‡้ ญ',b_top_action) # begin of sentence
                              
                              		x = x0 + 1 * (d + dd)
                              		y = h_icons + dd
                              		def b_up_action(sender):
                              			t = keyboard.get_input_context()	# current line
                              			l0 = len(t[0])
                              			l1 = len(t[1])
                              			keyboard.move_cursor(-l0)
                              			keyboard.move_cursor(-1)					# end of previous line
                              			t = keyboard.get_input_context()	# previous line
                              			l2 = len(t[0])
                              			l3 = len(t[1])
                              			#sender.title = str(l0)+' '+str(l1)+' '+str(l2)+' '+str(l3)
                              			if l2 >= l0:
                              				keyboard.move_cursor(-(l2-l0))
                              			else:
                              				pass											# line is shorter than l0, thus stay at end
                              		self.make_button(x,y,d,'โฌ†๏ธ',b_up_action)
                              		
                              		x = x0 + 2 * (d + dd)
                              		y = h_icons + dd
                              		def b_read_from_action(sender):
                              			t = keyboard.get_input_context()
                              			speech.say(t[1],'jp-JP')
                              			#speech.say(t[1],'en-EN')
                              		self.make_button(x,y,d,'read\nfrom',b_read_from_action)
                              		
                              		x = x0 + 3 * (d + dd)
                              		y = h_icons + dd
                              		def b_read_all_action(sender):
                              			keyboard.move_cursor(-1000)
                              			t = keyboard.get_input_context()
                              			speech.say(t[1],'jp-JP')
                              			#speech.say(t[1],'en-EN')
                              		self.make_button(x,y,d,'read\nall',b_read_all_action)
                              
                              		x = x0
                              		y = h_icons + dd + 1 * (d + dd)
                              		def b_left_action(sender):
                              			keyboard.move_cursor(-1)
                              		self.make_button(x,y,d,'โฌ…๏ธ',b_left_action)
                              		
                              		x = x0 + 1 * (d + dd)
                              		y = h_icons + dd + 1 * (d + dd)
                              		def b_bottom_action(sender):
                              			t = keyboard.get_input_context()	# current line
                              			l = len(t[1])
                              			keyboard.move_cursor(+l)
                              			move = my_thread(1)
                              			move.start()
                              		self.make_button(x,y,d,'ๆ–‡ๆœซ',b_bottom_action)   # end of sentence
                              
                              		x = x0 + 2 * (d + dd)
                              		y = h_icons + dd + 1 * (d + dd)
                              		def b_right_action(sender):
                              			keyboard.move_cursor(+1)
                              		self.make_button(x,y,d,'โžก๏ธ',b_right_action)
                              
                              		x = x0 - d/2
                              		y = h_icons + dd + 2 * (d + dd)		
                              		def b_copy_action(sender):
                              			context = keyboard.get_input_context()
                              			t = keyboard.get_selected_text()
                              			clipboard.set(t)
                              		if keyboard.has_full_access():
                              			self.make_button(x,y,d,'copy',b_copy_action)
                              		else:
                              			self.make_button(x,y,d,'no full',b_copy_action)    
                              
                              		x = x0 + 1 * (d + dd)
                              		y = h_icons + dd + 2 * (d + dd)
                              		def b_down_action(sender):
                              			t = keyboard.get_input_context()	# current line
                              			l0 = len(t[0])
                              			l1 = len(t[1])
                              			keyboard.move_cursor(l1)
                              			keyboard.move_cursor(1)						# begin of next line
                              			t = keyboard.get_input_context()	# next line
                              			l2 = len(t[0])
                              			l3 = len(t[1])
                              			if (l2+l3) >= l0:
                              				keyboard.move_cursor(l0)
                              			else:
                              				pass
                              				#keyboard.move_cursor(2)#l0-l2)
                              		self.make_button(x,y,d,'โฌ‡๏ธ',b_down_action)
                              		
                              		x = x0 + 2 * (d + dd) + dd + d/2
                              		y = h_icons + dd + 2 * (d + dd)
                              		def b_delete_action(sender):
                              			keyboard.backspace(times=1)
                              		self.make_button(x,y,d,'ๅทฆๅ‰Š้™ค',b_delete_action)  # delete
                              		
                              		d = 32
                              		dd = 4
                              		w_buttons = 0
                              
                              		#create normal keys
                              		emojis = '๐Ÿ˜Š๐Ÿ˜œ๐Ÿ˜ฑ๐Ÿ’ฆโ˜”๏ธ(็ฌ‘)โ˜€๏ธโ˜๏ธโ˜ƒ๏ธโ„๏ธ๐Ÿ™๐Ÿ”๐Ÿš—๐ŸŒˆโญ๏ธ๐Ÿ˜€๐Ÿ˜ƒ๐Ÿ˜„๐Ÿ˜๐Ÿ˜†๐Ÿ˜…๐Ÿ˜‚๐Ÿคฃโ˜บ๏ธ๐Ÿ˜Š๐Ÿ˜‡๐Ÿ™‚๐Ÿ™ƒ๐Ÿ˜‰๐Ÿ˜Œ๐Ÿ˜๐Ÿฅฐ๐Ÿ˜˜๐Ÿ˜—๐Ÿ˜™๐Ÿ˜š๐Ÿ˜‹๐Ÿ˜›๐Ÿ˜๐Ÿ˜œ๐Ÿคช๐Ÿคจ๐Ÿง๐Ÿค“๐Ÿ˜Ž๐Ÿคฉ๐Ÿฅณ๐Ÿ˜๐Ÿ˜’๐Ÿ˜ž๐Ÿ˜”๐Ÿ˜Ÿ๐Ÿ˜•๐Ÿ™โ˜น๏ธ๐Ÿ˜ฃ๐Ÿ˜–๐Ÿ˜ซ๐Ÿ˜ฉ๐Ÿฅบ๐Ÿ˜ข๐Ÿ˜ญ๐Ÿ˜ค๐Ÿ˜ ๐Ÿ˜ก๐Ÿคฌ๐Ÿคฏ๐Ÿ˜ณ๐Ÿฅต๐Ÿฅถ๐Ÿ˜จ๐Ÿ˜ฐ๐Ÿ˜ฅ๐Ÿ˜“๐Ÿค—๐Ÿค”๐Ÿคญ๐Ÿคซ๐Ÿคฅ๐Ÿ˜ถ๐Ÿ˜๐Ÿ˜‘๐Ÿ˜ฌ๐Ÿ˜ฆ๐Ÿ˜ง๐Ÿ˜ฎ๐Ÿ˜ฒ๐Ÿ˜ด'
                              		n_emojis_in_set = 10
                              		n_sets = 1 + int((len(emojis)-1)/n_emojis_in_set)
                              		self.vv_array = []
                              		for i_set in range(0,n_sets):
                              			l = int(len(emojis)/n_sets)
                              			i = i_set * l
                              			set_emojis = emojis[i:i+l] + 'โฉ'
                              			w, h = ui.get_screen_size() 
                              			vv = ui.View(name='set'+str(i_set))
                              			vv.background_color = 'lightgray'
                              			h = 0
                              			x = dd
                              			y = dd
                              			for button_title in set_emojis:
                              				b = ui.Button(title=button_title)
                              				if button_title == 'โฉ':
                              					b_action = self.nextSet
                              					b.i_set = i_set
                              					b.n_sets = n_sets
                              					b.name = 'nextSet'
                              				else:
                              					b_action = self.typeChar
                              				b.action=b_action
                              				b.frame = (x,y,d,d)
                              				b.font = ('.SFUIText', d)
                              				if (y+d+dd) > h:
                              					h = y + d + dd
                              				vv.add_subview(b)
                              				x = x + d + dd
                              				if (x+d+dd) > w:
                              					x = dd
                              					y = y + d + dd
                              			vv.frame = (w_buttons,0,w-w_buttons,h)
                              			self.vv_array.append(vv)
                              			self.add_subview(vv)  
                              			
                              		i_set = 0
                              		self.nextSet(self.vv_array[n_sets-1]['nextSet'])  # display 1st set
                              		
                              	def make_button(self,x,y,d,title,action):
                              		b = ui.Button()
                              		b.frame = (x,y,d,d)
                              		b.background_color = 'white'
                              		b.border_width = 1
                              		b.corner_radius = self.d/4
                              		b.title = title
                              		if '\n' in title:
                              			bo = ObjCInstance(b)
                              			for sv in bo.subviews(): 
                              				if hasattr(sv,'titleLabel'):
                              					tl = sv.titleLabel()
                              					tl.numberOfLines = 0
                              		b.action = action
                              		self.add_subview(b)
                              		
                              	def typeChar(self,sender):
                              		keyboard.insert_text(sender.title)
                              
                              	def nextSet(self,sender):
                              		i_set = sender.i_set + 1
                              		if i_set == sender.n_sets:
                              			i_set = 0
                              		#attach our accessory to the textfield, and textview
                              		ww = self.vv_array[i_set]
                              		ww.bring_to_front()
                              		
                              def main():
                              	if not keyboard.is_keyboard():
                              		return
                              	v = MyView()
                              	keyboard.set_view(v, 'expanded')
                              	
                              if __name__ == '__main__':
                              	main()
                              
                              1 Reply Last reply Reply Quote 1
                              • cvp
                                cvp last edited by cvp

                                Github version ok

                                1 Reply Last reply Reply Quote 0
                                • shinya.ta
                                  shinya.ta last edited by

                                  It's OK here.
                                  After that it's only reading.

                                  cvp 1 Reply Last reply Reply Quote 0
                                  • cvp
                                    cvp @shinya.ta last edited by

                                    @shinya.ta said:

                                    After that it's only reading.

                                    Is it not reading in Japanese?

                                    1 Reply Last reply Reply Quote 0
                                    • shinya.ta
                                      shinya.ta last edited by

                                      I don't speak anything.

                                      cvp 1 Reply Last reply Reply Quote 0
                                      • cvp
                                        cvp @shinya.ta last edited by cvp

                                        @shinya.ta I remember that in the past you met the same problem with the iPhone of your wife.
                                        Could you change in the script, two times,

                                                    speech.say(t[1],'jp-JP')
                                                    #speech.say(t[1],'en-EN')
                                        

                                        by

                                                    #speech.say(t[1],'jp-JP')
                                                    speech.say(t[1],'en-EN')
                                        

                                        And test it, it should say the text in English, if you type English words, of course
                                        For me, it is ok

                                        And put the cursor in the middle of a line

                                        1 Reply Last reply Reply Quote 0
                                        • shinya.ta
                                          shinya.ta last edited by

                                          I won't talk even if I change it.

                                          cvp 2 Replies Last reply Reply Quote 0
                                          • cvp
                                            cvp @shinya.ta last edited by

                                            @shinya.ta It seems that you have one more time some problem with the speech module...

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post
                                            Powered by NodeBB Forums | Contributors