2016-09-02 38 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

謝謝,我忘了我正在使用佈局而不是單個小部件,例如一個圖像。我將尺寸提示設置爲無,並且它工作正常,再次感謝! –