2016-07-19 9 views
0

簡潔にするために、私はコードをポーズする前に問題を説明します。ここに行く:Kivy Screenクラスの中に非常に大きいサイズの/大きいボタン

私は、GridLayoutImageの2つのウィジェットを保持するKivyクラスのScreenクラスを持っています。後者は細かいですが、ボタンが非常に特大のとおりです。

enter image description here

そして、ここでは私のmain.pyだ:私は「

<ScreenManager>: 
    id: screen_manager 

    MainScreen: 
     id: main_screen 
     name: 'MainScreen' 
     manager: screen_manager 

    ReadScreen: 
     id: read_screen 
     name: 'ReadScreen' 
     manager: screen_manager 


<MainScreen>: 

    BackGround: 
     id: back_ground 
     source: 'images\\app_background.jpg' 
     size: root.width, root.height 


    MainButtons: 
     cols: 1 
     pos: root.width/2 - 100, root.height/4 
     size: 20, 10 

     Button: 
      id: button_read 
      text: "Read" 
      on_press: root.callback_read() 

     Button: 
      id: button_add 
      text: "Add" 

     Button: 
      id: button_manage 
      text: "Manage" 

from kivy.app import App 
from kivy.uix.widget import Widget 
from kivy.uix.button import Button 
from kivy.factory import Factory 
from kivy.uix.gridlayout import GridLayout 
from kivy.uix.image import Image 
from kivy.config import Config 
from kivy.lang import Builder 
from kivy.uix.screenmanager import Screen, ScreenManager 
import configparser 

Builder.load_file('kv\MainMain.kv') 

#read configurations 
config = configparser.RawConfigParser() 
config.read('config.ini') 

#read config values 
width = config.getint('Default', 'MAX_WINDOW_WIDTH') 
height = config.getint('Default', 'MAX_WINDOW_HEIGHT') 
border = config.getint('Default', 'BORDERLESS') 

#apply config values 
Config.set('graphics','width', width) 
Config.set('graphics', 'height', height) 
Config.set('graphics', 'borderless', border) 
Config.set('input', 'mouse', 'mouse,multitouch_on_demand') 


#create screen manager 
class ScreenManager(ScreenManager): 
    pass 


#create background widget 
class BackGround(Image): 
    pass 


#image buttons 
class MainButtons(GridLayout): 
    pass 



#create main screen: 
class MainScreen(Screen): 
    pass 


#create main app 
class MainMainApp(App): 
    def build(self): 
     return MainScreen() 

#register class 
Factory.register(MainScreen, cls=MainScreen) 

#run 
if __name__ == '__main__': 
    MainMainApp().run() 

そして、ここでは私のKVファイルです私は本当にこれに夢中になった。ご協力いただきありがとうございます。

答えて

1

これにはsize_hintを使用できます。

from kivy.app import App 
from kivy.uix.gridlayout import GridLayout 
from kivy.lang import Builder 
from kivy.uix.screenmanager import Screen,ScreenManager 

Builder.load_file("my.kv") 

class MainButtons(GridLayout): 
    pass 

class MainScreen(Screen): 
    pass 


class MainMainApp(App): 
    def build(self): 
     self.sm = ScreenManager() 
     self.sm.add_widget(MainScreen(name="main")) 
     return self.sm 


if __name__ == '__main__': 
    MainMainApp().run() 

とkivyファイル:

<MainScreen>: 
    MainButtons: 
     cols: 1 
     rows: 4 
     Label: 
      font_size: "40sp" 
      text: "Something" 

     Button: 
      size_hint: (1,0.1) 
      text: "Read" 

     Button: 
      size_hint: (1,0.1) 
      text: "Add" 

     Button: 
      size_hint: (1,0.1) 
      text: "Manage" 

、出力は次のようになります。ここでは

は例 pyhtonファイルです

enter image description here

そして、あなたがしたい場合ボタンの幅を小さくするには、size_hint_x:Noneを追加します。あなたのkvファイルに、このように。

<MainScreen>: 
    MainButtons: 
     cols: 1 
     rows: 4 
     Label: 
      font_size: "40sp" 
      text: "Something" 

     Button: 
      size_hint: (1,0.1) 
      size_hint_x:None 
      text: "Read" 

     Button: 
      size_hint: (1,0.1) 
      size_hint_x:None 
      text: "Add" 

     Button: 
      size_hint: (1,0.1) 
      size_hint_x:None 
      text: "Manage" 

出力が今のようになります

enter image description here

+0

私は、これは動作しません怖いです。ボタンはまだ巨大です。クラスがちょうどウィジェットだったときはうまくいったけど、今はスクリーンだから、彼らは巨大になった。 – Chubak

+0

@Chubakそれはここで動作します。この例を試してみてください – EL3PHANTEN

+0

はい、クラスがウィジェットであれば問題ありません。しかし、それは私の問題ではなかった。私はScreenクラスを動作させたい。 – Chubak

関連する問題