
I am an Australian. I am retired and have been living in both Phuket and Pattaya for around 15 years. I have coded in numerous languages, but it's so long ago, hardly worth mentioning.
I am very new to Python, and not very good. Basically a hobby for me. Mainly use Python on my iPad, almost nothing on my desktop.
I am using Pythonista 1.6 with an iPad Pro, WiFi/Cellular 128gb
Yes, my picture is a very ugly one (only one I had dressed up like this). I really like the band SPG (Steam Powered Giraffe), 2 thai friends and myself got a tailor here to make the outfits of certain band members in the band. We go out in them sometimes around pattaya. I am a lot of things, but not shy :)
If you are interested , look up SPG on YouTube and look at their "Diamonds in the sky" cover. Then look at some of there other work!
-
Phuket2
@pythonista21 , date has a day, month and year property you can access. So date.year, is an int.
-
Phuket2
@Drizzel , i just happened to watch this David Beasley YouTube Video today. If you haven't already watched I think you might find it intesting.
-
Phuket2
@ccc , its the / operator , need the // version in py3.x
for i, front_image in enumerate(self.front_images): x, y = i%5, i//5
-
Phuket2
@Tiowang, thanks very much. That fixed it. 2 occurrences to replace in the source file.
-
Phuket2
I am getting the same problem with installing other packages. I thought it might have something to do with the new python warehouse release and not using pip v10.x
I did selfupdate on stash to make sure it was the latest. Latest version is using pip v9 something.
I tried to upgrade pip in stash myself once and did something very wrong and had to reinstall stash. So i didn't try upgrading the pip myself this time. -
Phuket2
@Gadgettyke, looks like you just forgot to put your function name in action property of the button in the ui designer. ie button_action.
-
Phuket2
Guys, tkinter can't be used in Pythonistia. Tkinter is for desktop ui's not mobile. Pythonistia comes with a ui module. You use this to make a GUI in Pythonistia. Its very good. There also is a ui designer. If you select 'UIFile' when creating a new file, once its created you will see you are in the UI Designer. You can also do in code, have a look at the UI module in the docs
-
Phuket2
@nerdtron , no problems. I think for this example that flex would be the best and easiest. However, when I tried doing it, I had a brain freeze! Its been a long time since I have done it. Pls dont take that as it is hard to do. Once you have it in your head, normally its simple.
I am sure someone else here will chime in with the correct way to set the flex settings.The example I have put below is still a good a good way to know. Its using a custom view. One of the callbacks you get when you have a Custom View Class is layout. Its called by the ui automatically (if you have a method called layout) when you need to respond to changes in your views height or width. Its worth having a read through the docs about Custom Views.
They are easy to make and give you a lot more flexibility and some extra functionality.Anyway, I hope this also helps
import ui class MyClass(ui.View): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # create the field and button self.in_fld = ui.TextField() self.post_btn = ui.Button(title='Add Item', bg_color='orange', corner_radius=6, action=self.btn_action, ) # do some static adjustments to button and field properites # properties that we dont need to calculate in layout self.post_btn.size_to_fit() self.post_btn.width += 4 self.post_btn.y = 2 self.in_fld.x = 2 self.in_fld.y = 2 self.in_fld.height = self.post_btn.height self.add_subview(self.in_fld) self.add_subview(self.post_btn) def btn_action(self, sender): # just to show its working append '@' to the in_fld text self.in_fld.text += '@' def layout(self): ''' This method is called by the ui automatically when required, such as orientation change. ''' # only need to adjust the width of the fld and the x pos # of the btn for this case self.in_fld.width = self.width - self.post_btn.width - 6 self.post_btn.x = self.in_fld.frame.max_x + 2 if __name__ == '__main__': mc = MyClass() mc.present() ''' This would also work as expected if __name__ == '__main__': f=(0, 0, 320, 480) mc = MyClass(frame=f) mc.present('sheet') '''
-
Phuket2
@nerdtron, I think the below gives you what you want. I didn't try and get your flex values correct. If you look in the ui.designer, this will help get the settings correct. But you still need to size and position your ui objects for flex to work. Hope it helps.
Also the + 2 and +4 etc in the code is for some margins between the view frame and the ui objects.import ui view = ui.View() view.name = 'test UI' view.background_color = 'black' r = ui.Button(title='Add Item', bg_color='orange', width=100, height=100, corner_radius=6) r.size_to_fit() # resizes the button, but a little tight r.width += 4 # add a few extra pixels # using get_window_size()[0], could use ui.get_screen_size()[0] # get_window_size should work on split screens also r.x = ui.get_window_size()[0] - r.width - 2 # returns a tuple (w,h) r.y = 2 #r.background_color = 'orange' #r.flex = 'BL' view.add_subview(r) s = ui.TextField(width=r.frame.min_x - 4, height=r.height) s.x = 2 s.y = 2 #s.flex = 'BR' view.add_subview(s) s.begin_editing() # This gets the text field ready for input. # You can comment this out, if you dont want # it to behave like this view.present('fullscreen')
-
Phuket2
This is only a stab in the dark. But often when I have had problems with something that works some of the time and not other times. The answer is normally relates to timing, ui/blocking etc.
So using the @ui.in_background decorator could help with the ui blocking, sometimes calling time.sleep(1) can help. As I say I am guessing, but I recognise the general pattern of sometimes this works other times it does not from the problems I have had. A ui blocking or timing issue. Hope it helps, I know others here could be more concise to the exact problem, maybe this is enough food for thought.