Kivy 项目51斩百词 5

MRWord\pages\infopage\info.py

def read_random_word(self)

    def read_random_word(self):
        """随机读取一条数据"""
        sql = "SELECT * FROM word WHERE id = (SELECT word_id FROM today ORDER BY RANDOM() limit 1)"
        rows = select_data(sql)
        if len(rows) == 0:
            # 先清除所有widgets
            pass
        else:
            # 清除存在的三个按钮和标签
            self.ids.main_box.clear_widgets(children=[self.ids.three_labels_box, self.ids.box_button_anchor])
            # 绑定点击任意位置执行方法
            self.ids.main_box.bind(on_touch_down=self.anywhere_touch_down)
            print(rows)
            self.ids.word_to_study.text = rows[0][1]
            self.ids.phonetic.text = rows[0][3]

sql = "SELECT * FROM word WHERE id = (SELECT word_id FROM today ORDER BY RANDOM() limit 1)"

这个SQL查询语句的目的是从一个名为word的表中随机选择一个与today表相关的单词。具体解释如下:

  1. 外部查询

SELECT * FROM word WHERE id = ...

这部分查询是从word表中选择所有列(*表示所有列),但只选择那些其id满足某个条件的行。
       2. 内部查询(子查询)

(SELECT word_id FROM today ORDER BY RANDOM() LIMIT 1)

这是一个子查询,它做了以下几件事:

* 从`today`表中选择`word_id`列。  
* 使用`ORDER BY RANDOM()`对这些`word_id`进行随机排序。  
* 使用`LIMIT 1`只选择排序后的第一个`word_id`。

因此,整个查询的逻辑是:首先,从today表中随机选择一个word_id。然后,使用这个随机选择的word_idword表中选择相应的行。

但是,需要注意的是,如果today表中没有word_idword表中的id匹配,那么这个查询将不会返回任何结果。另外,如果today表为空,那么子查询可能会返回一个错误(取决于数据库的具体实现),因为不能从空集中选择一个随机元素。

为了避免这种情况,你可能需要添加一些额外的逻辑来处理这些情况,例如使用COALESCEIFNULL(取决于你的数据库系统)来提供一个默认值,或者确保today表在查询之前至少有一个条目。

MRWord\db\sqlite3_connect.py

def select_data(sql):

def select_data(sql):
    """查询数据"""
    # cursor.execute('select * from word where id=?', ('1',))
    conn = sqlite3.connect(db_path)
    try:
        cursor = conn.cursor()
        # 执行sql
        cursor.execute(sql)
        response = cursor.fetchall()
        cursor.close()
        return response
    except Exception as e:
        logging.warning('Exception:%s' % e)
    finally:
        conn.close()

SQLiteStudio 中的word 数据库

添加print (rows)后得到的值

[(4, 'mail', 'n. 邮件;邮政,邮递;盔甲\nvt. 邮寄;给…穿盔甲\nvi. 邮寄;寄出\nn. (Mail)人名;(法)马伊\n\n\n', '[meɪl]', ' Your cheque is in the mail. ', '你的支票在邮寄中。', None, 4, '2019-11-19 16:47:46', 0)]

在给出的rows列表中,rows[0]是一个包含多个元素的元组。根据Python的索引规则,rows[0][1]表示访问这个元组的第二个元素(因为索引是从0开始的),而rows[0][3]表示访问这个元组的第四个元素。

因此:

  • rows[0][1] 是 'mail',这是元组的第二个元素。
  • rows[0][3] 是 '[meɪl]',这是元组的第四个元素。

所以:

  • rows[0][1] 的值是 'mail'
  • rows[0][3] 的值是 '[meɪl]'
既然  数据 正常,为什么显示是一坨黑色或白色的方块儿呢?

原来是在kv文件中,其父容器名字写错了,应该写Label

  1. ImageButton 是一个自定义的类,它结合了 ButtonBehavior 和 Image 类的特性。但是,您尝试在 Kivy 语言(.kv 文件)中直接定义 AnchorLayout 和 ImageButton 的布局,这是不正确的,因为 .kv 文件通常用于定义界面布局,而不是类定义。

  2. ImageButton 自定义类可能需要您自己实现显示文本的逻辑,因为 Image 控件默认不支持文本显示。如果您想要文本和图片同时显示,您可能需要使用其他方法,比如将 Label 和 Image 放在一个布局中,或者使用背景图片和文本属性来模拟一个图像按钮。

  3. 假设您已经有了 ImageButton 类,并且这个类能够显示文本(这通常不是 Image 控件的标准功能,所以您可能需要自定义绘制逻辑),那么 font_name 属性应该被设置在 ImageButton 类的构造函数中或者通过其他方式在 Python 代码中设置,而不是在 .kv 文件中。

  4. ids.phonetic.text = '[meɪl]' 这行代码看起来像是在 Python 代码中设置的,但它不会直接作用在 .kv 文件中定义的界面元素上。您需要在 .kv 文件中为 ImageButton 设置一个属性(比如 text,如果您已经实现了这个属性),或者在 Python 代码中通过引用该按钮的实例来设置它。

  5. 关于黑色方块的问题,这可能是由于 ImageButton 实际上是一个图像控件,并且您没有为它指定任何图像源(source 属性),所以它只显示了一个默认的或空白的图像区域。如果您想要显示文本,您需要使用 Label 或者其他支持文本的控件,并可能将其背景设置为透明或图像。

为了修复这个问题,您应该:

  • 在 Python 代码中定义 ImageButton 类(如果还没有的话),并实现显示文本的逻辑(如果需要的话)。
  • 在 .kv 文件中定义您的界面布局,使用 ImageButton(如果它支持文本)或者其他控件(如 Button 和 Image 的组合)来创建您想要的图像按钮效果。
  • 确保 font_name 和其他相关属性在 Python 代码中或通过 .kv 文件被正确设置。
  • 如果 ImageButton 是一个图像控件,并且您想要显示文本,考虑使用 Label 控件,并可能将其与图像控件结合使用。

如图就显示正常啦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/659650.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AdaBoost 乳腺癌数据挖掘

目录 1.数据集背景 2 集成学习方法 AdaBoost集成过程 3 个体学习器 结果评价 准确率以及混淆矩阵 评估集成学习模型的泛化学习能力 评估集成学习模型的多样性 结论 源码 1.数据集背景 乳腺癌数据集是一个非常经典的二元分类数据集,被广泛应用…

Java线程基础

一、相关概念 1、程序 为完成任务,用某种语言编写的一组指令的集合。 2、进程 进程是指运行中的程序。 进程是程序的依次执行过程,或是正在运行的一个程序,是一个动态过程:有自身产生、存在和消亡的过程。 3、线程 线程是由进程创…

拍视频麦克风什么牌子好?户外无线麦克风哪个牌子好,看本期文章

​无线领夹麦克风,作为现代音频技术的重要代表,已经广泛应用于各种场合。它不仅能提高演讲者的声音质量,还能增加演讲的互动性和生动性。然而,面对市场上众多的无线领夹麦克风产品,如何选择一款适合自己的设备成为了一…

产教协同|暴雨AI算力赋能传媒实践教学

近日,“第七届传媒实践教学创新研讨会暨中国高校影视学会实验教学专业委员会年会”在美丽的山城重庆成功举办。本次大会以“拥抱AI,融合共生”为主题,吸引了来自全国200多所高校、30多家企业以及700多位大视听实践教学产学研用各界专家、学者…

react跨组件通信Context

案例&#xff1a;现在有个父-子-孙组件 需要进行组件通信 import { useState } from "react"; // 创建上下文 const CountContext React.createContext();//子组件 const SonComponent (props) > {return (<div><h2>子组件</h2><Grandson…

便携式应急气象站:应急气象监测装备

TH-BQX5便携式应急气象站&#xff0c;作为现代气象监测的重要装备&#xff0c;以其独特的便携性、高效性和灵活性&#xff0c;在应急气象监测领域发挥着至关重要的作用。这类气象站不仅为灾害预警、环境保护、农业生产等多个领域提供了实时、准确的气象数据&#xff0c;还在突发…

记录一次Redisson使用synchronized和分布式锁不生效的原因

最近在开发的过程中&#xff0c;遇到了一个并发场景&#xff0c;用户进行方案复制的时候&#xff0c;当快速点击两次操作的时候&#xff0c;出现了复制方案重名的情况&#xff0c;实际上是复制方案的方案名称&#xff0c;是由后端根据数据库已有的方案名称和当前要复制的方案名…

Hugging face win使用教程(二)

1. 将环境迁移到win&#xff0c;可以直接下载修改好的cuda环境https://download.csdn.net/download/liangjiubujiu/89368302?spm1001.2014.3001.5503 2. 修改hugging face的缓存路径 3. 重启pycharm 4. 编写测试代码&#xff0c;注意可能由于网络链接问题&#xff0c;需要关…

Parasoft C++Test软件静态分析操作指南_编码规范/标准检查

系列文章目录 Parasoft CTest软件安装指南 Parasoft CTest软件静态分析操作指南_编码规范/标准检查 Parasoft CTest软件静态分析操作指南_软件质量度量 Parasoft CTest软件静态分析_自动提取静态分析数据生成文档 Parasoft CTest软件单元测试_操作指南 Parasoft CTest软件单元…

嵌入式进阶——OLED显示器(SPI)

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 SPI协议原理图字库芯片中文显示屏原理API的使用 SPI协议 SPI&#xff08;Serial Peripheral Interface&#xff09;是一种同步串行…

嵌入式要卷成下一个Java了吗?

嵌入式要卷成下一个Java了吗&#xff1f; 根据我十年的嵌入式开发经验&#xff0c;嵌入式开发的工资水平相对 Java 较低。不过&#xff0c;嵌入式开发岗位主要集中在第二产业&#xff0c;尤其是电器、电气、机械汽车、航空航天等行业的“智能制造”领域。这些行业属于重资产行…

JWT身份验证相关安全问题

前言&#xff1a;工作中需要基于框架开发一个贴近实际的应用&#xff0c;找到一款比较合适的cms框架&#xff0c;其中正好用到的就是jwt做身份信息验证&#xff0c;也记录一下学习jwt相关的安全问题过程。 JWT介绍 Json web token (JWT), 是为了在网络应用环境间传递声明而执行…

线上自由DIY预约小程序源码系统 自由DIY你的界面 带完整的的安装代码包以及搭建教程

系统概述 在当今数字化时代&#xff0c;移动应用成为人们生活和工作中不可或缺的一部分。预约小程序作为一种便捷的工具&#xff0c;为用户提供了高效的预约服务体验。而线上自由 DIY 预约小程序源码系统则为开发者和企业提供了更大的自由度和创造力&#xff0c;让他们能够根据…

Redis篇 String的基本命令

String基本命令 一.setnx,setex,psetex二. 增加删除命令三.append,setrange,getrange,strlen命令1.append2.setrange3.strlen4.getrange 四.String的内部编码方式 一.setnx,setex,psetex setex和psetex设置过期时间 setex设置的过期时间是秒级 psetex设置的过期时间是毫秒级 二…

11.任务状态查询API函数总结

一、任务相关 API 函数预览 二、任务相关 API 函数详解 1. 函数 uxTaskPriorityGet() 此函数用于获取指定任务的任务优先级&#xff0c;若使用此函数&#xff0c;需在 FreeRTOSConfig.h 文件中设 置配置项 INCLUDE_uxTaskPriorityGet 为 1&#xff0c;此函数的函数原型如下所示…

我和jetson-Nano的故事(12)——安装pytorch 以及 torchvision

在jetson nano中安装Anaconda、pytorch 以及 torchvision 1.Pytorch下载安装2.Torchvision安装 1.Pytorch下载安装 首先登录英伟达官网下载Pytorch安装包&#xff0c;这里以PyTorch v1.10.0为例 安装依赖库 sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev liba…

HNU-人工智能-2024期末考试回忆

前言 后知后觉&#xff0c;似乎是别的专业的往年试题拿来复用&#xff0c;我没刷到&#xff0c;比较吃亏。 最后一题把数据改的很恶心&#xff0c;让我cosplay成GPU&#xff0c;算3个5*5的卷积核&#xff0c;简直恶心。根本没时间算完。 整场考试体验还挺差的。主要是老师缝…

FreeRTOS【7】队列使用

1.开发背景 操作系统提供了多线程并行的操作&#xff0c;为了方便代码的维护&#xff0c;各个线程都分配了专用的内存并处理对应的内容。但是线程间也是需要协助操作的&#xff0c;例如一个主线程接收信息&#xff0c;会把接收的信息并发到其他线程&#xff0c;即主线程不阻塞&…

helm离线安装

目录 概述实践 概述 centos 7.x 离线安装 helm 3.14.4 版本 实践 离线包资源下载地址 github [roothadoop01 ~]# tar -xvf helm-v3.14.4-linux-amd64.tar.gz linux-amd64/ linux-amd64/README.md linux-amd64/LICENSE linux-amd64/helm [roothadoop01 ~]# mv ./linux-amd…

Deepin Linux 深度 V23 beige 官方源及换镜像源方法。

Deepin Linux 深度 V23 英文版本号&#xff1a;beige 谁起的烂名字。。。。。。 1. 打开文件管理器&#xff0c;在apt文件夹点右键&#xff08;以管理员身份打开&#xff09;&#xff0c; 2. 输入你的登录密码&#xff0c;以便打开文件夹&#xff08;管理员权限&#xff09;。…