如何在 python 中获取用户输入(Kivy 框架)

Posted

技术标签:

【中文标题】如何在 python 中获取用户输入(Kivy 框架)【英文标题】:How do I get user input in python (Kivy framework) 【发布时间】:2022-01-05 10:31:39 【问题描述】:

我正在尝试用 python(Kivy 框架)制作一个软件,我的软件将能够测试 wifi 密码的强度。

我遇到了一个问题。如何将 .kv (kivy) 文件中的用户输入获取到 .py (python) 文件中?

.PY 文件

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

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



#wifi.ConnectWifiWep("WifiName", "WifiPassword")
#wifi.ConnectWifiPublic("WifiName")

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


    pass


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


AndrdWifiApp().run()

.KV 文件

<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

    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

我想从我的 .KV 文件中获取用户输入,然后将其存储在我的 .PY 文件中的 VARIABLE

This picture explains more, and it also displays how my GUI software looks like.

【问题讨论】:

您不会“将用户输入存储在 .py 文件中的变量中”——Python 源代码文件中的变量是程序员用来记住和引用内容的东西——当你用户获得软件,所有变量都已定义,您的程序应该按预期工作。你想对用户输入做什么?用户需要做什么? 我想用它作为wifi SSID(Wifi名称) 然后连接wifi 【参考方案1】:

在您的 Layout_For_App 类中,您可以添加类似以下的方法:

def get_ssid(self):
    self.ssid = self.ids.input_value.text  # store the input in a variable

kv 中的Button 为例,您可以在按下Button 时触发该方法:

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
    on_press: root.get_ssid()  # trigger the storage of user input.

【讨论】:

以上是关于如何在 python 中获取用户输入(Kivy 框架)的主要内容,如果未能解决你的问题,请参考以下文章

在 Kivy 应用程序中获取文本输入值

Kivy Python-文本输入框填充整个浮动布局屏幕

在 kivy 中有建议的搜索框?

Kivy/Python 文本输入焦点

如何从for循环中获取用户输入的数据到kivymd中的python文件

如何在 Kivy 的 Builder 之外获取用户数据?