You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Kivy框架如何获取.kv文件用户输入并存入.py文件变量

解决方法

Kivy中获取kv文件内控件输入值到py文件有两种适配你当前业务场景的实现方式:

方法1:点击CRACK按钮时获取输入值(推荐,符合你点击破解才取值的逻辑)

第一步:修改.py文件的Layout_For_App类,新增取值方法

你可以直接通过控件id获取输入内容,修改后的代码如下:

from kivy.app import App
from kivy.properties import StringProperty
from kivy.uix.floatlayout import FloatLayout
try:
    from wifidroid.wifi import WifiManager
except:
    pass
from kivy.uix.textinput import TextInput
import kivymd, kivy
try:
    import wifidroid
except:
    pass
from kivy.uix.label import Label
from kivy.uix.button import Button

# 你要存储输入值的全局变量,也可以存在类属性里
user_input_ssid = ""
text = 'testttt'

try:
    wifi = WifiManager()
    wifi.startScan()
    wifi.EnabledWifi(True)
    for i in range(wifi.ScanResults.size()):
        ssid = [wifi.ScanResults.get(i).SSID]
        bssid = [wifi.ScanResults.get(i).BSSID]
        levell = [wifi.ScanResults.get(i).level]
        text += ssid[0] + " " + bssid[0] + " " + str(levell[0])
except:
    pass

try:
    wifi.ConnectWifiWpa("WifiName", "WifiPassword")
except:
    pass


class Layout_For_App(FloatLayout):
    output = StringProperty()
    input = StringProperty()

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.ids.label_output.text = text
        self.output = text

    # 新增的点击按钮调用的取值方法
    def get_ssid_input(self):
        global user_input_ssid
        # 通过id直接取输入框的文本
        user_input_ssid = self.ids.input_value.text
        # 这里可以写你拿到值之后的后续逻辑,比如测试密码强度、连接WiFi等
        print("获取到的用户输入SSID:", user_input_ssid)


class AndrdWifiApp(App):
    def build(self):
        return Layout_For_App()


AndrdWifiApp().run()

第二步:修改.kv文件,给CRACK按钮绑定点击事件

<Layout_For_App>:
    Label:
        text: 'Developed By Anonymous'
        pos_hint: {"x":0,"y":0.45}

    Label:
        text: 'OUTPUT' + root.output
        id: label_output
        background_color: (1, 1, 1, 1)
        size_hint: (0.451, 0.7)
        pos_hint: {"x":0.27,"y":0.17}
        valign: "middle"
        halign: "left"
        color: (0,1,0)
        canvas.before:
            Color:
                rgba: self.background_color
            Rectangle:
                size: self.size
                pos: self.pos
        border: 3, 3
    Button:
        text: 'CRACK'
        background_color: 1, 0, 0, 1
        color: 0, 1, 1
        size_hint: (0.4, 0.15)
        pos_hint: {"x":0.0199,"y":0.01}
        font_size: 30
        # 新增点击事件绑定,调用root里的方法
        on_press: root.get_ssid_input()

    TextInput:
        text: 'Enter Wifi SSID'
        id: input_value
        size_hint: (0.5, 0.15)
        pos_hint: {'x':0.49,'y':0.01}
        font_size: 40

方法2:实时同步输入值到py的属性

如果你需要用户输入的同时就实时拿到值,不需要等待按钮点击,可以直接把TextInput的text和你定义的input StringProperty绑定:
只需要修改.kv里的TextInput配置:

TextInput:
    text: root.input # 绑定到py类里的input属性
    id: input_value
    size_hint: (0.5, 0.15)
    pos_hint: {'x':0.49,'y':0.01}
    font_size: 40

之后在py的Layout_For_App类里随时调用self.input就能拿到当前输入框的最新值,不需要额外触发。

内容的提问来源于stack exchange,提问作者RDMotivation Krunklier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 19:54:06