2016-09-02 10 views
0

何らかの理由でスクリーンクラスを作成してウィジェットを追加すると、ウィジェットクラスを作成して追加するときと比べて何らかの理由でオリジナルよりも10倍大きいイメージが得られますスクリーンクラスの子としてのウィジェットクラス。ここではKVファイルの私のコードです: Kivy Screenクラスのバグ

<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 = Falseの、keep_ratio =真)(新しいそのインデント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を取ることはありません。子供。この場合、Imageは自動的にFloatLayoutを満たすようにサイズ変更されます。

これを防ぐには、水平方向と垂直方向の両方で自動サイズ変更を無効にするには、画像にsize_hint: None, Noneを追加します。これは通常、レイアウトに何かを追加するたびに適用されます。

+0

ありがとう、私はレイアウトではなく、単一のウィジェットで作業していたことを忘れていました。画像。私はサイズのヒントをnoneに設定し、うまくいきました。もう一度、ありがとう! –