How to update the title of an App in kivy by clicking a button

I’d like to change the title of the main App screen(AwesomeApp).

The title of my App when it runs is “My house”.

But i want to change it when I click “Update Top Bar’s name” inside “Information” popup window.

When i click “Update Top Bar’s name” button inside “Information” Popup window, I want to update the title of main App with appName.text.
(appName is the id of MDTextField inside “Information” popup window).
You can input a new app name into MDTextField.

What i have tried is that By clicking “Update Top Bar’s name” button, it saves appName.text in a text file and then Kill the App and re-run the app. then it loades the saved text file and read and put the new app name into the title inside “def build(self):”. But i don’t want to kill the app and re-run the app. I have not included this logic in this code below though.

If anyone could help me to change AwesomeApp’s main title without re-running this program, I would greatly appreciate it.

Regards,

python file
”’

from kivy.uix.widget import Widget
'''Setting the size of first window for program'''
from kivy.config import Config                 #another way of setting size of window
Config.set('graphics', 'width', '600')         # from kivy.core.window import Window
Config.set('graphics', 'height', '750')        # Window.size = ("600", "750")

from kivymd.app import MDApp
from kivy.lang import Builder
from kivy.factory import Factory
from kivy.uix.popup import Popup
from kivy.properties import ObjectProperty

Builder.load_file('new_window_popup.kv')

class Dex(Popup):
    pass
    
class Remi(Popup):
    pass

class Info(Popup):

    def updateName(self):
        # This is where I need a logic to change title of this App with self.appName.text
        print(self.appName.text)
    pass

class MyLayout(Widget):
    pass
class AwesomeApp(MDApp):
    def build(self):
        self.title = "My house"
        return MyLayout()

if __name__ == '__main__':
    AwesomeApp().run()

”’

new_window_popup.kv file

”’

#:import Factory kivy.factory.Factory
#:import MDRaisedButton kivymd.uix.button

<Dex>:
    auto_dismiss: False
    size_hint: 1, 1

    title: "Weight-Based Dose Calculator "   
    canvas.before:
        Color:
            rgba: (0,1,0,1)
        Rectangle:
            pos:self.pos
            size:self.size
    
    BoxLayout:
        
        orientation: "vertical"
        size:root.width, root.height

        Label:
            text: "Dex 1" 
        Button:
            text: "Close"
            font_size: 24
            on_release: root.dismiss()    
    
<Remi>:
    auto_dismiss: False
    size_hint: 1, 1

    title: "Weight-Based Dose Calculator "   
    canvas.before:
        Color:
            rgba: (0,1,0,1)
        Rectangle:
            pos:self.pos
            size:self.size
    
    BoxLayout:
        
        orientation: "vertical"
        size:root.width, root.height

        Label:
            text: "Remi" 
        Button:
            text: "Close"
            font_size: 24
            on_release: root.dismiss()

<Info>:

    appName:appName
    auto_dismiss: False
    size_hint: 1, 1

    title: "Change Info"   
    canvas.before:
        Color:
            rgba: (0,1,0,1)
        Rectangle:
            pos:self.pos
            size:self.size
    
    BoxLayout:
        
        orientation: "vertical"
        size:root.width, root.height

        Label:
            text: "What is your App name?" 
        BoxLayout:
            orientation: "horizontal"
            
            MDTextField:
                id: appName
                hint_text: "App Name"
                color_mode: 'primary'
                current_hint_text_color: 1,1,1,1
                hint_text_color_focus: 1,1,1,.9 
                line_color_focus: 1,1,1,1
                font_size: '25sp'
                text_color_normal: 1,1,1,.9
                text_color_focus: 0,0,1,.9
                focus: True
                write_tab: False
            Button:
                text: "Update Top Bar's name"
                font_size: 24
                size_hint: .8, .2
                on_release: root.updateName()    
        Button:
            text: "Close"
            font_size: 24
            on_release: root.dismiss()

<MyLayout>
    MDBoxLayout:
        orientation:"vertical"
        size: root.width, root.height
        
        MDRaisedButton:
            text: "Dex"
            font_size: 32
            text_color: 0,0,0,.9
            size_hint: 1,.5
            on_press: Factory.Dex().open()
        MDRaisedButton:
            text: "Remi"
            font_size: 32
            size_hint: 1,.5
            on_press: Factory.Remi().open()
        MDRaisedButton:
            text: "Information"
            font_size: 32
            size_hint: 1,.2
            md_bg_color: 0.95,0.61,0.73,1
            on_press: Factory.Info().open()

”’

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

If you want to change it in kvlang you can do it as,

...
    BoxLayout:
        
        orientation: "vertical"
        size:root.width, root.height

        Label:
#            text: "What is your App name?" 
            text: "Your current App's name : "+app.title # I changed it just to display the title.
        BoxLayout:
            orientation: "horizontal"
            
            MDTextField:
                id: appName
                hint_text: "App Name"
                text: app.title
                color_mode: 'primary'
                current_hint_text_color: 1,1,1,1
                hint_text_color_focus: 1,1,1,.9 
                line_color_focus: 1,1,1,1
                font_size: '25sp'
                text_color_normal: 1,1,1,.9
                text_color_focus: 0,0,1,.9
                focus: True
                write_tab: False
            Button:
                text: "Update Top Bar's name"
                font_size: 24
                size_hint: .8, .2
                on_release: app.title = appName.text
        Button:
            text: "Close"
            font_size: 24
            on_release: root.dismiss()
...

Or, from python,

First in kvlang,

...
            MDTextField:
                id: appName
                hint_text: "App Name"
                text: app.title
                color_mode: 'primary'
                current_hint_text_color: 1,1,1,1
                hint_text_color_focus: 1,1,1,.9 
                line_color_focus: 1,1,1,1
                font_size: '25sp'
                text_color_normal: 1,1,1,.9
                text_color_focus: 0,0,1,.9
                focus: True
                write_tab: False
            Button:
                text: "Update Top Bar's name"
                font_size: 24
                size_hint: .8, .2
                on_release: root.updateName(appName) # Pass the MDTextField instance.
...

Then in method updateName

    def updateName(self, t_field):
        # Access the running App instance. 
        # Note that this happens to be very useful when you
        # need to access the App from anywhere in your code.
        app = MDApp.get_running_app()
        # Change its title using the text of the t_field (that has been passed).
        app.title = t_field.text


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x