Reputation: 21
{Actually whenever i click on the spinner value (official) label is created,at that time i click on the another spinner value "Normal" created label is hiding. this scenario working fine, But Coming To my 2nd scenario -- whenever i click on the spinner value (Normal) first time,it showing an error}
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.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 = ""
if name == "main": LRefConfigAutomation().run()
Upvotes: 0
Views: 223
Reputation: 2533
In CreateLabel, you need to move the creation part outside of the if condition: So this part
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)
should be before if text == "Official":
.
Otherwise, you get an error because you haven't created self.label03
.
Complete 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 = ""
There's another problem in CreateLabel:
self.label03 = Label(...)
Everytime you call CreateLabel, self.label03 is assigned a new Label, not the first one. So instead of hiding the first one you're creating a new one and hiding this. There are multiple ways to solve but here's one:
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 = ""
Upvotes: 0