我一直试图弄清楚如何将微调器中选择的值转换为另一个函数。我基本上需要用户选择一些选项,然后按"保存"提示另一个函数将数据写入文件(现在我只是设置打印)。当我运行form.finkle函数时,它会在0x02C149D0打印kivy.uix.button.Button对象
我确定这很容易解决,但我已经坚持了几天。
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button
from kivy.uix.popup import Popup
from kivy.uix.textinput import TextInput
from kivy.uix.spinner import Spinner
condspin = Spinner(text='Condition',values=('Good','Fair','Poor','Missing'))
typespin = Spinner(text='Type', values=('Metal','Wood','Pin','Missing'))
commlabel = Label(text='Comment')
commtext = TextInput(text="")
class Goose(App):
def build(self):
layout = GridLayout(cols=2,rows=6,padding=10,spacing=10)
layout.add_widget(Button(text='Hunter Parking'))
layout.add_widget(Button(text='Boat Launch'))
layout.add_widget(Button(text='ETRAP'))
layout.add_widget(Button(text='Monument',on_press=form.monform))
layout.add_widget(Button(text='Camp Site'))
layout.add_widget(Button(text='Sign'))
layout.add_widget(Button(text='Building'))
layout.add_widget(Button(text='Trail Head'))
layout.add_widget(Button(text='Dam'))
layout.add_widget(Button(text='Day Use'))
layout.add_widget(Button(text='Pavilion'))
layout.add_widget(Button(text='Misc Point'))
return layout
class form():
def finkle(condtest):
print condtest
def monform(self):
monbox = GridLayout(cols=2,rows=8,padding=20,spacing=20)
monpopup = Popup(title="Monument",content=monbox)
closebut = Button(text="Close")
closebut.bind(on_press=monpopup.dismiss)
savebut = Button(text="Save Point")
savebut.bind(on_press=form.finkle)
condtest = condspin.text
monbox.add_widget(condspin)
monbox.add_widget(typespin)
monbox.add_widget(commlabel)
monbox.add_widget(commtext)
monbox.add_widget(savebut)
monbox.add_widget(closebut)
monpopup.open()
Goose().run()
答案 0 :(得分:1)
由于您已将微调器设为全局,因此您可以执行print(condspin.text)
。更一般地说,您可以将微调器作为参数传递,例如
from functools import partial
savebut.bind(on_press=partial(self.finkle, condspin))
并将finkle方法重新定义为
def finkle(self, spinner, button)
请注意,我将form.finkle更改为self.finkle并添加了self和spinner参数。通过这样的类调用该方法是不好的做法。
您的代码中还有一些重要的其他不良风格的东西,我会建议其他一些更改。大多数情况下,我会基本上使用kv语言,它会使小部件树更清晰,以后更改更强大,并且使这个绑定非常简单(你可以通过一个引用微调器文本) kv id)。此外,表单类是半必需的,您可以使用FormWidget替换它,该FormWidget是您在monform函数中创建的GridLayout,将其所有子项和行为添加到kv中。