python - 如何增加微调器中下拉列表的宽度?
问题描述
如何增加微调器中下拉列表的宽度?我在照片中看到的按钮很小,我的下拉列表中的值没有完全显示出来。我在互联网上做了一些研究,我可以看到有人说我需要创建一个类微调器并添加这些功能。但我不知道该怎么做。有人可以向我展示我如何执行此操作的代码示例吗?
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()
解决方案
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()
推荐阅读
- node.js - 带有异步映射的 NodeJS 模板文字
- express - 如何在 ExpressJS 中异步传递 http 请求的结果?
- java - iText PDF模板在表格上动态插入行
- java - Spring boot MongoDB Change Streams 不起作用
- javascript - 按钮定位问题
- git - 什么创建了远程 git 存储库?
- google-apps-script - 如何获取包含许多页面的 Google 网站的所有页面
- tensorflow - 形状在 tf.data.Dataset.from_tensor_slices 的最后一条记录中不兼容
- c - 如何仅使用键盘将值从一个整数数组复制到另一个整数数组来填充它们?
- android - SupportMapFragment (V2) - 一些像 OnInfoWindowClickListener 这样的 clicklisteres 不起作用