2013-10-06 6 views
6

मैं एक मूल किवी ऐप बनाने की कोशिश कर रहा हूं। मूल तत्व जोड़ने और ऐप चलाने के बाद, सभी तत्व नीचे बाएं कोने में फंस गए हैं। यह एंड्रॉइड और लिनक्स पर इस तरह दिखता है।किवी - बेस एप्लिकेशन में अजीब संरेखण

Main.py:

from kivy.app import App 
from kivy.uix.widget import Widget 

class SublimeLauncher(Widget): 
    pass 

class SublimeLauncherApp(App): 
    def build(self): 
     return SublimeLauncher() 

if __name__ == "__main__": 
    SublimeLauncherApp().run() 

sublimelauncher.kv:

#:kivy 1.2.0 
<SublimeLauncher>: 
    FloatLayout: 
     BoxLayout: 
      orientation: 'vertical' 
      spacing: 10 
      Label: 
       text: "Enter the path to the folder to open.\nPress OK if you would like to open without a directory" 
      TextInput: 
       id: folderpath 
      Button: 
       text: 'OK' 

मैं पहली बार सिर्फ BoxLayout साथ यह कोशिश की, लेकिन कहीं पढ़ा जड़ विजेट हमेशा एप्लिकेशन रूप में बड़ा है। मैं ऐप का आकार कैसे घोषित करूं? या लेआउट? आप संवाद बॉक्स की तरह कुछ करने के बारे में कैसे जाएंगे?

शायद मुझे कुछ मूलभूत याद आ रही है, लेकिन मुझे इसे समझने की प्रतीत नहीं हो रही है।

संपादित करें: यहाँ मैं क्या देख रहा हूँ है ..

enter image description here

उत्तर

4

अपने जड़ विजेट के रूप में एक लेआउट नहीं है (आपने SublimeLauncherWidget का उत्तराधिकारी बनाया है), यह अपने बच्चों के आकार/पदों को सेट नहीं करता है। तो आपके FloatLayout में डिफ़ॉल्ट हैं, क्योंकि आप उन्हें मैन्युअल रूप से ओवरराइड नहीं करते हैं।

pos: 0, 0 
size: 100, 100 

और हां की कमी बच्चे के इन चूक, उनके size_hint संपत्ति के आधार पर उनके आकार FloatLayout बाधा द्वारा के बाद से।

आप उन्हें और अधिक जगह देना चाहते हैं, क्योंकि Nykakin ने बताया।

इसके अलावा, जैसा कि आपका टेक्स्ट लेबल से बड़ा है (आपने हेलिग और टेक्स्ट_साइज सेट नहीं किया है) इसका बनावट लेबल के केंद्र पर केंद्रित है, और इसलिए इसका कुछ हिस्सा स्क्रीन से बाहर है। आप kivy/example/widgets/textalign.py

5

आपके लेआउट को 100x100 पिक्सल के एक डिफ़ॉल्ट आकार है। गैर डिफ़ॉल्ट आकार

from kivy.app import App 
from kivy.uix.widget import Widget 
from kivy.lang import Builder 

kv = ''' 
<SublimeLauncher>: 
    BoxLayout: 
     canvas: 
      Color: 
       rgb: 1, 0, 0 
      Rectangle: 
       size: self.size 
     orientation: 'vertical' 
     spacing: 10 
     Label: 
      text: "Enter the path to the folder to open.\\nPress OK if you would like to open without a directory" 
     TextInput: 
      id: folderpath 
     Button: 
      text: 'OK' 
''' 
Builder.load_string(kv) 

class SublimeLauncher(Widget): 
    pass 

class SublimeLauncherApp(App): 
    def build(self): 
     return SublimeLauncher() 

if __name__ == "__main__": 
    SublimeLauncherApp().run() 

स्थापना:

kv = ''' 
<SublimeLauncher>: 
    BoxLayout: 
     size: 250, 250 
     canvas: 
      Color: 
       rgb: 1, 0, 0 
      Rectangle: 
       size: self.size 
     orientation: 'vertical' 
     spacing: 10 
     Label: 
      text: "Enter the path to the folder to open.\\nPress OK if you would like to open without a directory" 
     TextInput: 
      id: folderpath 
     Button: 
      text: 'OK' 
''' 
Builder.load_string(kv) 

लेते हुए पूर्ण अंतरिक्ष: आप को देखने के लिए यह कितनी जगह ले करता है यह रंग करने के लिए कोशिश कर सकते हैं

kv = ''' 
<SublimeLauncher>: 
    BoxLayout: 
     size: root.size 
     canvas: 
      Color: 
       rgb: 1, 0, 0 
      Rectangle: 
       size: self.size 
     orientation: 'vertical' 
     spacing: 10 
     Label: 
      text: "Enter the path to the folder to open. \\nPress OK if you would like to open without a directory" 
     TextInput: 
      id: folderpath 
     Button: 
      text: 'OK' 
''' 
Builder.load_string(kv) 
+0

ये दोनों अच्छे जवाब नहीं है।मैंने अभी फैसला किया कि दूसरे जवाब ने इसे थोड़ा बेहतर समझाया। उदाहरणों के लिए धन्यवाद। – sjensen85

5

पर हाल ही में एक छोटी सी चाल के a post लिखते हैं, जब मैं प्रोग्रामिंग इंटरफेस का उपयोग करता हूं। चाल आपको स्क्रीन पर जोड़े गए सभी विजेट (लेआउट शामिल) के आस-पास सीमा दिखाई देगी।

enter image description here

यह विरासत का लाभ लेता है और Kivy नियम सर्व विजेट्स आधार वर्ग अधिलेखित करने के लिए: यह आपके कोड के लिए परिणाम होगा।

<Widget>: 
    canvas.after: 
     Line: 
      rectangle: self.x+1,self.y+1,self.width-1,self.height-1 

इस फ़ाइल की शुरुआत में: तुम बस जोड़ने के लिए

<SublimeLauncher>: 
    FloatLayout: 
     BoxLayout: 
      orientation: 'vertical' 
      spacing: 10 
      Label: 
       text: "Enter the path to the folder to open.\nPress OK if you would like to open without a directory" 
      TextInput: 
       id: folderpath 
      Button: 
       text: 'OK' 
संबंधित मुद्दे