2016-07-19 10 views
0

Der Kürze halber erkläre ich mein Problem, bevor ich den Code ausspreche. Hier geht es:Extrem übergroße/große Tasten in der Kivy Screen Klasse

Ich habe eine Screen Klasse in Kivy, die zwei Widgets, eine GridLayout und eine Image enthält. Letzteres ist in Ordnung, aber die Tasten sind extrem überdimensionierten:

enter image description here

Und hier ist mein 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() 

Und hier ist meine kv-Datei:

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

I‘ Ich habe diesen hier wirklich überschwemmt. Danke für Ihre Hilfe.

Antwort

1

Sie können size_hint dafür verwenden.

Hier ist ein Beispiel Die pyhton Datei:

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() 

und Kivy Datei:

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

Und Ausgang wird sein:

enter image description here

Und wenn Sie möchten, Schaltflächen, um in der Breite kleiner zu sein, fügen Sie'ize_hint_x: None' hinzu zu deiner KV-Datei, so.

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

Ausgang wird nun sein:

enter image description here

+0

ich Angst habe, das funktioniert nicht. Die Tasten sind immer noch gigantisch. Es funktionierte gut, als die Klasse nur ein Widget war, aber jetzt, wo es ein Bildschirm ist, wurden sie gigantisch. – Chubak

+0

@Chubak es funktioniert hier. Versuchen Sie, dieses Beispiel auszuführen – EL3PHANTEN

+0

Ja, es funktioniert gut, wenn die Klasse ein Widget ist. Aber das war nicht mein Problem an erster Stelle. Ich möchte, dass die Screen-Klasse funktioniert. – Chubak