【问题标题】:how can i create the label when ever i select the spinner value i.e Official and when ever i select spinner value normal hide the label?当我选择微调器值(即官方)以及当我选择微调器值正常隐藏标签时,如何创建标签?
【发布时间】:2020-04-03 15:18:23
【问题描述】:

[这里我已将我的代码粘贴到 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()

【问题讨论】:

  • 能否请您再次复制您的代码并检查格式?
  • 我无法正确粘贴代码,我现在该怎么办,请帮助我。
  • 我已将代码粘贴到 git hub 中,请查看
  • 你的代码需要在这里,在问题中,最好是minimal reproducible example。外部链接可能会中断,使问题变得毫无意义。特别是 guthub 代码很可能会再次发生变化,这使得问题对于其他有同样问题的人来说毫无意义。见How to Ask。

标签: python python-3.x kivy


【解决方案1】:

存在三个问题。首先,您的 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)

您可能希望在上述方法结束时删除画布说明。它在显示屏的左下角创建了一个不可见的Rectangle。新的Label 的pos 和size 在那个时候仍然是(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()

【讨论】:

  • 我按照你的建议做了,但我仍然面临同样的问题,每当我选择未创建官方标签时
  • 您是否更改了CreatLable() 方法?具体来说,将root.add_widget 更改为self.root.add_widget?
  • 是的,我做到了,但是点击官方时我仍然没有得到任何标签
  • 我已经将结果图片粘贴到了 GitHub 中,我想要输出结果,请您查看一下
猜你喜欢
  • 2020-07-16
  • 1970-01-01
  • 1970-01-01
  • 2016-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-10
  • 1970-01-01
相关资源
最近更新 更多