绝望画面 class 错误

Kivy Screen class bug

出于某种原因,在 kivy 中,当你创建一个屏幕 class 并向其添加一个小部件时,特别是图像,与你制作小部件时相比,由于某种原因,你得到的图像比原始图像大 10 倍 class 并将该小部件 class 作为子项添加到屏幕 class。这是我的 kv 文件代码:

<StartScreen>
    # Start Screen
    name:'Start'
    orientation: 'vertical'
    FloatLayout:
    id: Start_Layout
        Image:
            id: Start_Background
            source: r'Images\Battle.jpg'
            keep_ratio: True
            allow_stretch: True
            size: root.size

<MainScreen>
    name: 'Main'
    orientation: 'vertical'
    FloatLayout:
        Image:
            source: r'Images\Button.png'
            allow_stretch: True
            keep_ratio: False
            size: 100, 100

以及 python gui 文件...

from kivy.uix.widget import Widget
from kivy.uix.image import Image
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.animation import Animation
from kivy.uix.screenmanager import ScreenManager, Screen

from kivy.clock import Clock

from kivy.graphics.context_instructions import Color
from kivy.graphics.vertex_instructions import *

from kivy.core.window import Window

from kivy.app import App

from kivy.lang import Builder

import kivy

kivy.require('1.9.1')

VERSION = '1.9.1'


class GenericButton(Widget):
    Builder.load_file('Button.kv')
    def __init__(self, **kwargs):
        super(GenericButton, self).__init__(**kwargs)
        self.Button = self.ids['Button']
        self.size = Window.size

    def on_touch_down(self, touch):
        self.Button.source = r'Images\ButtonPressed.png'

    def on_touch_up(self, touch):
        self.Button.source = r'Images\Button.png'

class wid(Widget):
    def __init__(self, **kwargs):
        super(wid, self).__init__(**kwargs)

self.Button = Image(source='Images\Animatio\glow.gif', allow_stretch=False, keep_ratio=True) (假装它的缩进 cus 是新的,它不会让我将它添加到代码块) self.add_widget(self.Button)

class StartScreen(Screen):
    def __init__(self, **kwargs):
        super(StartScreen, self).__init__(**kwargs)
        #self.Layout = self.ids['Start_Layout']
        #self.size = Window.size
    #self.Layout.add_widget(GenericButton())
    #self.ids['Start_Button'] = self.Layout.children[0]
    print self.ids
   #print self.ids.Start_Button.size
    print self.size[0]/2, self.size[1]/2

class MainScreen(Screen):
    def __init__(self, **kwargs):
        super(MainScreen, self).__init__(**kwargs)
        self.size = Window.size

    def on_touch_down(self, touch):
        self.Button.source = r'Images\ButtonPressed.png'


    def on_touch_up(self, touch):
        self.Button.source = r'Images\Button.png'


class ScreenManager(ScreenManager):
    def __init__(self, **kwargs):
        super(MCGMScreenManager, self).__init__(**kwargs)
        Builder.load_file('Gui.kv')
        self.add_widget(StartScreen())
        self.add_widget(MainScreen())

应用程序在主文件中运行,我认为不需要 post。但重要的是应用根目录 class 是 ScreenManager

编辑:我搞砸了一点,我在 python 中做了这个,但我清除了 GenericButton 的子级并添加了 GenericButton 曾经作为 StartScreen 的子级拥有的按钮,结果相同,一个巨大的无响应图片。

<MainScreen>
    name: 'Main'
    orientation: 'vertical'
    FloatLayout:
        Image:
            source: r'Images\Button.png'
            allow_stretch: True
            keep_ratio: False
            size: 100, 100

我没有检查它是否会导致您的特定问题,但此处的图片尺寸不是 100, 100,因为它的 parent (FloatLayout) 是一种自动设置的布局 class children 的大小和位置。在这种情况下,图像将自动调整大小以填充 FloatLayout。

为防止这种情况,请将 size_hint: None, None 添加到图像,以禁用水平和垂直方向的自动调整大小。这通常在您向布局添加内容时适用。