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.
Add emoji behind text
-
I don’t know if this is possible to do??? but can I add emojis to the label nodes position by typing the current text that is in the label into the pause menus TextField and pushing the button and the pawz.pyui only has one TextField and one button
The goal is to place an emoji behind both level 1 labels by only typing Level 1 into the TextField oncefrom scene import * class Game (Scene): def setup(self): self.background_color = '#004f82' ground = Node(parent=self) x = 0 while x <= self.size.w + 64: tile = SpriteNode('plf:Ground_PlanetHalf_mid', position=(x, 0)) ground.add_child(tile) x += 64 self.player = SpriteNode('plf:AlienGreen_front') self.player.anchor_point = (0.5, 0) self.player.position = (self.size.w/2, 32) self.add_child(self.player) self.player = SpriteNode() self.player.anchor_point = (0.5, 0) self.player.position = (self.size.w/4, 32) self.add_child(self.player) self.player.color = ('red') #Label 1 self.card = LabelNode('Level 1',color=('#0016ff')) #self.card = LabelNode((text[0]),color=('#0016ff')) self.card.position = (300,760) self.add_child(self.card) self.card.size = (160,160) self.card2 = LabelNode('Level 2',color=('#0016ff')) self.card2.position = (300,660) self.add_child(self.card2) self.card2.size = (160,160) self.card3 = LabelNode('Level 1',color=('#0016ff')) self.card3.position = (300,560) self.add_child(self.card3) self.card3.size = (160,160) self.card4 = LabelNode('Game Over',color=('#0016ff')) self.card4.position = (300,460) self.add_child(self.card4) self.card4.size = (160,160) #pause symbol self.pause_button = SpriteNode('iow:pause_32', position=(32, self.size.h-32), parent=self) #control pause symbol button def touch_ended(self, touch): if self.pause_button.frame.contains_point(touch.location): self.v = ui.load_view('pawz.pyui') self.v['button1'].action = self.pawz_button_action self.v.present('sheet') self.v['textfield1'].begin_editing() def pawz_button_action(self,sender): self.v.close() if __name__ == '__main__': run(Game(), PORTRAIT, show_fps=True)
-
Something like if the text in the TextField equals the text in the label node add an emoji behind without deleting the words almost like a highlighting effect
-
@sodoku try this
from scene import * class Game (Scene): def setup(self): self.background_color = '#004f82' ground = Node(parent=self) x = 0 while x <= self.size.w + 64: tile = SpriteNode('plf:Ground_PlanetHalf_mid', position=(x, 0)) ground.add_child(tile) x += 64 self.player = SpriteNode('plf:AlienGreen_front') self.player.anchor_point = (0.5, 0) self.player.position = (self.size.w/2, 32) self.add_child(self.player) #Labels self.cards = [] y = 760 for l in ['Level 1','Level 2','Level 1','Game Over']: card = LabelNode(' ')#,color=('#0016ff')) card.font = ('Menlo',60) card.position = (300,y) card.size = (160,100) self.add_child(card) card_name = LabelNode(l) card_name.font = card.font card_name.size = card.size card.add_child(card_name) self.cards.append(card) y = y - 100 #pause symbol self.pause_button = SpriteNode('iow:pause_32', position=(32, self.size.h-32), parent=self) #control pause symbol button def touch_ended(self, touch): if self.pause_button.frame.contains_point(touch.location): self.v = ui.load_view('pawz.pyui') self.v['button1'].action = self.pawz_button_action self.v.present('sheet') self.v['textfield1'].begin_editing() def pawz_button_action(self,sender): txt = self.v['textfield1'].text for card in self.cards: if card.children[0].text == txt: card.text = '😀' self.v.close() if __name__ == '__main__': run(Game(), PORTRAIT, show_fps=True)
-
also Would I be able to add an undo button beside the pause button at the top of the scene screen thanks for the help
-
@cvp also Would I be able to add an undo button beside the pause button at the top of the scene screen thanks for the help
-
@sodoku Ok, I'm back. I assume you are able to add the button2 in the UI designer.
What do you call "undo"'? Just remove the emoji of the previous labels? -
I’ve add an undo and redo symbols in the code
from scene import *
class Game (Scene):
def setup(self):
self.background_color = '#004f82'
ground = Node(parent=self)
x = 0
while x <= self.size.w + 64:
tile = SpriteNode('plf:Ground_PlanetHalf_mid', position=(x, 0))
ground.add_child(tile)
x += 64
self.player = SpriteNode('plf:AlienGreen_front')
self.player.anchor_point = (0.5, 0)
self.player.position = (self.size.w/2, 32)
self.add_child(self.player)#Labels self.cards = [] y = 760 for l in ['Level 1','Level 2','Level 1','Game Over']: card = LabelNode(' ')#,color=('#0016ff')) card.font = ('Menlo',60) card.position = (300,y) card.size = (160,100) self.add_child(card) card_name = LabelNode(l) card_name.font = card.font card_name.size = card.size card.add_child(card_name) self.cards.append(card) y = y - 100 #pause symbol self.pause_button = SpriteNode('iow:pause_32', position=(32, self.size.h-32), parent=self) #undo symbol self.undo_button = SpriteNode('iow:reply_256', position=(90, self.size.h-31), parent=self) self.undo_button.size = (50,50) #redo symbol self.redo_button = SpriteNode('iow:refresh_24', position=(160, self.size.h-31), parent=self) self.redo_button.size = (50,50) #control pause symbol button def touch_ended(self, touch): if self.pause_button.frame.contains_point(touch.location): self.v = ui.load_view('pawz.pyui') self.v['button1'].action = self.pawz_button_action self.v.present('sheet') self.v['textfield1'].begin_editing() def pawz_button_action(self,sender): txt = self.v['textfield1'].text for card in self.cards: if card.children[0].text == txt: card.text = '😀' self.v.close()
if name == 'main':
run(Game(), PORTRAIT, show_fps=True) -
@sodoku ok, I see but which process do you want to undo or redo?
-
After I’ve added an emoji with the button inside the pause menu then I would like to undo add emoji and then redo add emoji Incase I’ve made mistakes
-
@sodoku do you want multiple successive undo or only the last one?
-
Just the last one should do the trick
-
@sodoku Sorry, but while I was waiting for your answer, I wrote this code, supporting successive undo/redo
from scene import * class Game (Scene): def setup(self): self.background_color = '#004f82' ground = Node(parent=self) x = 0 while x <= self.size.w + 64: tile = SpriteNode('plf:Ground_PlanetHalf_mid', position=(x, 0)) ground.add_child(tile) x += 64 self.player = SpriteNode('plf:AlienGreen_front') self.player.anchor_point = (0.5, 0) self.player.position = (self.size.w/2, 32) self.add_child(self.player) #Labels self.evol = [] self.cards = [] y = 760 evol = [] for l in ['Level 1','Level 2','Level 1','Game Over']: card = LabelNode(' ')#,color=('#0016ff')) card.font = ('Menlo',60) card.position = (300,y) card.size = (160,100) self.add_child(card) card_name = LabelNode(l) card_name.font = card.font card_name.size = card.size card.add_child(card_name) self.cards.append(card) evol.append((l,card.text)) y = y - 100 self.evol.append(evol) self.current_evol = 0 #pause symbol self.pause_button = SpriteNode('iow:pause_32', position=(32, self.size.h-32), parent=self) #undo symbol self.undo_button = SpriteNode('iow:reply_256', position=(90, self.size.h-31), parent=self) self.undo_button.size = (50,50) #redo symbol self.redo_button = SpriteNode('iow:refresh_24', position=(160, self.size.h-31), parent=self) self.redo_button.size = (50,50) #control pause symbol button def touch_ended(self, touch): if self.pause_button.frame.contains_point(touch.location): self.v = ui.load_view('pawz.pyui') self.v['button1'].action = self.pawz_button_action self.v.present('sheet') self.v['textfield1'].begin_editing() elif self.undo_button.frame.contains_point(touch.location): if self.current_evol > 0: self.current_evol -= 1 evol = self.evol[self.current_evol] #print('undo',self.current_evol,evol) for e in evol: txt = e[0] for card in self.cards: if card.children[0].text == txt: card.text = e[1] elif self.redo_button.frame.contains_point(touch.location): if self.current_evol < (len(self.evol)-1): self.current_evol += 1 evol = self.evol[self.current_evol] #print('redo',self.current_evol,evol) for e in evol: txt = e[0] for card in self.cards: if card.children[0].text == txt: card.text = e[1] def pawz_button_action(self,sender): # pause button txt = self.v['textfield1'].text evol = [] for card in self.cards: if card.children[0].text == txt: card.text = '😀' else: card.text = ' ' evol.append((card.children[0].text,card.text)) self.evol.append(evol) self.current_evol = len(self.evol) - 1 self.v.close() if __name__ == '__main__': run(Game(), PORTRAIT, show_fps=True)
-
@cvp
Awesome logic skills dude thanks I’m learning a lot from you -
@cvp is it possible not to erase the emoji when you add more then one
For example if I add emojis to Level 1 then if I add an emoji to Game Over without deleting the Level 1 emojis so all three are covered??or all four can be covered
This aspect worked in the previous version you coded before the undo redo upgrade -
@sodoku yes, of course, sorry. Two lines to comment
def pawz_button_action(self,sender): # pause button txt = self.v['textfield1'].text evol = [] for card in self.cards: if card.children[0].text == txt: card.text = '😀' #else: # card.text = ' ' evol.append((card.children[0].text,card.text)) self.evol.append(evol) self.current_evol = len(self.evol) - 1 self.v.close()
-
Wow fantastic, your truly amazing I can’t thank you enough
-
Help me again please
Okay the pawz.pyui only has one TextField and one buttonSo what I need help with is, I wanted to be able to is input the emoji into scene A and scene B without having to manually go to each scene and adding the emoji twice
So the objective is, if I add the emoji behind the text in scene B it would be automatically added behind the text in scene A and vice versa if I add the emoji behind the text in scene A it would automatically be added behind the text in scene B
from scene import * import ui #import time import scene import console class MainMenuScene (Scene): def setup(self): self.background = SpriteNode(color = 'blue') self.background.size = self.size self.background.position = self.size / 2 self.add_child(self.background) self.page1=LabelNode('page1') self.page1.size=(75,75) self.page1.position=(44,860) self.add_child(self.page1) self.page2=LabelNode('page2') self.page2.size=(75,75) self.page2.position=(44,760) self.add_child(self.page2) def touch_began(self, touch): if self.page1.frame.contains_point(touch.location): self.present_modal_scene(a_scene) elif self.page2.frame.contains_point(touch.location): self.present_modal_scene(b_scene) #class Game (Scene): class AScene (Scene): def setup(self): self.background = SpriteNode(color = 'red') self.background.size = self.size self.background.position = self.size / 2 self.add_child(self.background) self.main=LabelNode('main') self.main.size=(75,75) self.main.position=(44,860) self.add_child(self.main) self.background_color = '#004f82' ground = Node(parent=self) x = 0 while x <= self.size.w + 64: tile = SpriteNode('plf:Ground_PlanetHalf_mid', position=(x, 0)) ground.add_child(tile) x += 64 self.player = SpriteNode('plf:AlienGreen_front') self.player.anchor_point = (0.5, 0) self.player.position = (self.size.w/2, 32) self.add_child(self.player) #Labels self.evol = [] self.cards = [] y = 760 evol = [] for l in ['Level 1','Level 2','Level 1','Game Over']: card = LabelNode(' ')#,color=('#0016ff')) card.font = ('Menlo',60) card.position = (300,y) card.size = (160,100) self.add_child(card) card_name = LabelNode(l) card_name.font = card.font card_name.size = card.size card.add_child(card_name) self.cards.append(card) evol.append((l,card.text)) y = y - 100 self.evol.append(evol) self.current_evol = 0 #pause symbol self.pause_button = SpriteNode('iow:pause_32', position=(32, self.size.h-32), parent=self) #undo symbol self.undo_button = SpriteNode('iow:reply_256', position=(90, self.size.h-31), parent=self) self.undo_button.size = (50,50) #redo symbol self.redo_button = SpriteNode('iow:refresh_24', position=(160, self.size.h-31), parent=self) self.redo_button.size = (50,50) #control pause symbol button def touch_ended(self, touch): if self.pause_button.frame.contains_point(touch.location): self.v = ui.load_view('pawz.pyui') self.v['button1'].action = self.pawz_button_action self.v.present('sheet') self.v['textfield1'].begin_editing() elif self.undo_button.frame.contains_point(touch.location): if self.current_evol > 0: self.current_evol -= 1 evol = self.evol[self.current_evol] #print('undo',self.current_evol,evol) for e in evol: txt = e[0] for card in self.cards: if card.children[0].text == txt: card.text = e[1] elif self.redo_button.frame.contains_point(touch.location): if self.current_evol < (len(self.evol)-1): self.current_evol += 1 evol = self.evol[self.current_evol] #print('redo',self.current_evol,evol) for e in evol: txt = e[0] for card in self.cards: if card.children[0].text == txt: card.text = e[1] def pawz_button_action(self,sender): # pause button txt = self.v['textfield1'].text evol = [] for card in self.cards: if card.children[0].text == txt: card.text = '😀' #else: #card.text = ' ' evol.append((card.children[0].text,card.text)) self.evol.append(evol) self.current_evol = len(self.evol) - 1 self.v.close() def touch_began(self, touch): if self.main.frame.contains_point(touch.location): self.dismiss_modal_scene() class BScene (Scene): def setup(self): self.background = SpriteNode(color = '#71edff') self.background.size = self.size self.background.position = self.size / 2 self.add_child(self.background) self.main=LabelNode('main') self.main.size=(75,75) self.main.position=(44,760) self.add_child(self.main) self.background_color = '#004f82' ground = Node(parent=self) x = 0 while x <= self.size.w + 64: tile = SpriteNode('plf:Ground_PlanetHalf_mid', position=(x, 0)) ground.add_child(tile) x += 64 self.player = SpriteNode('plf:AlienGreen_front') self.player.anchor_point = (0.5, 0) self.player.position = (self.size.w/2, 32) self.add_child(self.player) #Labels self.evol = [] self.cards = [] y = 760 evol = [] for l in ['Level 1','Level 2','Level 1','Game Over']: card = LabelNode(' ')#,color=('#0016ff')) card.font = ('Menlo',60) card.position = (300,y) card.size = (160,100) self.add_child(card) card_name = LabelNode(l) card_name.font = card.font card_name.size = card.size card.add_child(card_name) self.cards.append(card) evol.append((l,card.text)) y = y - 100 self.evol.append(evol) self.current_evol = 0 #pause symbol self.pause_button = SpriteNode('iow:pause_32', position=(32, self.size.h-32), parent=self) #undo symbol self.undo_button = SpriteNode('iow:reply_256', position=(90, self.size.h-31), parent=self) self.undo_button.size = (50,50) #redo symbol self.redo_button = SpriteNode('iow:refresh_24', position=(160, self.size.h-31), parent=self) self.redo_button.size = (50,50) #control pause symbol button def touch_ended(self, touch): if self.pause_button.frame.contains_point(touch.location): self.v = ui.load_view('pawz.pyui') self.v['button1'].action = self.pawz_button_action self.v.present('sheet') self.v['textfield1'].begin_editing() elif self.undo_button.frame.contains_point(touch.location): if self.current_evol > 0: self.current_evol -= 1 evol = self.evol[self.current_evol] #print('undo',self.current_evol,evol) for e in evol: txt = e[0] for card in self.cards: if card.children[0].text == txt: card.text = e[1] elif self.redo_button.frame.contains_point(touch.location): if self.current_evol < (len(self.evol)-1): self.current_evol += 1 evol = self.evol[self.current_evol] #print('redo',self.current_evol,evol) for e in evol: txt = e[0] for card in self.cards: if card.children[0].text == txt: card.text = e[1] def pawz_button_action(self,sender): # pause button txt = self.v['textfield1'].text evol = [] for card in self.cards: if card.children[0].text == txt: card.text = '😀' #else: #card.text = ' ' evol.append((card.children[0].text,card.text)) self.evol.append(evol) self.current_evol = len(self.evol) - 1 self.v.close() def touch_began(self, touch): if self.main.frame.contains_point(touch.location): self.dismiss_modal_scene() main_menu_scene = MainMenuScene() a_scene = AScene() b_scene = BScene() main_view = ui.View() scene_view = SceneView(frame=main_view.bounds, flex='WH') main_view.add_subview(scene_view) scene_view.scene = main_menu_scene main_view.present(hide_title_bar=True, animated=False)
-
@sodoku first, t o be able to help you, we need your script correctly indented by putting
3 back ticks above and bottom ```
You have used bad apostrophes -
Help me again I fixed the 3 ticks thing in the post above
-
@sodoku I've copied your script in my Pythonista and created a pawn.pyui with a button and a TextField.
This is presented when I tap pause but I really don't understand your request.
Where do you want to store/show the text you type in the TextField?