Kivy将文本从微调器发送到另一个函数

2024-09-30 14:21:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试如何将微调器中选定的值转换为另一个函数。我基本上需要一个用户选择一些选项,然后按“保存”提示另一个函数将数据写入文件(现在我只需要设置打印)。当我运行表单.finkle它打印的功能kivy.uix.button.Button对象位于0x02C149D0

我相信这是个简单的办法,但我已经坚持了好几天了。在

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()

Tags: textfromimportaddbuttontextinputwidgetlayout
1条回答
网友
1楼 · 发布于 2024-09-30 14:21:47

既然您已经将微调器设为全局的,您只需做print(condspin.text)。一般来说,可以将微调器作为参数传递,例如

from functools import partial
savebut.bind(on_press=partial(self.finkle, condspin))

并将finkle方法重新定义为

^{pr2}$

注意我变了表单.finkle到自我。芬克尔并添加了self和spinner参数。像那样通过类调用方法是不好的做法。在

在你的代码中还有其他一些不好的地方,我建议你做一些其他的改变。大多数情况下,我会将kv语言用于所有事情,它将使widget树更加清晰,对以后的更改更加健壮,并且使这种绑定非常简单(您可以通过kv id引用spinner文本)。另外,form类是半不必要的,您可以用FormWidget替换它,它是您在monform函数中创建的GridLayout,添加它的所有子类和kv的行为。在

相关问题 更多 >