【问题标题】:How to prevent widget's size changing in Kivy?如何防止小部件在 Kivy 中的大小变化?
【发布时间】:2014-07-15 22:33:39
【问题描述】:

我一直在玩this 代码,我发现了一些(可能)奇怪的事情:当我将父级添加到我的类时,大小更改为 [100, 100](参见 cmets):

from random import random, randint

import kivy

kivy.require('1.8.0')

from kivy.config import Config

Config.set('graphics', 'fullscreen', '0')

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.button import Button
from kivy.graphics import Color, Line, Ellipse, Triangle, Rectangle


class MyPaintWidget(Widget):
    def on_touch_down(self, touch):
        with self.canvas:
            Color(random(), 1, 1, mode='hsv')
            touch.ud['line'] = Line(points=(self.width - touch.x, self.height - touch.y))
            print(self.width, self.height)  # It works OK if I return painter below, but it's not if I return parent.

    def on_touch_move(self, touch):
        touch.ud['line'].points += [self.width - touch.x, self.height - touch.y]


class Example(App):
    def build(self):
        parent = Widget()
        painter = MyPaintWidget()
        print(painter.size)  # Shows [100, 100] anyway.
        parent.add_widget(painter)
        return parent  # If I return painter, everything works as I want (except painter.size still shows [100, 100]).


if __name__ == '__main__':
    Example().run()

为什么会这样?我应该如何做对?

【问题讨论】:

    标签: python-3.x widget size kivy python-3.4


    【解决方案1】:

    (100, 100) 是小部件的默认大小。在这种情况下,您的画家具有该大小,因为您从未将其设置为其他任何值。

    即使它的父类是一个会自动移动和调整painter 大小的布局类,它的大小此时仍会读取(100, 100),因为布局还没有来得及运行。此时您通常不应该担心像素值 - 如果您需要其他东西来依赖它们,请使用绑定在第一个更改时自动更新其他东西。 kv 语言使这变得特别容易。

    【讨论】:

    • 那么我如何获取窗口大小并为小部件设置它(例如,没有 kv 语言)?
    • 您可以使用kivy.core.window.Window.size。但是,您可能并不真的想这样做,最好将根小部件设置为会自动调整子级大小的布局类 - 例如BoxLayout.
    • 如果我从未分配过布局的大小,如何获得它? self.size 仍然说 (100, 100)。
    • 我不明白你的意思。
    • 我在一些小部件之间的 BoxLayout 中创建了布局,以 kv 为单位:size_hint_x: Nonewidth: self.height(实际大小为 900 × 900 并在调整大小后发生变化),但 print(self.size) 仍然显示 (100 , 100).
    猜你喜欢
    • 2021-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多