2016-09-02 37 views
0

由于某些原因,在创建屏幕类并为其添加小部件时,由于某些原因,比起制作小部件类并添加图像时,您获得的图像比原始图像大10倍该小部件类作为屏幕类的孩子。这里是我的KV文件代码:Kivy Screen class bug

<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 =图片(来源= '形象\ Animatio \ glow.gif', allow_stretch =假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()) 

和应用程序在运行我的主要文件没有看到需要发布。但重要的是,应用程序的根类是ScreenManager

编辑:我搞砸了一下,我在python中做了这件事,但我清除了GenericButton的子项,并添加了GenericButton用作拥有子项的按钮StartScreen和相同的结果,一个巨大的无响应的图像。

回答

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

我没有检查它是否引起你的具体问题,而是因为它的父(FloatLayout)是一个布局类是自动设置的大小和位置,这里的图片不采取大小为100,100的儿童。在这种情况下,图像将自动调整大小以填充FloatLayout。

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

+0

谢谢,我忘了我正在使用布局而不是单个小部件,例如一个图像。我将尺寸提示设置为无,并且它工作正常,再次感谢! –