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

Python结合Kivy开发密码生成器GUI点击生成按钮无内容更新求助

代码问题修复说明

你代码存在3处核心错误,修改后即可正常运行:

  • 同步网络请求阻塞主线程导致卡顿,且重复请求词库冗余
  • 错误地在实例方法中动态声明StringProperty,未正确修改已绑定的密码属性
  • 点击回调逻辑错误,未更新UI绑定变量,仅返回无意义的布尔判断

修复后的Python代码

import kivy
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.properties import StringProperty
from kivy.properties import ObjectProperty
import requests
import random
import threading

class float_layout(Widget):
    passw = ObjectProperty(None)
    btn = ObjectProperty(None)
    password = StringProperty("")
    # 预加载词库,只请求一次
    WORDS = []
    
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        # 初始化时异步加载词库,避免启动卡顿
        threading.Thread(target=self._load_word_list, daemon=True).start()
    
    def _load_word_list(self):
        word_site = "https://www.mit.edu/~ecprice/wordlist.10000"
        response = requests.get(word_site)
        self.WORDS = response.content.splitlines()
    
    def change(self):
        # 词库没加载完先提示
        if not self.WORDS:
            self.password = "词库加载中,请稍候再试"
            return
        signs = ["__","_","**",":","::",";",";;","&","&&","***","-","--","---","***","&&&"]
        sign = random.choice(signs)
        # 修正索引范围,避免越界
        number = random.randint(0, len(self.WORDS)-1)
        addition1 = random.randint(0,100000)
        word = self.WORDS[number].decode('utf-8') + sign + str(addition1)
        # 直接修改绑定的StringProperty属性,触发UI自动更新
        self.password = word
              
class GenApp(App):
    def build(self):
        return float_layout()
         
if __name__ == "__main__":
    GenApp().run()

需修改的KV代码部分

仅需要调整按钮的点击回调,不需要传多余参数:

# 其他部分保持不变,仅修改Button的on_press属性
Button:
    id:btn
    text:"Generate"
    size_hint:0.5,0.1
    pos_hint:{"x":0.25,"top":0.41}
    background_color:0.3, 0.5, 0.7, 1
    on_press: root.change()

修改说明

  1. 新增异步线程加载词库,仅在应用启动时请求一次,不会阻塞UI线程,点击按钮不会再卡顿
  2. 废弃了方法内错误的StringProperty声明逻辑,直接修改实例已定义的password属性,Kivy会自动同步更新绑定的TextInput文本
  3. 修正了随机数索引范围,避免词库索引越界报错
  4. 简化了点击回调逻辑,删除无意义的参数传递和返回值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 01:09:01