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.


    Plotting on a single screen with text fields

    Pythonista
    3
    8
    5734
    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.
    • avv
      avv last edited by

      Give me an example of the output of the graphic information below ui.Textfield.

      1 Reply Last reply Reply Quote 0
      • JonB
        JonB last edited by

        Can you clarify your question? What is it you are trying to do exactly? Are you trying to display some kind of ascii art in a textfield? Textfields are intended to display text, not graphics (in general)

        1 Reply Last reply Reply Quote 0
        • avv
          avv last edited by

          There teksovoe field. Below, you need to draw a graph based on the entered text

          1 Reply Last reply Reply Quote 0
          • avv
            avv last edited by

            In other words, the need for an example screen display of a TextField and below the graph.

            1 Reply Last reply Reply Quote 0
            • ccc
              ccc last edited by

              The more you type, the smaller the red oval gets...

              import ui
              
              class GraphicsBelowTextView(ui.View):
                  def __init__(self):
                      self.hidden = True
                      self.present()
              
                      text_field = ui.TextField()
                      text_field.width = self.bounds[2]
                      text_field.height = 25
                      text_field.delegate = self
                      self.add_subview(text_field)
              
                      self.image_view = ui.ImageView()
                      self.image_view.frame = self.bounds
                      self.image_view.y      += text_field.height
                      self.image_view.height -= text_field.height
                      self.add_subview(self.image_view)
                      
                      self.textfield_did_change(text_field)
                      self.hidden = False
              
                  def textfield_did_change(self, textfield):
                      _, _, w, h = self.image_view.frame
                      min_wh = min(w, h)
                      x = (len(textfield.text) + 1) * min_wh / 100
                      with ui.ImageContext(w, h) as ctx:
                          ui.set_color('white')
                          ui.fill_rect(0, 0, w, h)
                          ui.set_color('red')
                          circle = ui.Path.oval(x, x, w-2*x, h-2*x)
                          circle.fill()
                          self.image_view.image = ctx.get_image()
              
              GraphicsBelowTextView()
              
              1 Reply Last reply Reply Quote 0
              • avv
                avv last edited by

                It works. How to implement what is written in the documentation:

                "integration with the ui Module

                If you want to combine the render loop-based drawing functionality of the scene modules with standard user interface elements, like text fields, you can do so with the SceneViewclass, which inherits from ui.View. Using a SceneView is an alternative to presenting a scene with the run() function."
                Thanks for the detailed answer.

                1 Reply Last reply Reply Quote 0
                • ccc
                  ccc last edited by

                  import scene, ui
                  
                  class MinScene(scene.Scene):
                      def __init__(self):
                          self.set_char_count(0)
                  
                      def set_char_count(self, char_count):
                          self.char_count = char_count
                  
                      def draw(self):
                          scene.background(0.40, 0.80, 1.00)
                          _, _, w, h = self.bounds
                          min_wh = min(w, h)
                          x = (self.char_count + 1) * min_wh / 100
                          scene.fill(1, 0, 0)
                          scene.ellipse(x, x, w-2*x, h-2*x)
                  
                  class SceneBelowTextView(ui.View):
                      def __init__(self):
                          self.hidden = True
                          self.present()
                  
                          text_field = ui.TextField()
                          text_field.width = self.bounds[2]
                          text_field.height = 25
                          text_field.delegate = self
                          self.add_subview(text_field)
                  
                          self.scene_view = scene.SceneView()
                          self.scene_view.frame = self.bounds
                          self.scene_view.y      += text_field.height
                          self.scene_view.height -= text_field.height
                          self.scene_view.scene = MinScene()
                          self.add_subview(self.scene_view)
                  
                          self.hidden = False
                  
                      def textfield_did_change(self, textfield):
                          self.scene_view.scene.set_char_count(len(textfield.text))
                  
                  SceneBelowTextView()
                  
                  1 Reply Last reply Reply Quote 0
                  • avv
                    avv last edited by

                    Thank you so much for the prompt support. This is perhaps the best forum in the internet!

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