Remove grey box around GIFs in Python Kivy? - ios

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

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 .kv file global variables puzzle

I declared some color constants as global variables in .kv file. They work in certain situations but not in others. An example ColorConstants.kv is
#:kivy 2.0.0
#:set BLUE (0, 0, 1, 1)
#:set WHITE (1, 1, 1, 1)
<Header#BoxLayout>:
# color constants don't work here: NoneType errors
# font_color: WHITE
# header_color: BLUE
# need to use numeric lists for font_color, header_color
font_color: (1, 1, 1, 1)
header_color: (0, 0, 1, 1)
header_text: ""
size_hint: 1, None
height: dp(50)
canvas.before:
Color:
rgba: self.header_color
Rectangle:
size: self.size
pos: self.pos
Label:
color: root.font_color
text: root.header_text
bold: True
BoxLayout:
orientation: "vertical"
Header:
header_text: "My Header"
Label:
# color constants work here, no errors
color: BLUE
text: "This is blue text on white"
canvas.before:
Color:
rgba: WHITE
Rectangle:
size: self.size
pos: self.pos
Accompanying ColorConstants.py:
from kivy.app import App
class ColorConstantsApp(App):
pass
ColorConstantsApp().run()
I am confused why I can use BLUE and WHITE in Label but not in Header. If I use WHITE and BLUE for font_color and header_color instead of the (1,1,1,1) and (0,0,1,1), I encounter a TypeError: 'NoneType' object is not iterable error.
It appears that the canvas instructions are being created before the header_color is assigned. You can work around that by changing:
rgba: self.header_color
to:
rgba: self.header_color if self.header_color else (0,1,0,1)
This just checks if header_color is None and uses something else in that case. Then, when header_color is assigned, the correct color is used.

Positioning right icon in a MDList

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)

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.

Kivy TextInput Text Overflow. Cursor Outside TextInput Viewport

The last letter is overflowing
I'm using Kivy 1.10.1. I've added a text input (multiline = False). The sentence entered above is "This is a long sentence being typed into Kivy". All the letters have been entered. But the last letter - the "y" is outside the text input.
I've tried changing the padding size, the border size and changing the size of the textinput itself. I don't know if I'm doing something wrong or it is a bug with the library.
Edit:( I should have added the widget code here )
text_input: input_text_field
canvas:
Color:
rgba: self.background_color_intensity_red, self.background_color_intensity_green, self.background_color_intensity_blue, 1
Rectangle:
size: 396, 768
pos: self.pos
source: "sprites/phone.png"
BoxLayout:
size: 354, 598
pos: 21, 96
orientation: 'vertical'
BoxLayout:
size_hint: 1, 0.1
pos: root.pos
orientation: 'horizontal'
Image:
size_hint: 0.15, 1
source: "sprites/profile_pic.png"
TextInput:
id: input_text_field
size_hint: 0.85, 0.5
pos_hint: {'top': 0.75}
background_color: 1,1,1,1
border: (20, 20, 20, 20)
multiline: False
halign: 'center'
focus: True
on_text_validate: self.parent.parent.parent.on_text_input()
BoxLayout:
size_hint: 1, 0.9
pos: root.pos
orientation: 'vertical'
Thank you.

Resources