如何使用kivy更改应用程序的画布或窗口大小

时间:2014-07-28 03:18:54

标签: kivy

如何使用Kivy更改窗口的大小。我一直在四处搜寻,除了窗口大小之外,我几乎可以改变所有东西。

从示例图片文件中: main.py

#!/usr/bin/kivy
'''
Pictures demo
=============

This is a basic picture viewer, using the scatter widget.
'''

import kivy
kivy.require('1.0.6')

from glob import glob
from random import randint
from os.path import join, dirname
from kivy.app import App
from kivy.logger import Logger
from kivy.uix.scatter import Scatter
from kivy.properties import StringProperty
# FIXME this shouldn't be necessary
from kivy.core.window import Window


class Picture(Scatter):
    '''Picture is the class that will show the image with a white border and a
    shadow. They are nothing here because almost everything is inside the
    picture.kv. Check the rule named <Picture> inside the file, and you'll see
    how the Picture() is really constructed and used.

    The source property will be the filename to show.
    '''

    source = StringProperty(None)


class PicturesApp(App):

    def build(self):

        # the root is created in pictures.kv
        root = self.root

        # get any files into images directory
        curdir = dirname(__file__)
        for filename in glob(join(curdir, 'images', '*')):
            try:
                # load the image
                picture = Picture(source=filename, rotation=randint(-30,30))
                # add to the main field
                root.add_widget(picture)
            except Exception as e:
                Logger.exception('Pictures: Unable to load <%s>' % filename)

    def on_pause(self):
        return True


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

pictures.kv

#:kivy 1.0
#:import kivy kivy
#:import win kivy.core.window

FloatLayout:
    canvas:
        Color:
            rgb: 1, 1, 1
        Rectangle:
            source: 'data/images/background.jpg'
            size: self.size

    BoxLayout:
        padding: 10
        spacing: 10
        size_hint: 1, None
        pos_hint: {'top': 1}
        height: 44
        Image:
            size_hint: None, None
            size: 24, 24
            source: 'data/logo/kivy-icon-24.png'
        Label:
            height: 24
            text_size: self.width, None
            color: (1, 1, 1, .8)
            text: 'Kivy %s - Pictures' % kivy.__version__



<Picture>:
    # each time a picture is created, the image can delay the loading
    # as soon as the image is loaded, ensure that the center is changed
    # to the center of the screen.
    on_size: self.center = win.Window.center
    size: image.size
    size_hint: None, None

    Image:
        id: image
        source: root.source

        # create initial image to be 400 pixels width
        size: 400, 400 / self.image_ratio

        # add shadow background
        canvas.before:
            Color:
                rgba: 1,1,1,1
            BorderImage:
                source: 'shadow32.png'
                border: (36,36,36,36)
                size:(self.width+72, self.height+72)
                pos: (-36,-36)

我希望能够在FloatLayout或Canvas中放置一个大小标签来调整窗口大小,但它似乎不起作用。

如何在应用程序运行之前确定画布(或包含窗口 - 可能是我在错误的条件下搜索)的大小?

CNC中 我发现在.py的includes部分中添加以下内容:

from kivy.config import Config 
Config.set('graphics', 'width', '640') 
Config.set('graphics', 'height', '1163')

有没有办法只使用.kv文件?

3 个答案:

答案 0 :(得分:8)

不,大小不能用kv设定。您可以像上面那样使用Config进行设置,也可以稍后通过设置Window对象的大小来更改窗口大小:

from kivy.core.window import Window
Window.size = (640, 1163)

答案 1 :(得分:3)

要管理窗口配置,您可以使用源文件顶部的导入from kivy.config import Config

from kivy.config import Config
Config.set('graphics', 'resizable', '0')
Config.set('graphics', 'width', '640')
Config.set('graphics', 'height', '480')

答案 2 :(得分:1)

不要使用

from kivy.core.window import Window

这使得这些不起作用

Config.set('graphics', 'width', '200')
Config.set('graphics', 'height', '400')
相关问题