Kivy按钮文本对齐问题

2024-01-07

我正在尝试在 Kivy 中开发一个电子邮件应用程序,基本上只是作为学习框架内部和外部的练习...我正在尝试创建初始窗口,但遇到了一些绊脚石!这个想法是,它只会在收件箱中显示电子邮件列表,就像移动设备上的任何基本电子邮件应用程序一样。

我遇到的问题是我无法弄清楚如何使每个列表项(这只是一个按钮)的文本正确对齐。在我的按钮中使用“halign='left'”将使文本左对齐,但仅相对于每个按钮;它仍然位于每个按钮的中心。

我的实际应用程序有点大,无法发布,所以这是我根据库存 Kivy 示例制作的一个快速而肮脏的示例。 (我意识到这段代码并不完美......就像我说的又快又脏的例子......但它确实有效!)正如您所看到的,每个按钮上的两行文本彼此对齐,但它们并非全部对齐。谁能建议我该怎么做才能使所有文本在距每个按钮左侧 10px 的位置对齐?我确实在 StackOverflow 上找到了一个相对听起来不错的项目,但它并没有真正回答问题,例如,它似乎更多地涉及在按钮上使用图像。我是 Kivy 的新手,但我已经阅读了教程和文档,并广泛搜索了 Google - 所以任何帮助将不胜感激!

import kivy
kivy.require('1.0.8')

from kivy.app import App
from kivy.core.window import Window
from kivy.uix.button import Button
from kivy.uix.scrollview import ScrollView
from kivy.uix.gridlayout import GridLayout

import random


class ScrollViewApp(App):

    def build(self):
        # create a default grid layout with custom width/height
        layout = GridLayout(cols=1, spacing=10, size_hint=(None, None),
                            width=Window.width)

        # when we add children to the grid layout, its size doesn't change at
        # all. we need to ensure that the height will be the minimum required to
        # contain all the childs. (otherwise, we'll child outside the bounding
        # box of the childs)
        layout.bind(minimum_height=layout.setter('height'))

        # add button into that grid
        for i in range(30):
            btn = Button(text=str(i * random.random()) + '\n' + str(i * random.random()),
                         size=(300, 40),
                         size_hint=(None, None),
                         halign='left')
            layout.add_widget(btn)

        # create a scroll view, with a size < size of the grid
        root = ScrollView(size_hint=(None, None))
        root.size = (Window.width, Window.height)
        root.center = Window.center
        root.add_widget(layout)

        return root

if __name__ == '__main__':

    ScrollViewApp().run()

的文档Button http://kivy.org/docs/api-kivy.uix.button.html#module-kivy.uix.button以“按钮是标签”开头。即使是Widgets http://kivy.org/docs/api-kivy.uix.html没有明确提及他们的血统,你应该记下第二行API doc http://kivy.org/docs/api-kivy.uix.button.html#kivy.uix.button.Button有问题的小部件的。在本例中为“基础:kivy.uix.label.Label”。

这表明该按钮继承自 Label。 (我明确提到这一点是因为查看基类的继承属性的这一部分有时对每个人来说并不直观)。

如果您查看文档中的标签,特别是halign http://kivy.org/docs/api-kivy.uix.label.html?highlight=text%20alignment#kivy.uix.label.Label.halign财产,它要求您使用text_size http://kivy.org/docs/api-kivy.uix.label.html?highlight=text%20alignment#kivy.uix.label.Label.text_size以实现正确的文本对齐。这意味着文本在由text_size http://kivy.org/docs/api-kivy.uix.label.html?highlight=text%20alignment#kivy.uix.label.Label.text_size财产。该属性可以设置为:

a) Widget 的大小。text_size: self.size

b) 小于小部件的尺寸(您正在寻找的)text_size: self.width - dp(10), self.height - dp(10)

c) 一侧不受约束text_size: self.width, None

d) 或两者text_size: None, None

e) 或受限于不同的 Widgettext_size: other_button.size

使用理由text_size就是给用户更多的控制权。 您还应该看看文本对齐示例 https://github.com/kivy/kivy/blob/master/examples/widgets/textalign.py

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kivy按钮文本对齐问题 的相关文章

随机推荐

  • 有人使用 Android NDK 构建过 ZBar 吗?

    我正在尝试将 ZBar 集成到我的 Android 应用程序中 但无法构建本机库 我想知道是否有人以前做过并愿意与我分享 我知道这个问题很老了 但是 ZBar 提供了 android SDK http sourceforge net pro
  • 可以使用单个正则表达式来解析函数参数吗?

    Problem 有一个程序文件 在文件中的某个位置包含以下代码片段 food apples oranges pears tomato 该函数可以包含任意数量的参数 但它们必须是用逗号分隔的字符串 所有参数字符串都是小写单词 我希望能够使用正
  • 我应该如何记录继承的成员? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 考虑一下我有一个复杂的类结构 其中许多元素继承自其他元素 我可能有一个方法GetStuff string stuffName int count
  • 以编程方式检索 iPhone 上的内存使用情况

    我正在尝试以编程方式随时检索我的 iPhone 应用程序正在使用的内存量 是的 我知道 ObjectAlloc Leaks 我对这些不感兴趣 只是想知道是否可以编写一些代码并获取正在使用的字节数并通过 NSLog 报告它 Thanks 要获
  • 在 Swift 4 中调整 UISwitch 的大小

    我想更改 Swift 4 中 UISwitch 的默认大小 我查看了各种选项 但它们都与 v3 相关并且不起作用 请问有人可以建议一个在 Swift 4 中以编程方式执行此操作的示例吗 谢谢你 Edit 我尝试过以下示例 switchTes
  • 如何登录 SailsJS

    登录 SailsJS 的实际语法是什么 文档没有任何内容 但在网站的路线图中找到了以下行 将 Sails log winston 包装器 作为一个单独的模块拉出来 这样它就可以 由水线使用 我想象它是这样的 Sails log Sails
  • 三行模态,固定标题、底行和可滚动的中间行

    我正在尝试创建一个具有顶部 中间和底部的模态 顶部始终是固定高度 底部必须 粘 在底部上 并且可能会有所不同 其中的所有内容和元素都必须从底部构建 因此 如果有一行文本 底部将是该行的高度 如果有 3 或 4 行文本 底部会根据需要向上推
  • 如何在PHP中使用其原始参数调用父类构造函数

    我有这个代码 class A var arr array function construct para echo Not called class B extends A function construct arr new Item 由
  • LOCK_NB 被忽略

    运行此代码两次 fp fopen test test wb if flock fp LOCK NB LOCK EX fwrite fp data echo written sleep 5 else echo skipped ok flock
  • 如何使用 YouTube IFrame Player API 监听时间更改事件?

    我在 YouTube IFrame Player API 文档上找不到任何方法来监听时间变化 因此我可以在 UI 中显示视频的当前时间 持续时间 有没有办法在不轮询的情况下做到这一点getCurrentTime YouTube IFrame
  • Netty Channel.write 线程安全吗?

    我有一个 Netty 应用程序 我希望有多个线程写入通道 我只是想知道 Channel write 是否线程安全 从代码中可以看出 ChannelOutboundBuffer addMessage 方法本身不是线程安全的 然而 写入通道是
  • 如何在 Asyncio 中列出文件? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我希望能够在不阻塞的情况下获取文件列表 但我没有在文档 https docs python org 3 library asyncio
  • Kafka消费者配置/性能问题

    我正在尝试使用 kafka 作为 AWS SQS 的替代品 其动机主要是为了提高性能 其中 kafka 将消除一次拉取 10 条消息且上限为 256kb 的限制 这是我的用例的高级场景 我有一堆爬虫正在发送文档以进行索引 有效负载的大小平均
  • 单元测试构造函数时使用多个断言?

    我正在尝试使用 2 个构造函数对一个类进行单元测试 每个构造函数都有多个设置公共属性的参数 我的问题是 我是否应该只有 2 个具有多个断言的单元测试来检查每个属性是否已设置 或者是否对每个构造函数的每个参数进行测试 Public Perso
  • 有没有办法在CSS中创建canvas元素的3D圆柱体?

    我想将画布呈现为一个圆锥体 你可以像轮子一样双向旋转 这对于 JS CSS3 来说是可能的吗 您应该看看这个新的 CSS3 功能 自定义滤镜 CSS 着色器 这里有一些非常好的演示 比我能更好地描述整个事情 如何在 Chrome 上启用它
  • 具有多个参数的函数方差

    在我们的代码中尝试过类似的操作 但失败了 Func
  • 如何从启用了“以管理员身份运行”的基于 WiX 的安装程序安装桌面快捷方式(到批处理文件)?

    我正在从基于 WiX 的安装程序安装桌面快捷方式 到批处理文件 如何在启用 以管理员身份运行 设置的情况下自动配置此快捷方式 目标操作系统是Windows Server 2008 R2 并且安装程序正在以提升的权限运行 Update 感谢
  • Porter Stemmer 算法未返回预期输出?当修改为def时

    我正在使用PorterStemmer http tartarus org martin PorterStemmer Python 端口 http tartarus org martin PorterStemmer python txt 波特
  • 实体框架 SaveChanges() 与 SaveChangesAsync() 和 Find() 与 FindAsync()

    我一直在寻找上述两对之间的差异 但没有找到任何文章清楚地解释它以及何时使用其中之一 那么有什么区别SaveChanges and SaveChangesAsync 而之间Find and FindAsync 在服务器端 当我们使用Async
  • Kivy按钮文本对齐问题

    我正在尝试在 Kivy 中开发一个电子邮件应用程序 基本上只是作为学习框架内部和外部的练习 我正在尝试创建初始窗口 但遇到了一些绊脚石 这个想法是 它只会在收件箱中显示电子邮件列表 就像移动设备上的任何基本电子邮件应用程序一样 我遇到的问题