Как создать метку, когда я выбираю значение счетчика, т. е. Официальное, и когда я выбираю значение блесны, обычно скрывать метку? - PullRequest
0 голосов
/ 03 апреля 2020

[Здесь я вставил свой код в GitHub. Пожалуйста, посмотрите на него] {https://github.com/BollamReddy-Python-Vba/python/commit/710bd80f649968cd19181e0abda21f5164e8ba9f}

import kivy
kivy.require('1.10.0')
from kivy.core.window import Window
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.base import runTouchApp
from kivy.uix.label import Label
from kivy.graphics import Color, Rectangle
from kivy.uix.textinput import TextInput
from kivy.uix.spinner import Spinner
from kivy.uix.checkbox import CheckBox
Window.size = (500, 400)
Window.clearcolor = (0.1, 0.1, 0.3, 0.2)


def show_selected_value(spinner, text):
    print('Selected Process', spinner, 'have text', text)


class LRefConfigAutomation(App):
    config = None

    def build_config(self, config):
        config.setdefaults('LefConfigWindowSection', {
            'PartInputLabel': 'Please Enter your Part No',
            'TypeOfProcessLabel': 'Select Type Of Process',
            'NormalFolderName': 'Enter Normal Folder Name',

        })
        self.config = config

    def build(self):
        config = self.config
        root = FloatLayout()
        lbl = config.get('LefConfigWindowSection', 'PartInputLabel')
        self.label = Label(text=lbl, pos_hint={"center_x": .66, "center_y": .90}, size_hint=(1.0, 1.0), halign="left",valign="middle", font_name='Georgia')
        self.label.bind(size=self.label.setter('text_size'))
        self.label.font_size = '14.5dp'  # something that'll give texture bigger than phone's screen size
        root.add_widget(self.label)
        with self.label.canvas:
            Color(0, 0, 0, 0)
            Rectangle(pos=self.label.pos, size=self.label.size)
        self.txtKemNo = TextInput(pos_hint={"center_x": .66, "center_y": .90}, size_hint=(None, None),font_name="Georgia", size=(100, 30), multiline=False, hint_text="Part Number")
        root.add_widget(self.txtKemNo)
        lbl = config.get('LefConfigWindowSection', 'TypeOfProcessLabel')
        self.label = Label(text=lbl, pos_hint={"center_x": .66, "center_y": .75}, size_hint=(1.0, 1.0), halign="left",valign="middle", font_name='Georgia')
        self.label.bind(size=self.label.setter('text_size'))
        self.label.font_size = '14.5dp'  # something that'll give texture bigger than phone's screen size
        root.add_widget(self.label)
        with self.label.canvas:
            Color(0, 0, 0, 0)
            Rectangle(pos=self.label.pos, size=self.label.size)
        self.requestsspinner = Spinner(
            # default value shown
            text='Select Process',
            # available values will be binded to the combo
            values=("Normal", "Official"),
            # just for positioning in our example
            size_hint=(None, None),
            size=(110, 20),
            pos_hint={'center_x': .66, 'center_y': .75}, font_name='Georgia')
        self.requestsspinner.font_size = '14.5dp'
        self.requestsspinner.bind(text=show_selected_value)
        self.requestsspinner.bind(on_click=self.CreateLable)
        root.add_widget(self.requestsspinner)
        runTouchApp(root)
    def CreateLable(self, spinner, text):
        root = FloatLayout()
        print(text)
        if text == "Normal":
            pass
        elif text == "Official":
            config = self.config
            lbl = config.get('LefConfigWindowSection', 'NormalFolderName')
            print(lbl)
            self.label = Label(text=lbl, pos_hint={"center_x": .66, "center_y": .65}, size_hint=(1.0, 1.0),halign="left",valign="middle", font_name='Georgia')
            self.label.bind(size=self.label.setter('text_size'))
            self.label.font_size = '14.5dp'
            root.add_widget(self.label)
            with self.label.canvas:
                Color(0, 0, 0, 0)
                Rectangle(pos=self.label.pos, size=self.label.size)

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

1 Ответ

0 голосов
/ 03 апреля 2020

Есть три проблемы. Во-первых, ваш build() метод не возвращает root (что он и должен делать). Удалите строку:

runTouchApp(root)

и замените ее на:

return root

Во-вторых, ваш CreateLable() не вызывается. Я предлагаю изменить:

    self.requestsspinner.bind(on_click=self.CreateLable)

на:

    self.requestsspinner.bind(text=self.CreateLable)

Третья проблема заключается в том, что в CreateLable() вы не добавляете новый Label на дисплей. root, который вы создаете в этом методе, не имеет отношения к root вашего дисплея. Я предлагаю изменить этот метод на:

def CreateLable(self, spinner, text):
    if text == "Normal":
        pass
    elif text == "Official":
        config = self.config
        lbl = config.get('LefConfigWindowSection', 'NormalFolderName')
        self.label = Label(text=lbl, pos_hint={"center_x": .66, "center_y": .65}, size_hint=(1.0, 1.0),halign="left",valign="middle", font_name='Georgia')
        self.label.bind(size=self.label.setter('text_size'))
        self.label.font_size = '14.5dp'
        self.root.add_widget(self.label)  # add label to the GUI
        with self.label.canvas:
            Color(0, 0, 0, 0)
            Rectangle(pos=self.label.pos, size=self.label.size)

Возможно, вы захотите удалить инструкции canvas в конце описанного выше метода. Это создает невидимый Rectangle в левом нижнем углу вашего дисплея. pos и size нового Label все еще имеют значения по умолчанию (0,0) и (100,100) в этой точке, так что именно там нарисован Rectangle и где он будет оставаться.

Вот весь код:

import kivy
kivy.require('1.10.0')
from kivy.core.window import Window
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.label import Label
from kivy.graphics import Color, Rectangle
from kivy.uix.textinput import TextInput
from kivy.uix.spinner import Spinner
Window.size = (500, 400)
Window.clearcolor = (0.1, 0.1, 0.3, 0.2)


def show_selected_value(spinner, text):
    print('Selected Process', spinner, 'have text', text)


class LRefConfigAutomation(App):
    config = None

    def build_config(self, config):
        config.setdefaults('LefConfigWindowSection', {
            'PartInputLabel': 'Please Enter your Part No',
            'TypeOfProcessLabel': 'Select Type Of Process',
            'NormalFolderName': 'Enter Normal Folder Name',

        })
        self.config = config

    def build(self):
        config = self.config
        root = FloatLayout()
        lbl = config.get('LefConfigWindowSection', 'PartInputLabel')
        self.label = Label(text=lbl, pos_hint={"center_x": .66, "center_y": .90}, size_hint=(1.0, 1.0), halign="left",valign="middle", font_name='Georgia')
        self.label.bind(size=self.label.setter('text_size'))
        self.label.font_size = '14.5dp'  # something that'll give texture bigger than phone's screen size
        root.add_widget(self.label)
        with self.label.canvas:
            Color(0, 0, 0, 0)
            Rectangle(pos=self.label.pos, size=self.label.size)
        self.txtKemNo = TextInput(pos_hint={"center_x": .66, "center_y": .90}, size_hint=(None, None),font_name="Georgia", size=(100, 30), multiline=False, hint_text="Part Number")
        root.add_widget(self.txtKemNo)
        lbl = config.get('LefConfigWindowSection', 'TypeOfProcessLabel')
        self.label = Label(text=lbl, pos_hint={"center_x": .66, "center_y": .75}, size_hint=(1.0, 1.0), halign="left",valign="middle", font_name='Georgia')
        self.label.bind(size=self.label.setter('text_size'))
        self.label.font_size = '14.5dp'  # something that'll give texture bigger than phone's screen size
        root.add_widget(self.label)
        with self.label.canvas:
            Color(0, 0, 0, 0)
            Rectangle(pos=self.label.pos, size=self.label.size)
        self.requestsspinner = Spinner(
            # default value shown
            text='Select Process',
            # available values will be binded to the combo
            values=("Normal", "Official"),
            # just for positioning in our example
            size_hint=(None, None),
            size=(110, 20),
            pos_hint={'center_x': .66, 'center_y': .75}, font_name='Georgia')
        self.requestsspinner.font_size = '14.5dp'
        self.requestsspinner.bind(text=show_selected_value)
        self.requestsspinner.bind(text=self.CreateLable)
        root.add_widget(self.requestsspinner)
        return root

    def CreateLable(self, spinner, text):
        if text == "Normal":
            pass
        elif text == "Official":
            config = self.config
            lbl = config.get('LefConfigWindowSection', 'NormalFolderName')
            self.label = Label(text=lbl, pos_hint={"center_x": .66, "center_y": .65}, size_hint=(1.0, 1.0),halign="left",valign="middle", font_name='Georgia')
            self.label.bind(size=self.label.setter('text_size'))
            self.label.font_size = '14.5dp'
            self.root.add_widget(self.label)

if __name__ == "__main__":
    LRefConfigAutomation().run()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...