簡體   English   中英

在 kivy 上更新 label

[英]Updating label on kivy

我想通過 Screen1 的輸入更新 kivy 上的 label 並在 Screen3 上顯示。 在 Screen1 我在 textinput id:slot 處輸入,'test' 是全局變量,從中獲取變量。 當我試圖在 Screen3 上做。 'test' 它可以從 Screen1 獲取變量,但在 Screen3 上沒有更新。

我該如何解決? 如果我做錯了什么,請告訴我。 我是初學者。

這是我的代碼

.py 代碼:

from kivy.app import App
from kivy.uix.screenmanager import ScreenManager,Screen,NoTransition
from kivy.properties import ObjectProperty,StringProperty,NumericProperty
from kivy.uix.widget import Widget
from kivy.lang import Builder
from kivy.uix.textinput import TextInput
from kivy.uix.floatlayout import FloatLayout
from kivy.core.window import Window
from kivy.uix.image import Image
from kivy.clock import Clock
import time
import mysql.connector as mariadb
import sys
Window.size=(800,480)
Builder.load_file("mainmenu.kv")

test=''
class Mainscreen(Screen):
    pass    
class Screen1(Screen):
    sslot=StringProperty(None)
    sname=StringProperty(None)
    sprice=NumericProperty(0)
    samount=NumericProperty(0)
    def __init__(self,**kwargs):        
        super(Screen1, self).__init__(**kwargs)
        sslot=self.sslot
        sname=self.sname
        sprice=self.sprice
        samount=self.samount            
    def setprice(self):
        global test
        if self.f_slot.text!='' and self.f_name.text!='' and self.f_price.text!=0 and self.f_amount.text!=0 : 
            sslot=str(self.f_slot.text)
            sname=self.f_name.text
            sprice=int(self.f_price.text)
            samount=int(self.f_amount.text) 
            test=sslot
        
            mariadb_connection = mariadb.connect(host='localhost', user='pop', password='raspberry', database='setprice')
            cursor=mariadb_connection.cursor()
            sql="UPDATE Setprice SET Name=%s,Price=%s,Amount=%s WHERE Slot=%s"
            val=(sname,sprice,samount,sslot)
            cursor.execute(sql,val)
            mariadb_connection.commit()
    
            self.ids.slot.text=""
            self.ids.name.text=""
            self.ids.price.text=""
            self.ids.amount.text=""     
            self.ids.slot.focus=True
            self.ids.name.focus=False
            self.ids.price.focus=False
            self.ids.amount.focus=False         
        else:
            print("error")

class Screen2(Screen):
    pass    

class Screen3(Screen):
    #This it what i can't do    
    fsales=StringProperty() 
    def __init__(self,**kwargs):
        super(Screen3, self).__init__(**kwargs)
        Clock.schedule_once(self.updatesales,0.1)       
    def updatesales(self,*args):    
        global test
        self.fsales=test
        print(self.fsales)
            
class Screen4(Screen):
    pass

class Screen21(Screen):
    pass

class Screen22(Screen):
    pass

class Manager(ScreenManager):
    screen_mainmenu=ObjectProperty(None)    
    screen_menu1=ObjectProperty(None)
    screen_menu2=ObjectProperty(None)
    screen_menu3=ObjectProperty(None)
    screen_menu4=ObjectProperty(None)
    
class VendingmachineApp(App):
    Menu3=Screen3()
    def build(self):
        m=Manager(transition=NoTransition())
        return m    

if __name__=="__main__":
    VendingmachineApp().run()

.kv 代碼:

<Mainscreen>:
    BoxLayout:
        orientation:'vertical'
        spacing:2
        padding:30
        Label:
            text:"Menu"
            font_size:40
        Button:
            text:"Setprice & amount"
            on_press:root.manager.current='screen_menu1'
            font_size:30
        Button:
            text:"Motor"
            on_press:root.manager.current='screen_menu2'
            font_size:30
        Button:
            text:"Check sales"
            on_press:
                root.manager.current='screen_menu3'
                app.Menu3.updatesales()
            font_size:30
            
        Button:
            text:"Data log"
            on_press:root.manager.current='screen_menu4'        
            font_size:30
                
<Screen1>:
    f_slot:slot
    f_name:name
    f_price:price
    f_amount:amount
    enter:enter
            
    FloatLayout:
        Label:
            text:'Setprice & amount'
            font_size:40
            size:600,150
            size_hint:(None,None)
            pos:(0,370)
        Label:
            text:'Slot : '
            font_size:30
            size:600,150
            size_hint:(None,None)
            pos:(-20,300)
        TextInput:
            id:slot
            multiline:False
            focus: True
            input_filter:"int"
            font_size:30
            size:200,50
            size_hint:(None,None)
            pos:(450,350)
            on_text_validate:
                name.focus=True
        Label:
            text:'Name : '
            font_size:30
            size:600,150
            size_hint:(None,None)
            pos:(-10,220)
        TextInput:
            id:name
            focus: False
            multiline:False
            font_size:30
            size:200,50
            size_hint:(None,None)
            pos:(450,270)
            on_text_validate:
                price.focus=True
        Label:
            text:'Price : '
            font_size:30
            size:600,150
            size_hint:(None,None)
            pos:(-15,140)
        TextInput:
            id:price
            multiline:False
            input_filter:"int"
            focus: False
            font_size:30
            size:200,50
            size_hint:(None,None)
            pos:(450,190)
            on_text_validate:
                amount.focus=True
        Label:
            text:'Amount : '
            font_size:30
            size:600,150
            size_hint:(None,None)
            pos:(0,60)
        TextInput:
            id:amount
            multiline:False
            input_filter:"int"
            font_size:30
            focus: False
            size:200,50
            size_hint:(None,None)
            pos:(450,110)
            on_text_validate:root.setprice()            
        Button:
            id:back
            background_normal:'back.png'
            size:100,93
            size_hint:(None,None)
            pos:(80,20)
            on_press:root.manager.current='screen_mainmenu'
        Button:
            id:enter
            text:'Enter'
            size:250,50
            size_hint:(None,None)
            pos:(430,30)
            font_size:30
            focus:False
            on_press:root.setprice()
            
<Screen2>:
    FloatLayout:
        Label:
            text:'Motor'
            font_size:40
            size:600,150
            size_hint:(None,None)
            pos:(-140,370)
        Button:
            text:"Motor log"
            #on_press:root.manager.current='screen_'
            size:600,120
            size_hint:(None,None)
            font_size:30
            pos:(100,275)
        Button:
            text:"Test Motor"
            #on_press:root.manager.current='screen_three'
            size:600,120
            size_hint:(None,None)
            font_size:30
            pos:(100,150)
        Button:
            background_normal:'back.png'
            size:100,93
            size_hint:(None,None)
            pos:(80,20)
            on_press:root.manager.current='screen_mainmenu'
        
<Screen3>
    id:Menu3
    FloatLayout:
        Label:
            text:'Check sales'
            font_size:40
            size:600,150
            size_hint:(None,None)
            pos:(-90,350)
        Label:
            text:'Total sales : '
            font_size:30
            size:250,100
            size_hint:(None,None)
            pos:(100,300)
        Label:
            id:ttsales
            text:Menu3.fsales           
            font_size:30
            size:250,100
            size_hint:(None,None)
            pos:(100,350)
        Button:
            text:'More'
            font_size:20
            size:80,60
            size_hint:None,None
            pos:(500,320)
        Button:
            text:'Clear sales'
            font_size:30
            size:600,100
            size_hint:(None,None)
            pos:(100,200)
        Button:
            background_normal:'back.png'
            size:100,93
            size_hint:(None,None)
            pos:(80,20)
            on_press:root.manager.current='screen_mainmenu'
<Screen4>
    FloatLayout:
        Label:
            text:'Data log'
            font_size:40
            size:600,150
            size_hint:(None,None)
            pos:(-125,350)
        Button:
            text:'Sales report'
            font_size:30
            size:600,100
            size_hint:(None,None)
            pos:(100,280)
        Button:
            text:'Hot product sales'
            font_size:30
            size:600,100
            size_hint:(None,None)
            pos:(100,170)
        Button:
            background_normal:'back.png'
            size:100,93
            size_hint:(None,None)
            pos:(80,20)
            on_press:root.manager.current='screen_mainmenu'
    
<Manager>:
    id:screen_manager
    screen_mainmenu:screen_mainmenu
    screen_menu1:screen_menu1
    screen_menu2:screen_menu2
    screen_menu3:screen_menu3
    screen_menu4:screen_menu4
    screen_menu21:screen_menu21
    screen_menu22:screen_menu22
    Mainscreen:
        id:screen_mainmenu
        name:'screen_mainmenu'
        manager:screen_manager
    Screen1:
        id:screen_menu1
        name:'screen_menu1'
        manager:screen_manager  
    Screen2:
        id:screen_menu2
        name:'screen_menu2'
        manager:screen_manager  
    Screen3:
        id:screen_menu3
        name:'screen_menu3'
        manager:screen_manager  
    Screen4:
        id:screen_menu4
        name:'screen_menu4'
        manager:screen_manager
    Screen21:
        id:screen_menu21
        name:'screen_menu21'
        manager:screen_manager
    Screen22:
        id:screen_menu22
        name:'screen_menu22'
        manager:screen_manager

因此,如果您希望在Screen1中工作時在Screen3中發生某些事情 - 這是您可以實現它的方法。

self.manager.get_screen('screen3').ids.labelid.text = 'NewText'

上面的示例代碼可以在screen1textinput事件中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM