2016-07-19 3 views
0

간결하게하기 위해 코드 포즈를하기 전에 문제를 설명하겠습니다. 여기에 간다 :Kivy Screen 클래스의 매우 큰 버튼/큰 버튼

나는 과 Image이라는 두 개의 위젯을 가지고있는 Kivy에서 Screen 클래스를 가지고있다. 후자는 괜찮지 만, 버튼은 매우 대형 있습니다

enter image description here

을 그리고 여기 내 main.py입니다 :

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 파일이다 : 나는 '

<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" 

가 정말이 하나에 빠져 들었어. 당신의 도움을 주셔서 감사합니다.

답변

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