Positioning right icon in a MDList - kivy

Is it possible to position an icon all the way to the right using kivy's OneLineAvatarListItem? if it is, how can accomplish that?
:
IconRightWidget:
icon: 'trash-can-outline'
theme_text_color: "Custom"
text_color: 1, 0, 0, 1
on_release: app.del_song(root)

Related

BeReal UI in KivyMD

I'm trying to create a UI similar to BeReal's where there's a large image and then a smaller image in the top left corner of the larger image.
I've tried this solution:
MDBoxLayout:
size_hint: None, None
size: root.size
orientation: "vertical"
canvas:
Rectangle:
src: "Image1.jpg"
FitImage:
source: "Image2.jpg"
size_hint: .2, .3
pos_hint: {"center_x": .3, "center_y": .7}
I'm using the canvas to display the larger image as a background image and then adding the smaller one to the BoxLayout. This doesn't work, however, as the background image doesn't take up the entire screen and seems to be colliding with the smaller image.
Is there any way to replicate BeReals UI in Kivy?
Use a MDFloatLayout instead of a MDBoxLayout. ie.
MDFloatLayout:
FitImage:
source: 'image_cover.jpg'
pos: 0, 0
size_hint: 1, 1
FitImage:
source: 'top_left_image.jpg'
pos_hint: {'x': 0.01, 'top': 0.99}
size_hint: 0.45, 0.45
radius: 36, 36, 36, 36
Something like this?
Screen:
FitImage:
source: "Image1.jpg"
FitImage:
source: "Image2.jpg"
size_hint: .2, .3
pos_hint: {"center_x": .3, "center_y": .7}

Kivy set screen focus

I am trying to create an App in Kivy along with Python that contains a long scrollable list of text. Inside of this list would be Labels some of which are just headers and some of which contain the text body. My question is, is there a way to have a selectable portion of the text in a Label that on press would set the screen focus to a desired other Label? I have found ways on how to hyperlink specific text to a webpage but not a great way to set the screen focus inside of the same app instead.
i.e.:
<SecondWindow#ScrollView>
name:"Page"
canvas.before:
Color:
rgba:(1,1,1,1)
Rectangle:
pos: self.pos
size: self.size
ScrollView:
GridLayout:
cols:1
size_hint_y:None
size_hint:1,None
height:self.minimum_height
Label:
name:"PrefaceL1"
canvas.before:
Color:
rgba:(109/255.0,114/255.0,219/255.0,1)
Rectangle:
pos:self.pos
size:self.size
size_hint_y: None
height: self.texture_size[1]
text_size:self.width,None
text:' Preface'
font_size:'52sp'
Label:
name:"PrefaceB1"
canvas.before:
Color:
rgba:(1,1,1,1)
Rectangle:
pos:self.pos
size:self.size
size_hint_y: None
height: self.texture_size[1]
text_size:self.width,None
text:"Long [KEY WORD SOMEWHERE IN HERE] Text" <--------
color: 0,0,0,1
font_size:'16sp'
Label:
name:"PrefaceL2" <--------- Location of desired screen focus.
canvas.before:
Color:
rgba:(0,0,0,1)
Rectangle:
pos:self.pos
size:self.size
size_hint_y: None
height: self.texture_size[1]
text_size:self.width,None
text:' Preface'
font_size:'52sp'
font_size:'16sp'
According to the Kivy docs
https://kivy.org/doc/stable/api-kivy.uix.scrollview.html#kivy.uix.scrollview.ScrollView.scroll_y
You can focus on the Label you want by do_scroll_y to the value of desired_label.y / layout_of_the_scroll_view.height

Remove grey box around GIFs in Python Kivy?

I a creating an app in Python using Kivy, but when I use this GIF which has a transparent background, a grey box appears around the GIF. I don't understand why this is?
Here's the grey box (the dots are the gif):
The GIF in question: https://ibb.co/dMnxWVW
And here's the Python code for the GIF:
def on_press(self):
self.ids.mic_image.anim_loop = 0
self.ids.mic_image.source = "Mic_Pressed.gif"
And here's the .kv code for the GIF:
Image:
source: "Mic_Pressed.gif"
opacity: 0
anim_delay: 0
size_hint: (0.6,0.6)
pos_hint: {"center_x":0.5, "center_y": 0.2}
Image:
id: mic_image
source: "Mic_Static.gif"
opacity: 1
anim_delay: 0
size_hint: (0.6,0.6)
pos_hint: {"center_x":0.5, "center_y": 0.2}
Button:
id: mic
background_color: (1, 1, 1, 0)
pos_hint: {"center_x":0.5, "y":0.09}
size_hint: (0.2,0.19)
on_press:
root.on_press()
The app initially displays "Mic_Static.gif" (without any grey box). When the button (which is the same size as the GIF) is pressed, "Mic_Pressed.gif" is displayed, however it has the surrounding grey box.
I think it is an issue with your gif file. Try this replacement

How can I make border to the text in the label?

I'm still learning kivy language .
please can you tell me how to add a border to a text in a label in the kv file
and thanks
In the kivy language documentation, you can redefine a widget's style by adding a - to the beginning of the kv rule. So, in the kv you can define a new widget like this:
<-LabelWithBorder#Label>:
border_width: 0
border_color: [1,1,1,1]
canvas.before: # draw the border
Color:
rgba: root.border_color if root.border_width > 0 else [0,0,0,1]
Rectangle:
size: self.size
pos: self.pos
Color:
rgba: 0, 0, 0, 1
Rectangle:
size: self.width - 2*root.border_width, self.height - 2*root.border_width
pos: int(self.center_x - (self.width - 2*root.border_width)/2.), int(self.center_y - (self.height - 2*root.border_width)/2.)
canvas: # modified from Label
Color:
rgba: 1, 1, 1, 1
Rectangle:
texture: self.texture
size: self.texture_size[0] - 2*root.border_width, self.texture_size[1] - 2*root.border_width
pos: int(self.center_x - self.width/2.) + root.border_width, int(self.center_y - self.height/2.) + root.border_width
The canvas.before is the section that draws the border, and the canvas section is the normal Label style with slight modifications to account for the border.
This can be used, for example, like this:
FloatLayout:
LabelWithBorder:
text: 'Hello, World'
font_size: 50
border_width: 10
border_color: [1,0,0,1]
size_hint: None, None
size: self.texture_size
pos_hint: {'center_x':0.5, 'center_y':0.5}
I believe you are looking for 'outline'
This is the docs link for it Label Outline - Kivy Docs
Here's some example code (color defaults to black .. 0, 0, 0, 1):
Label:
id: label_StackOverflowSample
pos_hint: {"x": 0.25, "y": 0.18}
size_hint: 0.6, 0.365
font_size: 18
text_size: self.size
halign: 'left'
italic: True
outline_width: 10
outline_colour: (0, 0, 0, 1)
text:
'''
long long long
long long long
long long long
long long long
long long long
textt
'''
And this is a picture showing its example:
sorry, not enough reputation to post pictures yet
Hope this helps

Changing the icon of Kivy FileChooserIconView

I am looking for a way to change the file icon of FileChooserIconView and set it programatically. I am looking at Kivy's filechooser.py source code but cannot find where the icon is being set.
Currently, the default background color of FileChooserIconView is black and the current icon works well with that background. I need to change my app's background to white, and the current icon doesn't looks nice with white background and I also have a specific file icon that needs to be used for the white background.
The file icon is defined in the style.kv file of your Kivy installation. And it is referenced in the FileChooserIconView and the FileChooserIconLayout classes as:
_ENTRY_TEMPLATE = 'FileIconEntry'
You can redefine that template using something like:
Builder.load_string('''
[FileIconEntry#Widget]:
locked: False
path: ctx.path
selected: self.path in ctx.controller().selection
size_hint: None, None
on_touch_down: self.collide_point(*args[1].pos) and ctx.controller().entry_touched(self, args[1])
on_touch_up: self.collide_point(*args[1].pos) and ctx.controller().entry_released(self, args[1])
size: '100dp', '100dp'
canvas:
Color:
rgba: 1, 1, 1, 1 if self.selected else 0
BorderImage:
border: 8, 8, 8, 8
pos: root.pos
size: root.size
source: 'atlas://data/images/defaulttheme/filechooser_selected'
Image:
size: '48dp', '48dp'
source: 'atlas://data/images/defaulttheme/filechooser_%s' % ('folder' if ctx.isdir else 'file')
pos: root.x + dp(24), root.y + dp(40)
Label:
text: ctx.name
text_size: (root.width, self.height)
halign: 'center'
shorten: True
size: '100dp', '16dp'
pos: root.x, root.y + dp(16)
Label:
text: '{}'.format(ctx.get_nice_size())
font_size: '11sp'
color: .8, .8, .8, 1
size: '100dp', '16sp'
pos: root.pos
halign: 'center'
''')
The above code just duplicates the template definition from style.kv, but you can make any changes to the above template, and those changes will affect the FileChooserIconView. The Image is the actual icon.

Resources