在 kivi 中居中文本字段

Posted

技术标签:

【中文标题】在 kivi 中居中文本字段【英文标题】:Centering text fields in kivi 【发布时间】:2021-07-08 11:56:08 【问题描述】:

下面的屏幕截图代表了一个使用 kivy 的工作 Python 程序。但是,kivy 描述符文件可能有错误。我希望两个文本字段(第二行和第三行)居中。

我本以为 anchor_x:'center' 会这样做,但我一定是错过了什么。

你会认为这很容易,但我做不到。 .kv 描述符文件:

# Add two numbers layout code
BoxLayout:
    spacing: 1
    orientation:'vertical'
    pos_hint: 'x': 0, 'y': 0
    background_color: .7,.7,.7,1
    canvas.before:
        Color:
            rgba: .7, .7, .7, 1
        Rectangle:
            size: self.size
            pos: self.pos

ColorLabel:
    text: "Enter two numbers to add"

TextInput:
    id: frnum
    size_hint: (None, .8)
    width: 150
    anchor_x: 'center'

TextInput:
    id: secnum
    size_hint: (None, .8)
    width: 150
    anchor_x: 'center'

# horizontal box contains two buttons
BoxLayout:
    spacing: 10
    orientation:'horizontal'
    canvas.before:
        Color:
            rgba: .7, .7, .7, 1

    GrayButton:
        text: 'Add'
        color: 0,0,0,1
        on_release:
            app.bclick()

    GrayButton:
        text: 'Clear'
        on_release:
            app.cclick()

ColorLabel:
    text: "Sum appears here"
    id: sumlabel

<ColorLabel@Label>:
    color: 0,0,1,1
    size: self.texture_size
    canvas.before:
        Color:
            rgba: .9, .9, .9, 1
        Rectangle:
            pos: self.pos
            size: self.size
    padding_x: 20
    background_color: .7,.7,.7,1

<GrayButton@Button>:
    color: 0,0,0,1
    background_normal: ''
    background_color: .8,.8,.8,1
    padding_horizontal: 20
    size_hint: (0.5,0.7)
    pos_hint: 'x':.2, 'y':.2, 'center_x':.5

from kivy.app import App
from kivy.core.window import Window
from kivy.config import Config


class MainApp(App):
    def build(self):
        #self.title = "Add two numbers"
        Window.size = (300, 200)
        self.load_kv('Bldtest1.kv')

# Add click event
def bclick(self):
    textinput = self.root.ids.frnum
    val1= int(textinput.text)
    tinput = self.root.ids.secnum
    val2 = int(tinput.text)
    sum_label = self.root.ids.sumlabel
    sum_label.text = "Sum is: "+ str(val1+val2)

# Clear button click event
def cclick(self):
    textinput = self.root.ids.frnum
    textinput.text = ''
    tinput = self.root.ids.secnum
    tinput.text = ""
    sum_label = self.root.ids.sumlabel
    sum_label.text =''

MainApp().run()

【问题讨论】:

【参考方案1】:

anchor_x 属性用于AnchorLayout 类,而不是TextInput。尝试替换:

anchor_x: 'center'

与:

pos_hint: 'center_x': 0.5

查看BoxLayout documentation有关位置提示:

位置提示部分有效,具体取决于方向:

如果方向是垂直的:x、right 和 center_x 将被使用。 如果方向是水平的:y、top 和 center_y 将被使用。

【讨论】:

以上是关于在 kivi 中居中文本字段的主要内容,如果未能解决你的问题,请参考以下文章

Python Kivy:在文本输入字段中隐藏虚拟键盘

在 Kivy 中仅启用四行文本输入

第一个 Python/Kivy/KivyMD 应用程序。无法将文本字段中的数据保存到变量 + 数据绑定到 MDList

Kivy 无法使用 ScreenManager 获取文本输入

使用 Intermec 打印语言版本 12 在字段中居中非固定宽度字体

如何在 Kivy 中居中按钮?