Python+psycopg2+kivy:按下按钮后在Spinner中实时更新值

2024-05-14 17:52:31 发布

您现在位置:Python中文网/ 问答频道 /正文

目前,我正在kivy开发一个健身应用程序,教练和运动员可以登录并添加/编辑训练课程,以及添加/编辑其他运动员(教练)或编辑他们的帐户。存储所有运动员信息的数据库是PostgreSQL

在键入添加新运动员所需的信息后,培训师可以使用“提交”按钮生成新运动员帐户。单击“提交”,执行插入查询。所有这些都可以,但是当用户切换到“编辑运动员”屏幕并想要选择新创建的运动员帐户时,它不会出现。它只有在关闭并重新打开应用程序后才可见。运动员的选拔保存在一个旋转器内

现在我想知道是否有任何方法可以在执行insert查询之后更新微调器,而不必重新打开应用程序?我想创建一个函数来触发一个事件,更新微调器。但我不确定这是否真的管用?我非常感谢您的每一个意见:)

数据库.py

import psycopg2
import sys
import logging
import re

class Database:
    def __init__(self):
        self.conn = None

    def connection(self):
        try: 
                    self.conn = psycopg2.connect(database="postgres",
                                                 user="postgres",
                                                 password="xxxxx",
                                                 host="localhost",
                                                 port="2345")
        except psycopg2.DatabaseError as e: 
            logging.error(e)
            sys.exit() 
        finally:
            logging.info('Connection with PostgreSQL established.') 
.....

    def possible_athletes(self):
        self.connection()
        with self.conn.cursor() as cur:
            cur.execute("SELECT * from athlete")
            athlete_db = cur.fetchall()
            name_possible_athletes = []
            for row in athlete_db:
                name_possible_athletes.append(row[1] + " " + row[2])
            return name_possible_athletes
            self.conn.close()

Main.py

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen, NoTransition, CardTransition
from kivy.uix.button import ButtonBehavior
from kivy.uix.image import Image
from kivy.uix.label import Label
from queries import Database
from kivy.uix.spinner import Spinner
.....
class AddAthleteTrainer(Screen):
    def check_data(self):
....
            athlete_password = PasswordGenerator().password_generated() 

.....

            if queries.add_athlete(self.ids.first_name_athlete.text, self.ids.last_name_athlete.text, athlete_password, self.ids.gender_athlete.text, self.ids.email_athlete.text, self.ids.height_athlete.text, self.ids.weight_athlete.text) is not None:
                PopUps.adding_confirmation_athlete(self.ids.email_athlete.text)
                MainApp().change_screen('main_screen_trainer', CardTransition(direction='up', duration =.3))

.....
class EditAthleteTrainer(Screen)
    name_possible_athletes = queries.possible_athletes()
    def __init__(self, **kwargs):
        super(EditAthleteTrainer, self).__init__(**kwargs)
        self.trigger = Clock.create_trigger(AddAthleteTrainer)

    def trigger(self):
        name_possible_athletes = queries.possible_athletes()
        self.trigger()

.....

Kivyèu文件

<EditAthleteTrainer>:
    FloatLayout:
        #Background color
        canvas:
            Rectangle:
                size: self.size
                pos: self.pos
                source: "graphics/background/background_trainer.png"

        #Display of ID of Athlete, input fields and BMI
        GridLayout:
            rows: 9
            size_hint: 1, .8
            pos_hint: {"top": 1, "right": 1}
            Label:
                id: id_athlete
                text: "ID of Athlete"
            Spinner:
                id: select_athlete
                text: "Select Athlete"
                values: root.name_possible_athletes
                background_normal: ''
                background_down: ''
                background_normal: ''
                background_down: ''
                background_color: utils.get_color_from_hex("#007269") if self.state == 'normal' else utils.get_color_from_hex("#00635b")
                on_text:
                    root.get_id()

<AddAthleteTrainer>:
......
         #Submit-Button
        GridLayout:
            rows: 1
            pos_hint: {"top": .2, "right": 1}
            size_hint: 1, .1075
            LabelButton:
                canvas.before:
                    Color:
                        rgb: utils.get_color_from_hex("#167d13") if self.state == 'normal' else utils.get_color_from_hex("#115210")
                    Rectangle:
                        size: self.size
                        pos: self.pos
                text: "[b]Submit[/b]"
                markup: True
                on_release:
                    root.check_data()

Tags: textnamefromimportselfidssizedef

热门问题