Как скрыть метку всякий раз, когда я выбираю значение счетчика? - PullRequest
0 голосов
/ 04 апреля 2020
  1. {На самом деле всякий раз, когда я нажимаю на ярлык значения счетчика (официальный), в это время я нажимаю на другое значение счетчика. «Нормальный» созданный ярлык скрывается. этот сценарий работает нормально, но подходит ко второму сценарию - всякий раз, когда я нажимаю на значение счетчика (Normal) в первый раз, он показывает ошибку}

    import kivy kivy.require ('1.10.0') из kivy.core.window import Окно из kivy.app import Приложение из kivy.uix.floatlayout import FloatLayout из kivy.uix.label import Метка из kivy.graphics import Color, Прямоугольник из kivy.uix.textinput Импорт TextInput из kivy.uix. импорт счетчика Spinner

    Window.size = (500, 400) Window.clearcolor = (0,1, 0,1, 0,3, 0,2)

    def show_selected_value (spinner, text): print ('Выбранный процесс ', spinner,' иметь текст ', текст)

    класс LRefConfigAutomation (приложение): config = нет

    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.label01 = 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.label01.bind(size=self.label01.setter('text_size'))
        self.label01.font_size = '14.5dp'  # something that'll give texture bigger than phone's screen size
        root.add_widget(self.label01)
        with self.label01.canvas:
            Color(0, 0, 0, 0)
            Rectangle(pos=self.label01.pos, size=self.label01.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.label02 = 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.label02.bind(size=self.label02.setter('text_size'))
        self.label02.font_size = '14.5dp'  # something that'll give texture bigger than phone's screen size
        root.add_widget(self.label02)
        with self.label02.canvas:
            Color(0, 0, 0, 0)
            Rectangle(pos=self.label02.pos, size=self.label02.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):
        config = self.config
        if text == "Official":
            lbl = config.get('LefConfigWindowSection', 'NormalFolderName')
            self.label03 = 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.label03.bind(size=self.label03.setter('text_size'))
            self.label03.font_size = '14.5dp'
            self.root.add_widget(self.label03)
            with self.label03.canvas:
                Color(0, 0, 0, 0)
                Rectangle(pos=self.label03.pos, size=self.label03.size)
        elif text == "Normal":
            self.label03.text = ""
    

    если name == " main": LRefConfigAutomation (). Run ()

enter image description here

1 Ответ

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

В CreateLabel вам нужно переместить часть создания за пределы условия if: так что эта часть

lbl = config.get('LefConfigWindowSection', 'NormalFolderName')
        self.label03 = 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.label03.bind(size=self.label03.setter('text_size'))
        self.label03.font_size = '14.5dp'
        self.root.add_widget(self.label03)

должна быть до if text == "Official":. В противном случае вы получите ошибку, потому что вы не создали self.label03. Завершить CreateLabel:

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

В CreateLabel есть еще одна проблема:

self.label03 = Label(...)

Каждый раз, когда вы вызываете CreateLabel, self.label03 назначается новая метка, а не первая. Поэтому вместо того, чтобы скрывать первый, вы создаете новый и скрываете это. Есть несколько способов решить, но вот один:

def build(self):
    ... # add these two lines to create the Label once
    self.CreateLabel()  
    root.add_widget(self.label03)
    # Use another function (UpdateLabel) to update the value
    self.requestsspinner.bind(text=show_selected_value)
    self.requestsspinner.bind(text=self.UpdateLable)
    ...

# Only called once to create the Label
def CreateLabel(self):
    self.label03 = Label(text="", pos_hint={"center_x": .66, "center_y": .65}, size_hint=(1.0, 1.0),
                             halign="left", valign="middle")
    self.label03.bind(size=self.label03.setter('text_size'))
    self.label03.font_size = '14.5dp' 
    with self.label03.canvas:
        Color(0, 0, 0, 0)
        Rectangle(pos=self.label03.pos, size=self.label03.size)

# Changes the Label 
def UpdateLable(self, spinner, text):        
    if text == "Official":
        config = self.config
        self.label03.text =  config.get('LefConfigWindowSection', 'NormalFolderName')            
    elif text == "Normal":
        self.label03.text = ""
...