Вопрос с наследованием в Python с киви - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть это приложение, которое имеет два класса, по одному для каждого экрана: один экран SIGNIN и один экран TEST. В классе SIGNIN приложение берет адрес электронной почты из текстового ввода и использует его для создания базы данных для пользователя. Я хочу снова использовать ввод текста в классе TEST, поэтому я подумал, что могу наследовать от моего класса SIGNIN. Прямо сейчас оба класса наследуются от класса Screen от kivy. Поэтому я решил, что мой класс TEST должен наследоваться только от класса SIGNIN. Но если я делаю это, я наследую весь экран: оба экрана накладываются друг на друга. В конечном счете, я хочу получить значение внутри пользовательской переменной только из класса SIGNIN. Как я могу это сделать? Ниже приведен пример того, что у меня есть. Я хочу получить доступ к содержимому table_name во втором классе.

class SigninWindows(Screen):

    def add_user(self):
        uname = self.ids.username_field.text
        table_name = uname.replace('@', '_').replace('.', '_') 

class QuestionWindows(Screen):

    def __init__(self,  **kwargs):
        super(QuestionWindows, self).__init__(**kwargs)

    def _get_df(self):
        try:
            conn = pymysql.connect(
                host=hostname,
                port=int(port),
                user=user,
                passwd=passwd,
                db=db,
                charset='utf8mb4'
            )
            query = (""" SELECT * FROM db.`%s` """ % table_name)
            print('QUERY IS:',query)
<SigninWindows>:
    id: signin_page
    name: "signin_page"
    orientation: "vertical"
    spacing: 10
    space_x: self.size[0]/5.5
    canvas.before:
        Color:
            rgba: (0,0,0,1)
        Rectangle:
            size: self.size
            pos: self.pos

    BoxLayout:
        id: data_signin
        orientation: 'vertical'
        size_hint_x: 1
        BoxLayout:
            id: validate_info
            orientation: "vertical"
            size_hint: 1,0.8
            padding: 80, 10
            Label:
                id: info
                text: ''
                markup: True
            TextInput:
                id: username_field
                hint_text: "Username"
                hint_text_color: 0.5,0.5,0.5,1
                multiline: False
                focus: True
                on_text_validate: pwd_field.focus = True
                size_hint: 1, .8
                foreground_color: 0.5,0.5,0.5,1
                background_color: .1,.1,.1,1
                write_tab: False

1 Ответ

1 голос
/ 14 апреля 2020

Я не проверял этот код, но если вы измените add_user() для возврата table_name, то вы можете использовать его для получения table_name в QuestionWidows, получив к нему доступ с помощью метода ScreenManager.get_screen():

class SigninWindows(Screen):

    def add_user(self):
        uname = self.ids.username_field.text
        table_name = uname.replace('@', '_').replace('.', '_') 
        return table_name

class QuestionWindows(Screen):

    def __init__(self,  **kwargs):
        super(QuestionWindows, self).__init__(**kwargs)

    def _get_df(self):
        table_name = self.manager.get_screen('signin_page').add_user()
        try:
            conn = pymysql.connect(
                host=hostname,
                port=int(port),
                user=user,
                passwd=passwd,
                db=db,
                charset='utf8mb4'
            )
            query = (""" SELECT * FROM db.`%s` """ % table_name)
            print('QUERY IS:',query)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...