I'm a Python beginner, and I was trying to build a Youtube Downloader. I just needed a GUI for easy usage. So I decided on Kivy.
In the GUI I have this label named self.labelOutput. It is placed under a button. The script is very basic, so pressing the button only echoes the input.
The problem is that this label is displaying weird behaviour (for me at least). It grows when multiple lines are entered (next step would be word wrapping). But the label seems to be growing upward, instead of downward. Like it's position is pinned at its bottom. Or as if my app only use half of the screen. I have searched the interwebs, including this site, but, while there are a lot of issues with labels, my particular issue is not here yet. I even asked AI generators, but that made my code only more messy.
From CSS I remember certain attributes don't work properly when other properties aren't set or set wrong. Maybe it's something like that.
I hope you guys can help.
This is my code so far (far from pretty or efficient, I know. It's mostly AI generated to get started):
import kivy
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.uix.scrollview import ScrollView
class MyApp(App):
def build(self):
float_layout = FloatLayout()
# Make a BoxLayout to aniseren the widgets
box_layout = BoxLayout(orientation='vertical', size_hint=(1, None), pos_hint={'top': 0.78})
# Make a Label to display text
self.label = Label(text="YTDownloader", font_size=90, size_hint_y=None, height=100)
box_layout.add_widget(self.label)
self.label2 = Label(text="Youtube Downloader", size_hint_y=None, height=100)
box_layout.add_widget(self.label2)
#spacer label
self.label3 = Label(text="", size_hint_y=None, height=20)
box_layout.add_widget(self.label3)
# Make a TextInput-widget
self.text_input = TextInput(hint_text="Voer zoektermen in...", size_hint=(None, None), height=100, width=900, pos_hint={'center_x': 0.5}, padding=(20,20))
box_layout.add_widget(self.text_input)
#another spacer label
self.label4 = Label(text="", size_hint_y=None, height=30)
box_layout.add_widget(self.label4)
# Make a Button-widget
button = Button(text="Zoek!", size_hint=(None, None), height=100, width=300, pos_hint={'center_x': 0.5})
# connect a function to the button
button.bind(on_press=self.on_button_press)
box_layout.add_widget(button)
self.labelOutput = Label(text="", size_hint_y=None, width=960, text_size=(960, None), valign='top')
self.labelOutput.bind(texture_size=self.update_label_height)
box_layout.add_widget(self.labelOutput)
float_layout.add_widget(box_layout)
return float_layout
def on_button_press(self, instance):
# get the input text and display it in the output label
input_text = self.text_input.text
self.labelOutput.text = f"You entered: {input_text}"
def update_label_height(self, instance, value):
instance.height = instance.texture_size[1]
if __name__ == "__main__":
MyApp().run()
I'm a Python beginner, and I was trying to build a Youtube Downloader. I just needed a GUI for easy usage. So I decided on Kivy.
In the GUI I have this label named self.labelOutput. It is placed under a button. The script is very basic, so pressing the button only echoes the input.
The problem is that this label is displaying weird behaviour (for me at least). It grows when multiple lines are entered (next step would be word wrapping). But the label seems to be growing upward, instead of downward. Like it's position is pinned at its bottom. Or as if my app only use half of the screen. I have searched the interwebs, including this site, but, while there are a lot of issues with labels, my particular issue is not here yet. I even asked AI generators, but that made my code only more messy.
From CSS I remember certain attributes don't work properly when other properties aren't set or set wrong. Maybe it's something like that.
I hope you guys can help.
This is my code so far (far from pretty or efficient, I know. It's mostly AI generated to get started):
import kivy
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.uix.scrollview import ScrollView
class MyApp(App):
def build(self):
float_layout = FloatLayout()
# Make a BoxLayout to aniseren the widgets
box_layout = BoxLayout(orientation='vertical', size_hint=(1, None), pos_hint={'top': 0.78})
# Make a Label to display text
self.label = Label(text="YTDownloader", font_size=90, size_hint_y=None, height=100)
box_layout.add_widget(self.label)
self.label2 = Label(text="Youtube Downloader", size_hint_y=None, height=100)
box_layout.add_widget(self.label2)
#spacer label
self.label3 = Label(text="", size_hint_y=None, height=20)
box_layout.add_widget(self.label3)
# Make a TextInput-widget
self.text_input = TextInput(hint_text="Voer zoektermen in...", size_hint=(None, None), height=100, width=900, pos_hint={'center_x': 0.5}, padding=(20,20))
box_layout.add_widget(self.text_input)
#another spacer label
self.label4 = Label(text="", size_hint_y=None, height=30)
box_layout.add_widget(self.label4)
# Make a Button-widget
button = Button(text="Zoek!", size_hint=(None, None), height=100, width=300, pos_hint={'center_x': 0.5})
# connect a function to the button
button.bind(on_press=self.on_button_press)
box_layout.add_widget(button)
self.labelOutput = Label(text="", size_hint_y=None, width=960, text_size=(960, None), valign='top')
self.labelOutput.bind(texture_size=self.update_label_height)
box_layout.add_widget(self.labelOutput)
float_layout.add_widget(box_layout)
return float_layout
def on_button_press(self, instance):
# get the input text and display it in the output label
input_text = self.text_input.text
self.labelOutput.text = f"You entered: {input_text}"
def update_label_height(self, instance, value):
instance.height = instance.texture_size[1]
if __name__ == "__main__":
MyApp().run()
Share
Improve this question
asked Mar 25 at 19:09
MarcelcoltMarcelcolt
515 bronze badges
1
- The position of the Label is pinned to the bottom of the BoxLayout, so it can only grow upward. – John Anderson Commented Mar 26 at 20:52
1 Answer
Reset to default 0I tried asking here, tried Reddit, asked ChatGPT and even Mistral's Le Chat.
No answer.
However (!): someone pointed me to Blackbox AI and that finally helped me towards an answer.
The big problem seemed to be that I hadn't yet added a scrollview.
Funny thing is that I wanted to do that after I'd solved this issue.
So in short: adding scrollview was the solution.