首页 > 解决方案 > 如何增加微调器中下拉列表的宽度?

问题描述

如何增加微调器中下拉列表的宽度?我在照片中看到的按钮很小,我的下拉列表中的值没有完全显示出来。我在互联网上做了一些研究,我可以看到有人说我需要创建一个类微调器并添加这些功能。但我不知道该怎么做。有人可以向我展示我如何执行此操作的代码示例吗?

在此处输入图像描述

main.kv(简化代码)

...
Spinner:
    id: spinnerrpi
    size_hint: None, None
    width: '30sp'
    height: '30sp'
    border: 0,0,0,0
    background_normal: 'seta1.png'
    background_down: 'seta2.png'
    values: "Branco Neve","Banco Gelo","Amarelo","Rosa Claro","Bege"
    on_text: app.spinner_rpiso(spinnerrpi.text)

...

main.py(简化代码)

...
class PrimeiraJanela(Screen):
    pass

class GerenciadorDeJanelas(ScreenManager):
    pass

class MainApp(App):
    texture = ObjectProperty()

    def build(self):
        self.title = 'MyApp'
        self.texture = Image(source = 'wave.png').texture

        sm = ScreenManager()
        sm.add_widget(PrimeiraJanela(name = 'primeira'))
        sm.current = 'primeira'
        return sm

    def spinner_rpiso(self, value):
        if (value=='Branco Neve'):
            self.root.get_screen('primeira').ids.rpi.text = str('0.90')
            self.root.get_screen('primeira').ids.spinnerrpi.text = ''
        if (value=='Banco Gelo'):
            self.root.get_screen('primeira').ids.rpi.text = str('0.70')
            self.root.get_screen('primeira').ids.spinnerrpi.text = ''
        if (value=='Amarelo'):
            self.root.get_screen('primeira').ids.rpi.text = str('0.70')
            self.root.get_screen('primeira').ids.spinnerrpi.text = ''
        if (value=='Rosa Claro'):
            self.root.get_screen('primeira').ids.rpi.text = str('0.60')
            self.root.get_screen('primeira').ids.spinnerrpi.text = ''
        if (value=='Bege'):
            self.root.get_screen('primeira').ids.rpi.text = str('0.60')
            self.root.get_screen('primeira').ids.spinnerrpi.text = ''

def exit(self):
        App.get_running_app().stop()

aplicativo = MainApp()
aplicativo.run()

标签: pythonandroidpython-3.xkivy

解决方案


Here is an extension of Spinner that honors an option_width property:

class SpinnerWithOptionWidth(Spinner):
    option_width = NumericProperty(0)  # the new property

    def __init__(self, **kwargs):
        self.invisible_attacher = None
        super(SpinnerWithOptionWidth, self).__init__(**kwargs)


    def on_is_open(self, instance, value):
        # This method is modified from Spinner
        attacher = self
        if value:
            if self.option_width > 0:
                if self.invisible_attacher is None:
                    # The DropDown is the same width as the widget it attaches to
                    # so make an invisible widget with the desired width
                    self.invisible_attacher = Widget(opacity=0, size_hint=(None, None))
                    self.add_widget(self.invisible_attacher)
                self.invisible_attacher.pos = (self.center_x - self.option_width/2, self.y)
                self.invisible_attacher.size = (self.option_width, self.height)
                attacher = self.invisible_attacher
            # open th DropDown
            self._dropdown.open(attacher)
        else:
            if self._dropdown.attach_to:
                if self.invisible_attacher:
                    self.remove_widget(self.invisible_attacher)
                    self.invisible_attacher = None
                self._dropdown.dismiss()

推荐阅读