首页 > 解决方案 > 在 Kivy 中更改窗口大小时如何更改小部件的大小?

问题描述

我是一个尝试做计算器的python初学者。我需要帮助解决一个问题。当我运行应用程序并通过拖动鼠标调整窗口大小时,小部件不会调整到窗口的大小并且位于窗口的末尾。我试图返回 FloatLayout 而不是 KalkulackaLayout 类,它以我想要的方式工作。但是当我返回类 KalkulackaLayout 时,它不起作用,我需要返回这个类。

蟒蛇文件:

from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button
from kivy.uix.widget import Widget

class KalkulackaLayout(Widget):
    def button_cislo(self, cislo):
        pred = self.ids.kalkulacka_input.text

        if pred == "0":
            self.ids.kalkulacka_input.text = ""
            self.ids.kalkulacka_input.text = f"{cislo}"

        else:
            self.ids.kalkulacka_input.text = f"{pred}{cislo}"

    def znamenko(self, znamenko):
        pred = self.ids.kalkulacka_input.text
        self.ids.kalkulacka_input.text = f"{pred}{znamenko}"

    def vymazat(self):
        self.ids.kalkulacka_input.text = ""

    def vypocitej(self):
        pred = self.ids.kalkulacka_input.text
        try:
            vysledek = eval(pred)
            self.ids.kalkulacka_input.text = str(vysledek)
        except:
            self.ids.kalkulacka_input.text = "ERROR!"

    pass

class Kalkulacka(App):
    def build(self):
        return KalkulackaLayout()

if __name__=="__main__":
    Kalkulacka().run()

.kv 文件:

<KalkulackaLayout>
    FloatLayout:
        size:300,300
        Button:
            text: "1"
            size_hint:0.5,0.5
            pos_hint: {"bottom":0.1}
            on_press: root.button_cislo(1)

        Button:
            text: "2"
            size_hint:0.5,0.5
            pos_hint:{"right": 1, "bottom": 0.1}
            on_press: root.button_cislo(2)

        Button:
            text: "3"
            size_hint:0.5,0.5
            pos_hint:{"right": 1.5, "bottom": 0.1}
            on_press: root.button_cislo(3)

        Button:
            text: "÷"
            size_hint:0.5,0.5
            pos_hint:{"right": 2, "bottom": 0.1}
            on_press: root.znamenko("/")

        Button:
            text: "-"
            size_hint:0.5,0.5
            pos_hint:{"right": 2.5, "bottom": 0.1}
            on_press: root.znamenko("-")

        Button:
            text: "4"
            size_hint:0.5,0.5
            pos_hint:{"top": 1}
            on_press: root.button_cislo(4)

        Button:
            text: "5"
            size_hint:0.5,0.5
            pos_hint:{"right": 1, "top": 1}
            on_press: root.button_cislo(5)

        Button:
            text: "6"
            size_hint:0.5,0.5
            pos_hint:{"right": 1.5, "top": 1}
            on_press: root.button_cislo(6)

        Button:
            text: "x"
            size_hint:0.5,0.5
            pos_hint:{"right": 2, "top": 1}
            on_press: root.znamenko("*")

        Button:
            text: "+"
            size_hint:0.5,0.5
            pos_hint:{"right": 2.5, "top": 1}
            on_press: root.znamenko("+")

        Button:
            text: "7"
            size_hint:0.5,0.5
            pos_hint:{"top": 1.5}
            on_press: root.button_cislo(7)

        Button:
            text: "8"
            size_hint:0.5,0.5
            pos_hint:{"right": 1, "top": 1.5}
            on_press: root.button_cislo(8)

        Button:
            text: "9"
            size_hint:0.5,0.5
            pos_hint:{"right": 1.5, "top": 1.5}
            on_press: root.button_cislo(9)

        Button:
            text: "="
            size_hint:0.5,0.5
            pos_hint:{"right": 2, "top": 1.5}
            on_press: root.vypocitej()

        Button:
            text: "C"
            size_hint:0.5,0.5
            pos_hint:{"right": 2.5, "top": 1.5}
            on_press: root.vymazat()

        TextInput:
            text: ""
            size_hint: 2.667,0.25
            font_size: 60
            pos_hint: {"top":2, "right":2.667}
            id: kalkulacka_input

标签: pythonkivy

解决方案


class KalkulackaLayout(Widget):

不是从 Widget 继承,而是从像BoxLayout这样的布局类继承,当它自己的大小发生变化时,它会自动重新定位其子级。


推荐阅读