0

スクリーンクラスを作成してそれにウィジェットを追加すると、何らかの理由でkivyで、具体的には、ウィジェットクラスを作成してそのウィジェットクラスを子として追加する場合と比較して、何らかの理由で元の画像よりも10倍大きい画像を取得します画面クラス。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 im new のふりをすると、コード ブロックに追加できません) 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の子として所有していたボタンを追加し、同じ結果、巨大な無応答の画像を追加しました.

4

1 に答える 1

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には、画像に追加して、水平方向と垂直方向の両方の自動サイズ変更を無効にします。これは通常、レイアウトに何かを追加するときに適用されます。

于 2016-09-03T13:25:25.207 に答える