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.


    UI problem in first project

    Pythonista
    2
    7
    3161
    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.
    • Af305
      Af305 last edited by

      Hi,

      I didn‘t programm for a long time now, and just started with Python last week, because I missed programming and wanted to try something new.
      Now after planning my first project, I decided to start with a simple UI, and thought it should be done fairly quick.

      This is what my created UI-file looks like:
      https://ibb.co/xCq2k9p

      And this is my script:

      import ui
      
      data1 = ['Item_A', 'Item_B', 'Item_C', 'Item_D']
      data2 = ['Item_E', 'Item_F']
      
      def button1_pressed(button1):
      	print('Button1 pressed.')
      	
      def loc_selection(segmentedcontrol1):
      	if button2.selected_index == 0:
      		print('Segment A')
      		data = data1
      		view['tableview1'].data_source.items = data
      		
      	elif button2.selected_index == 1:
      		print('Segment B')
      		data = data2
      		view['tableview1'].data_source.items = data
      		
      def list_item_clicked(tableview1):
      	print('Item selected.')
      
      view = ui.load_view('test_01')
      view.name = 'Test 01'
      
      data = data1
      view['tableview1'].data_source.items = data
      
      button2 = view['segmentedcontrol1']
      loc_selection('segmentedcontrol1')
      
      view.present('sheet')
      

      It’s a really simple thing probably, but it really was a challenge for me to get this done so far :D

      My problem now: I want to run a specific function if a list item is selected and I can‘t find a way how to do it.

      I would be really greatful for any help!

      Best regards

      cvp 3 Replies Last reply Reply Quote 0
      • cvp
        cvp @Af305 last edited by cvp

        @Af305 If I correctly understand, put

        button2.action = loc_selection
        

        Instead of

        loc_selection('segmentedcontrol1')
        
        1 Reply Last reply Reply Quote 0
        • cvp
          cvp @Af305 last edited by

          @Af305 and, more usual

          def loc_selection(sender):
              if sender.selected_index == 0:
                  print('Segment A')
                  data = data1
              elif sender.selected_index == 1:
                  print('Segment B')
                  data = data2
              view['tableview1'].data_source.items = data```
          1 Reply Last reply Reply Quote 0
          • cvp
            cvp @Af305 last edited by

            @Af305 and

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

              @cvp thank you for your help!
              Regarding your first message:
              I‘m calling the loc_selection function here to get that print(„Segment A“). I want to replace print with a boolean later on to say „Segment A“ selected = True.
              Thanks for your advice in your second message! Didn‘t think about that.
              Unfortunately I don‘t understand your third message - thats exactly how it‘s set in my UI file.

              What i want to do with my TableView is:
              If Item_A selected -> function_a()
              If Item_B selected -> function_b()
              If Item_C selected -> function_c()
              If Item_D selected -> function_d()
              If Item_E selected -> function_e()
              If Item_F selected -> function_f()

              Currently I‘ve set „list_item_clicked“ as action for my TableView. Thats working so far, but I don‘t know how to differentiate between the rows to call a different function for each of them. Right now my whole TableView is acting like one fat Button with just a single action.

              cvp 1 Reply Last reply Reply Quote 0
              • cvp
                cvp @Af305 last edited by

                @Af305 remove the action in your ui designer and the def in the script, and add this

                class MyTableViewDelegate(object):
                	def tableview_did_select(self, tableview, section, row):
                		print(row)
                		
                view['tableview1'].delegate = MyTableViewDelegate()
                

                You will have to read a bit about delegate

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

                  @cvp that‘s exactly what I was looking for! Thank you very much for your help!
                  I‘ll read about it.

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