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.


    Help! I need help thinking of python projects I can do.

    Pythonista
    7
    35
    10857
    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.
    • Bumbo Cactoni
      Bumbo Cactoni last edited by

      @robStacks
      You want me to help?
      I don’t know much Python, so I don’t think I’ll be able to help. Sorry. I am working on learning a lot more python, but right now I just don’t have the knowledge or experience to help. I wish I could help. Sorry. :(

      stephen 1 Reply Last reply Reply Quote 0
      • stephen
        stephen @Bumbo Cactoni last edited by

        @Bumbo-Cactoni that request has already be takin care of in another thread but helping others is the best way to learn 😉 you will research stuff and learn aspects you may never have or create new objects to put in your cook book. for example i created this ButtonNode and i probably wouldnof made one at some point but not as neat and propbably not so universal in a way. jump out there help people help you 🤠 community is about teamwork💯

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

          Ok no worries Bumbo i am also a beginner in python and it is a great code language.
          Its easy to read and understand and with a great communitie very helpfull.
          I managed to create something awesome and usefull in a short time thx to that.
          I'll show you my progress so you can see:

          import math
          import ui
          import console
          import photos
          import matplotlib.pyplot as plt
          import numpy as np
          from io import BytesIO
          
          class Vector(list):
          	abs_tol = 1e-10
          
          	def __init__(self, *args, **kwargs):
          		x = kwargs.pop('x', None)
          		y = kwargs.pop('y', None)
          
          		if x and y:
          			self.append(x)
          			self.append(y)
          		elif len(args) == 2:
          			self.append(args[0])
          			self.append(args[1])
          		else:
          			super().__init__(*args, **kwargs)
          
          	@property
          	def x(self):
          		''' x component of the vector. '''
          		return self[0]
          
          	@x.setter
          	def x(self, value):
          		self[0] = value
          
          	@property
          	def y(self):
          		''' y component of the vector. '''
          		return self[1]
          
          	@y.setter
          	def y(self, value):
          		self[1] = value
          
          	def __eq__(self, other):
          		return math.isclose(
          			self[0], other[0], abs_tol=self.abs_tol) and math.isclose(
          				self[1], other[1], abs_tol=self.abs_tol)
          
          	def __ne__(self, other):
          		return not self.__eq__(other)
          
          	def __abs__(self):
          		return type(self)(abs(self.x), abs(self.y))
          
          	def __int__(self):
          		return type(self)(int(self.x), int(self.y))
          
          	def __add__(self, other):
          		return type(self)(self.x + other.x, self.y + other.y)
          
          	def __iadd__(self, other):
          		self.x += other.x
          		self.y += other.y
          		return self
          
          	def __sub__(self, other):
          		return type(self)(self.x - other.x, self.y - other.y)
          
          	def __mul__(self, other):
          		return type(self)(self.x * other, self.y * other)
          
          	def __truediv__(self, other):
          		return type(self)(self.x / other, self.y / other)
          
          	def __len__(self):
          		return self.magnitude
          
          	def __round__(self):
          		return type(self)(round(self.x), round(self.y))
          
          	def dot_product(self, other):
          		''' Sum of multiplying x and y components with the x and y components of another vector. '''
          		return self.x * other.x + self.y * other.y
          
          	def distance_to(self, other):
          		''' Linear distance between this vector and another. '''
          		return (Vector(other) - self).magnitude
          
          	@property
          	def magnitude(self):
          		''' Length of the vector, or distance from (0,0) to (x,y). '''
          		return math.hypot(self.x, self.y)
          
          	@magnitude.setter
          	def magnitude(self, m):
          		r = self.radians
          		self.polar(r, m)
          
          	@property
          	def radians(self):
          		''' Angle between the positive x axis and this vector, in radians. '''
          		#return round(math.atan2(self.y, self.x), 10)
          		return math.atan2(self.y, self.x)
          
          	@radians.setter
          	def radians(self, r):
          		m = self.magnitude
          		self.polar(r, m)
          
          	def polar(self, r, m):
          		''' Set vector in polar coordinates. `r` is the angle in radians, `m` is vector magnitude or "length". '''
          		self.y = math.sin(r) * m
          		self.x = math.cos(r) * m
          
          	@property
          	def degrees(self):
          		''' Angle between the positive x axis and this vector, in degrees. '''
          		return math.degrees(self.radians)
          
          	@degrees.setter
          	def degrees(self, d):
          		self.radians = math.radians(d)
          
          	def steps_to(self, other, step_magnitude=1.0):
          		""" Generator that returns points on the line between this and the other point, with each step separated by `step_magnitude`. Does not include the starting point. """
          		if self == other:
          			yield other
          		else:
          			step_vector = other - self
          			steps = math.floor(step_vector.magnitude / step_magnitude)
          			step_vector.magnitude = step_magnitude
          			current_position = Vector(self)
          			for _ in range(steps):
          				current_position += step_vector
          				yield Vector(current_position)
          			if current_position != other:
          				yield other
          
          	def rounded_steps_to(self, other, step_magnitude=1.0):
          		''' As `steps_to`, but returns points rounded to the nearest integer. '''
          		for step in self.steps_to(other):
          			yield round(step)
          
          bearingblue = int(input("Bearing blue: "))
          rangeblue = int(input("Range blue:   "))
          
          bearingred = int(input("Bearing red:  "))
          rangered = int(input("Range red:    "))
          
          blue = Vector(rangeblue, 0)
          blue.degrees = bearingblue
          
          red = Vector(rangered, 0)
          red.degrees = bearingred
          
          delta = red - blue
          
          way = np.loadtxt('waypoints.txt')
          ways = way[:, 0]
          r = way[:, 1]
          
          if delta.degrees < 0:
          	print('Bearing: ', int(delta.degrees + 360))
          	print('Distance:', int(delta.magnitude))
          else:
          	print('Bearing: ', int(delta.degrees))
          	print('Distance:', int(delta.magnitude))
          
          thetablue= np.deg2rad(bearingblue)
          thetared= np.deg2rad(bearingred)
          thetawayp= np.deg2rad(ways)
          
          class PathView(ui.View):
          	def __init__(self, frame):
          		self.frame = frame
          		self.flex = 'WH'
          		self.path = None
          		self.action = None
          
          	def touch_began(self, touch):
          		x, y = touch.location
          		self.path = ui.Path()
          		self.path.line_width = 1
          		self.path.line_join_style = ui.LINE_JOIN_ROUND
          		self.path.line_cap_style = ui.LINE_CAP_ROUND
          		self.path.move_to(x, y)
          
          	def touch_moved(self, touch):
          		x, y = touch.location
          		self.path.line_to(x, y)
          		self.set_needs_display()
          
          	def touch_ended(self, touch):
          		# Send the current path to the SketchView:
          		if callable(self.action):
          			self.action(self)
          		# Clear the view (the path has now been rendered
          		# into the SketchView's image view):
          		self.path = None
          		self.set_needs_display()
          
          	def draw(self):
          		if self.path:
          			self.path.stroke()
          
          ax = plt.subplot(111, projection='polar')
          plt.polar(thetawayp, r)
          plt.polar(thetawayp, r, 'k.', zorder=3)
          ax.scatter(thetablue,rangeblue)
          ax.scatter(thetared,rangered, color='r')
          ax.set_theta_direction(-1)
          ax.set_rmax(120)
          ax.set_theta_zero_location('N')
          ax.set_title("N ", va='bottom')
          ax.grid(True)
          b = BytesIO()
          
          plt.savefig(b)
          
          
          class SketchView(ui.View):
          	def __init__(self, width=768, height=768):
          		self.bg_color = '#ffffff'
          		iv = ui.ImageView(frame=(0, 0, width, height))
          		bg = ui.Image.from_data(b.getvalue())
          		iv.image = bg
          		iv.content_mode = ui.CONTENT_SCALE_ASPECT_FILL
          		image_view = ui.ImageView()
          		image_view.image = ui.Image.named('Bullseye.png')
          		image_view.present()
          		pv = PathView(frame=self.bounds)
          		pv.action = self.path_action
          		self.add_subview(iv)
          		self.add_subview(pv)
          		blue_button = ui.ButtonItem()
          		blue_button.title = 'Bluebulls'
          		blue_button.action = self.bluebulls_action
          		red_button = ui.ButtonItem()
          		red_button.title = 'Redbulls'
          		red_button.tint_color = '#990000'
          		red_button.action = self.redbulls_action 
          		maps_button = ui.ButtonItem()
          		maps_button.title = 'Maps'
          		maps_button.tint_color = '#000d99'
          		maps_button.action = self.map_action
          		save_button = ui.ButtonItem()
          		save_button.title = 'Save Image'
          		save_button.action = self.save_action
          		plot_button = ui.ButtonItem()
          		plot_button.title = 'Plot'
          		plot_button.tint_color = '#000d99'
          		plot_button.action = self.plot_action
          		clear_button = ui.ButtonItem()
          		clear_button.title = 'Clear'
          		clear_button.tint_color = '#af0000'
          		clear_button.action = self.clear_action
          		self.right_button_items = [save_button, plot_button, red_button]
          		self.left_button_items = [clear_button, maps_button, blue_button]
          		self.image_view = iv
          
          	
          	def map_action(self, sender):
          # Show an image picker dialog (allowing multiple selection) and print the result
          		assets = photos.pick_asset(title='Pick a Map', multi=True)
          		
          
          	def path_action(self, sender):
          		path = sender.path
          		old_img = self.image_view.image
          		width, height = 768, 768
          
          		with ui.ImageContext(width, height) as ctx:
          			if old_img:
          				old_img.draw()
          			path.stroke()
          			self.image_view.image = ctx.get_image()
          						
          	def redbulls_action(self, sender):
          		m=1
          	def bluebulls_action(self, sender):
          		m=1
          	def plot_action(self, sender):
          		self.image_view.image = ui.Image.from_data(b.getvalue())
          
          	def clear_action(self, sender):
          		self.image_view.image = None
          
          	def save_action(self, sender):
          		if self.image_view.image:
          			# We draw a new image here, so that it has the current
          			# orientation (the canvas is quadratic).
          			with ui.ImageContext(self.width, self.height) as ctx:
          				self.image_view.image.draw()
          				img = ctx.get_image()
          				photos.save_image(img)
          				console.hud_alert('Saved')
          		else:
          			console.hud_alert('No Image', 'error')
          
          
          sv = SketchView()
          sv.name = 'BullseyePad'
          sv.present()
          
          

          Its starting to look like an useable app already👍🏻

          I am looking into API's right Now not so hard to use and lots of them look it up.
          Maybe you can find a nice project for u with the use of API's

          Goodluck finding a Nice project!

          mikael 1 Reply Last reply Reply Quote 0
          • Bumbo Cactoni
            Bumbo Cactoni last edited by

            Thank you!
            Also, I kinda have a slightly random question. What is your favorite app or website to learn python on? I use SoloLearn right now, since it’s free.

            1 Reply Last reply Reply Quote 0
            • mikael
              mikael @robStacks last edited by

              @robStacks, suggest moving the Vector implementation to a file called vector.py in site-packages. Then you can import it and it does not distract you from your own code.

              robStacks 1 Reply Last reply Reply Quote 1
              • robStacks
                robStacks @mikael last edited by

                @mikael Yes thx for pointing that out to me did so and is so much better👍🏻

                1 Reply Last reply Reply Quote 0
                • Bumbo Cactoni
                  Bumbo Cactoni last edited by

                  Yay! I’ve thought of a good project to do! Hopefully it won’t be too complicated... by the way, does anyone know how to display a picture? I’ve tried googling it, but it’s all a load of mumbo jumbo to me.

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

                    @Bumbo-Cactoni

                    Using Image Module:

                    import Image
                    
                    with Image.open('my_img.png') as img:
                        img.show()
                        
                    

                    Using ui Module:

                    import ui
                    
                    class MyView(ui.View):
                        def __init__(self, *args, **kwargs):
                            self.img = ui.Image.named('my_img.png')
                            self.iv = ui.ImageView(
                                image=self.img,
                                width=ui.get_screen_size()[0],
                                height=ui.get_screen_size()[1])
                            self.add_subview(self.iv)
                            
                    MyView().present('fullscreen')
                    

                    Using scene Module:

                    import scene
                    
                    class MyScene(scene.Scene):
                        def setup(self):
                            self.sn=scene.SpriteNode(
                                texture=scene.Texture('my_img.png'),
                                parent=self,
                                position=self.size/2)
                                
                    scene.run(MyScene())
                    
                    1 Reply Last reply Reply Quote 1
                    • Bumbo Cactoni
                      Bumbo Cactoni last edited by Bumbo Cactoni

                      @stephen
                      Thank you!

                      stephen 1 Reply Last reply Reply Quote 0
                      • stephen
                        stephen @Bumbo Cactoni last edited by

                        @Bumbo-Cactoni Your Welcome

                        1 Reply Last reply Reply Quote 1
                        • Bumbo Cactoni
                          Bumbo Cactoni last edited by

                          Now I have another question: How do you display a picture that you can move with your finger?

                          stephen 1 Reply Last reply Reply Quote 0
                          • stephen
                            stephen @Bumbo Cactoni last edited by

                            @Bumbo-Cactoni

                            😁 I like making these examples! Give me just a few.

                            1 Reply Last reply Reply Quote 0
                            • Bumbo Cactoni
                              Bumbo Cactoni last edited by Bumbo Cactoni

                              @stephen
                              Have you ever seen, like, those super simple block-programming apps? That they use to semi-teach people to program?

                              stephen 1 Reply Last reply Reply Quote 0
                              • Bumbo Cactoni
                                Bumbo Cactoni last edited by

                                I am trying to make my own block-programming thingy, but I don’t know how to create the blocks, make them movable, or even make them connect together.

                                1 Reply Last reply Reply Quote 0
                                • stephen
                                  stephen @Bumbo Cactoni last edited by

                                  @Bumbo-Cactoni

                                  Like minecraft/terreria?

                                  1 Reply Last reply Reply Quote 0
                                  • Bumbo Cactoni
                                    Bumbo Cactoni last edited by Bumbo Cactoni

                                    @stephen

                                    You mean like moving the items in the inventories?
                                    If so, yes, that is kinda what I mean.

                                    stephen 1 Reply Last reply Reply Quote 0
                                    • stephen
                                      stephen @Bumbo Cactoni last edited by

                                      @Bumbo-Cactoni

                                      
                                      from scene import *
                                      
                                      def Dirt(parent, pos, size=(64, 64)):
                                          sn=SpriteNode(
                                              texture=Texture('plf:Ground_GrassCenter'),
                                              parent=parent,
                                              anchor_point=(0.0, 0.0),
                                              size=size,
                                              position=pos)
                                          return sn
                                      
                                      def Stone(parent, pos, size=(64, 64)):
                                          sn=SpriteNode(
                                              texture=Texture('plf:Ground_DirtCenter'),
                                              parent=parent,
                                              anchor_point=(0.0, 0.0),
                                              size=size,
                                              position=pos)
                                          return sn
                                      
                                      def fixed_position(x, fixed_val=64):
                                          return x - x%fixed_val
                                              
                                      class MyScene(Scene):
                                          def setup(self):
                                              self.active_block=None
                                              self.anchor_point=(0.0, 0.0),
                                              self.dirt_button=Dirt(self, (self.size[0]/2-80, self.size[1]-196))
                                              self.stone_button=Stone(self, (self.size[0]/2+80, self.size[1]-196))
                                              
                                          
                                          
                                          def touch_began(self, touch):
                                              if touch.location in self.dirt_button.frame:
                                                  self.active_block=Dirt(self, touch.location)
                                              if touch.location in self.stone_button.frame:
                                                  self.active_block=Stone(self, touch.location)
                                          
                                          def touch_moved(self, touch):
                                              if self.active_block:
                                                  self.active_block.position=touch.location
                                              
                                              
                                          def touch_ended(self, touch):
                                              x, y = self.active_block.position
                                              self.active_block.position=(fixed_position(x), fixed_position(y))
                                              self.active_block=None
                                        
                                      run(MyScene())
                                      
                                      
                                      1 Reply Last reply Reply Quote 1
                                      • Bumbo Cactoni
                                        Bumbo Cactoni last edited by

                                        Thank you! I would not have been able to figure that out on my own.

                                        stephen 1 Reply Last reply Reply Quote 0
                                        • Bumbo Cactoni
                                          Bumbo Cactoni last edited by Bumbo Cactoni

                                          @stephen
                                          Also, is there any way to set my own sprite/look for the objects? Like, make the dirt one look however I want it to?

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

                                            texture=Texture('plf:Ground_DirtCenter') is what sets the look. Other textures (images) are available to you as discussed in the Pythonista docs You can access built-in images in Pythonista using the [+] button at the top of the editor.

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