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
相关产品推荐
相关产品推荐

