Kivy 项目51斩百词 5

news2024/11/17 19:45:09

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 控件,并可能将其与图像控件结合使用。

如图就显示正常啦。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Google使用AI改进了 Sheets;开源视觉语言模型llama3v;开源情绪语音模型ChatTTS;

✨ 1: Google has improved Sheets with AI. Google 使用 AI 改进了 Sheets 您可以使用 Gemini 处理您的数据并将其变成老师。 优化您的数据 Gemini 了解您的数据并提出改进建议。 例如,它可以将重复数据转换为更实用的下拉框。 解释数据 通过单击双子座图标…

产品推荐 | 基于Xilinx Zynq-7015 FPGA的MYC-C7Z015开发板

一、产品概述 基于 Xilinx Zynq-7015,双Cortex-A9FPGA全可编程处理器;PS部分(ARM)与PL部分(FPGA)之间采用AXI高速片上总线通信,吉比特级带宽,突破传统ARMFPGA架构的通信瓶颈,通过PL部分(FPGA)灵活配置丰富的外设接口&…

电表自动抄表系统:智能时代的能源管理新方式

1.界定和功能 电表自动抄表系统是一种现代化电力计量技术,它利用先进的通讯技术和互联网,完成了远程控制、实时电磁能数据采集和处理。系统的主要作用包含全自动载入电表数据信息、实时检测电力应用情况、出现异常报案及其形成详尽能源使用报告&#xf…

OpenHarmony面向万物智联的应用框架的思考与探索

应用框架,是操作系统连接开发者生态,实现用户体验的关键基础设施。业务的飞速发展促进了应用框架不断演进和变化。 01►业界应用框架的演进 应用是用户使用操作系统/设备的入口,应用框架则是应用开发和运行的基础设施。以移动端为例&#x…

逍遥散人的“痛婚”,让《光夜》玩家悄悄破防了

网红博主的一场求婚,让《光与夜之恋》玩家破防了。 知名游戏博主逍遥散人发微博公布求婚成功,本来应该是一件喜事,但却因为求婚场景布满了《光与夜之恋》男主角之一陆沉的谷子(周边),遭到了“6推”&#x…

什么是组态?什么是工业控制中的组态软件?

随着工业4.0和智能制造的发展,工控软件的应用越来越广泛,它们在提高生产效率、降低能耗和减少人力成本等方面发挥着越来越重要的作用。 什么是工控软件? 工控软件是指用于工业控制系统的软件,主要应用于各种生产过程控制、自动化…

6种经典的网页布局设计,你最喜欢哪个?

信息时代,我们每天都会浏览很多网页,但你有没有想过,让你停留在一个新网页的关键因素有哪些?毫无疑问,网页布局一定是关键因素之一。一个优秀的网页布局不仅可以让网站看起来更美观、更专业,还能够抓住用户…

如何顺利通过软考中级系统集成项目管理工程师?

中级资格的软考专业包括"信息系统",属于软考的中级级别。熟悉软考的人都知道,软考分为初级、中级和高级三个级别,涵盖计算机软件、计算机网络、计算机应用技术、信息系统和信息服务五个专业,共设立了27个资格。本文将详…

代码随想录算法训练营第八天| 344.反转字符串、541. 反转字符串II、 卡码网:54.替换数字、151.翻转字符串里的单词、卡码网:55.右旋转字符串

344.反转字符串 题目链接&#xff1a; 344.反转字符串 文档讲解&#xff1a;代码随想录 状态&#xff1a;so easy 题解&#xff1a; public void reverseString(char[] s) {int left 0, right s.length - 1;char temp s[0];while (left < right) {temp s[left];s[left] …

linux下常用的终端命令

文章目录 1. MV移动文件、重命名文件1.1 移动文件&#xff1a;mv [选项] 源文件或目录 目标文件或目录1.2 文件重命名 2. 查找&#xff1a;文件&#xff0c;内容&#xff0c;统计文件2.1 find查找文件2.2 Linux查找文件内容 3. 查看当前用户4. linux修改文件所属用户和组5. 复制…

MiniPCIe/SATA双用插槽无法识别minipcie模块怎么回事!

在计算机和嵌入式系统设计中,MiniPCIe/SATA双用插槽作为一种高度集成的解决方案,提供了极大的灵活性与扩展能力。它不仅能够支持MiniPCIe接口的无线网卡、固态硬盘控制器等模块,还能适应SATA接口的硬盘或固态存储设备,大大丰富了系统配置的可能性。尽管设计初衷良好,但在实…

【YOLO系列】YOLOv10模型结构详解与推理部署实现

点击开始系统化学习YOLOv系列网络 YOLOv10模型 早晨看到一堆推文&#xff0c;说YOLOv10已经发布了&#xff0c;吓我一跳&#xff0c;这个世界变化这么快&#xff0c; 然后快速的看一下相关的文档&#xff0c;发现YOLOv10 相比YOLOv8有两个最大的改变分别是 添加了PSA层跟CIB…

【AI赋能】香橙派OrangePi AIpro初体验

【AI赋能】香橙派OrangePi AIpro初体验 1、初识香橙派1.1、仪式感开箱1.2、OrangePi AIpro(8T)介绍 2、上电开机2.1、开机2.2、串口调试2.2.1 两种方式登录2.2.2 相关信息 2.3、启动系统2.4、网络配置 3、连接摄像头4、目标检测4.1、Jupyter Lab模式4.2、 目标检测测试4.2.1 视…

开一个抖音小店可以经营几个类目?经营几个类目最合适?

大家好&#xff0c;我是喷火龙。 抖音小店的商品类目和商品数量是没有限制的&#xff0c;只要是在营业执照的经营范围之内的类目都能入驻抖音小店&#xff0c;但是选择的主营类目不能超过三个。 有些商家可能会想&#xff0c;自己经营多个类目&#xff0c;做多种商品种类&…

梳理清楚的echarts地图下钻和标点信息组件

效果图 说明 默认数据没有就是全国地图&#xff0c; $bus.off("onresize")是地图容器变化刷新地图适配的&#xff0c;可以你们自己写 getEchartsFontSize是适配字体大小的&#xff0c;getEchartsFontSize(0.12) 12 mapScatter是base64图片就是图上那个标点的底图 Ge…

【Java SE】超详细讲解String类

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 文章目录 1. 初步认识String2. String类的常用方法2.1 字符串构造2.2 String对象比较2.2.1 比较是否引用同一个对象2.2…

3.4 移动机器人工作空间(摘自自主移动机器人导论2)

对于一个机器人来说&#xff0c;机动性等效于它的控制自由度。但是&#xff0c;机器人是处于某种环境的&#xff0c;因而下一个问题是把我们的分析放到环境之中。 我们关心机器人用它可控制的自由度在环境中定位它本身的方法。例如&#xff0c;考虑 Ackerman 车辆或汽车&#…

AI时代的服装设计师--AIGC

AI时代的服装设计师--AIGC AIGCAIGC设计能替代真正的设计师吗森马T恤设计AIGC优势、优化 本文记录于去年参加的一次森马T恤设计活动的感受。 AIGC 可以说&#xff0c;近期以来&#xff0c;随着ChatGPT的不断发展&#xff0c;从ChatGPT-3到ChatGPT-4的飞速发展&#xff0c;AIGC…

无人港口/码头兴起,可视化大屏功不可没。

码头/港口可视化大屏可以为管理上带来多方面的价值&#xff0c;包括但不限于&#xff1a; 1. 实时监控&#xff1a; 大屏可以将港口的各种数据、设备状态、船舶位置等信息实时展示&#xff0c;管理人员可以通过大屏随时监控港口的运营情况&#xff0c;及时发现并处理问题。 2…

香橙派AIpro初体验

1.开发板资料 开发板资源 产品介绍主页&#xff1a;http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/details/Orange-Pi-AIpro.html开发板案例源码&#xff1a;https://gitee.com/ascend/EdgeAndRobotics工具&原理图&案例源码&开发手册&#x…