2014-04-03 8 views
5

मुझे पता चला कि क्यूटी में हम साथ एक QpushButton बनाने के लिए कुछ मायनों की क्या ज़रूरत है की तरह शैलियाँ करने के लिए एक बटन की पृष्ठभूमि में बदलना:एक अलग आकार और kivy अजगर में छाया प्रभाव आदि

  1. छाया प्रभाव
  2. बना सेटफ्लैट गुणों को सही बनाने के द्वारा फ़्लैट करें।
  3. एक अलग तरह के कर्सर chaning अगर किसी pushButton_18.setCursor है जैसे कि यह पर घूमता (QtGui.QCursor (QtCore.Qt.PointingHandCursor))

मैं भी बटन व्यवहार kivy में समान बनाने के लिए देख रहा हूँ। क्या यह संभव है ? मुझे पता चला कि हम पृष्ठभूमि छवि को बदल सकते हैं गोल आकार Changing the background color of a Button in Kivy

के साथ एक छवि के लिए बदल दिया है, लेकिन इस कि संतोषजनक रूप में बटन अभी भी बहुत सामान्य लग रहा है नहीं है। कोई छाया प्रभावित नहीं है। यहां तक ​​कि जब हम बटन के बाहर कोनों पर क्लिक करते हैं तो बटन का क्लिक होने पर इसका इलाज किया जाता है।

मैं किवी बटन के साथ-साथ लेबल के दस्तावेज के माध्यम से गया हूं और व्यवहार को बदलने और बटन को देखने की कोशिश की है। को प्रभावित

  • एनीमेशन
  • गोल किनारों आदि पृष्ठभूमि में प्रभावित करते हैं

    1. पीछा: कैसे एक बटन नज़र बेहतर हम करने के लिए कोशिश कर सकते हैं बनाने के लिए पर कोई सलाह कर सकते हैं।
    2. हम एनीमेशन के लिए पृष्ठभूमि के रूप में ऐनिमेटेड gif छवियाँ रख सकते हैं (मैं कोशिश की थी कि लेकिन यह अब और एनिमेटेड एकदम चमक)

    नीचे जो मैं सिर्फ Kivy में बटन में और अधिक की खोज के लिए बनाई गई एक कोड है:

    __author__ = 'pbatra' 
    #Good info about background 
    #https://stackoverflow.com/questions/20181250/changing-the-background-color-of-a-button- in-kivy/20181407#20181407 
    
    from kivy.app import App 
    from kivy.lang import Builder 
    from kivy.uix.screenmanager import ScreenManager, Screen 
    from kivy.properties import ObjectProperty 
    from kivy.uix.image import Image 
    from kivy.graphics import Color 
    
    
    gui = ''' 
    <MenuScreen>: 
        canvas.before: 
         BorderImage: 
          # BorderImage behaves like the CSS BorderImage 
          border: 10, 10, 10, 10 
          texture: self.background_image.texture 
          pos: self.pos 
          size: self.size 
        GridLayout: 
         size_hint: .1, .1 
         pos_hint: {'center_x': .5, 'center_y': .5} 
         rows: 1 
         Button: 
          text: 'Play' 
          font_size: 20 
          font_name: 'DroidSans' 
          bold: True 
          italic: True 
          height: 10 
          background_color: (0.5, 0.7, 0.5, 0.9) 
          #Read more about them from documentation 
          background_normal: './images/orange.png' 
          background_down: './images/green.png' 
          border: 30,30,30,30 
          color: (1, .3, .8, .5) 
    
         on_press: self.text = 'Oh yeah' 
    
    ''' 
    
    
    class MenuScreen(Screen): 
        background_image = ObjectProperty(
               Image(
                source='../Examples/examples/widgets/sequenced_images/data/images/button_white_animated.zip', 
                anim_delay=.5)) 
        Builder.load_string(gui) 
        pass 
    
    # Create the screen manager 
    sm = ScreenManager() 
    sm.add_widget(MenuScreen(name='menu')) 
    
    
    class MyJB(App): 
        def build(self): 
         return sm 
    
    if __name__ == '__main__': 
        MyJB().run() 
    
  • उत्तर

    8

    किवी में बटन ButtonBehavior के साथ शुरू होता है जो Label के साथ कैनवास पर बनावट को संभालने के लिए background_normal/down जैसे गुण जोड़ता है।

    यह जानकर आप बस किसी अन्य विजेट के साथ बटनबिनेयर को जोड़ सकते हैं। उदाहरण के लिए।

    from kivy.base import runTouchApp 
    from kivy.lang import Builder 
    
    kv = ''' 
    <[email protected]+AsyncImage> 
    
    FloatLayout: 
        # we don't specify anything here so float layout takes the entire size of the window. 
        ButImage: 
         id: but 
         # take 50% size of the FloatLayout 
         size_hint: .5, .5 
         # Make Button change it's opacity when pressed for visual indication 
         opacity: 1 if self.state == 'normal' else .5 
         source: 'http://www.victoriamorrow.com/sitebuildercontent/sitebuilderpictures/enter_button.gif' 
         # Introduce Label incase you want text on top of the image 
         Label: 
          center: but.center 
          # change text acc to but state 
          text: "Normal" if but.state == 'normal' else 'down' 
    ''' 
    
    if __name__ == '__main__': 
        runTouchApp(Builder.load_string(kv)) 
    

    यहाँ हम सिर्फ ButtonBehavior सेट एक AsyncImage जो अपनी पृष्ठभूमि के लिए वेब से छवि को डाउनलोड करता है के साथ जोड़ा जा करने के लिए।

    आप पृष्ठभूमि

    इस में को प्रभावित ऐनिमेटेड gif या एक .zip अंदर छवियों की सूची में स्रोत को बदलने के रूप में सरल किया जाएगा इस screenshot asyncimage button

    एनीमेशन की तरह कुछ देखना चाहिए। तो यह यहां तक ​​कि पुराने विधि है जो अनिवार्य रूप से किसी भी अधिक की जरूरत नहीं का उपयोग कर एक AnimatedButton वर्ग का एक उदाहरण है से पहले ButtonBehaviors शुरू किए गए थे sequence images example इस पर

    from kivy.base import runTouchApp 
    from kivy.lang import Builder 
    
    
    kv = ''' 
    <[email protected]+AsyncImage> 
    
    FloatLayout: 
        ButImage: 
         id: but 
         size_hint: .5, .5 
         opacity: 1 if self.state == 'normal' else .5 
         allow_stretch: True 
         keep_ratio: False 
         source: 'http://media1.policymic.com/site/article-items/2095/1_gif.gif' 
         Label: 
          center: but.center 
          text: "Normal" if but.state == 'normal' else 'down' 
    
    
    ''' 
    
    if __name__ == '__main__': 
        runTouchApp(Builder.load_string(kv)) 
    

    देखो किया गया था।

    छाया प्रभाव:

    वहाँ यह भी करने के लिए कई तरीके हैं।

    आप या तो विजेट/लेआउट में छाया जोड़ सकते हैं और इस विजेट/लेआउट के शीर्ष पर बटन छाया से कम जगह ले सकते हैं ताकि छाया पर स्पर्श के लिए खाते हो।

    या बटनबैवियर से व्युत्पन्न अपनी खुद की कस्टम बटन बटन बनाएं जो कस्टम टक्कर के लिए केवल सही लौटने के लिए collidepoint विधि को ओवरराइड करता है। विगेट्स के लिए custom collision का उपयोग करने का एक उदाहरण है। आप छवि की keep_data संपत्ति को भी सही पर सेट कर सकते हैं और बाद में यह निर्धारित करने के लिए अल्फा के लिए pixel डेटा जांच सकते हैं कि क्या आप टक्कर के लिए सच वापस करना चाहते हैं।

    गोल किनारों आदि

    सीधे शब्दों में गोल किनारों kivy के साथ एक छवि का उपयोग करें जो कार्यक्षमता के मामले में सीएसएस borderimage के बराबर है BorderImage निर्देश के उपयोग का समर्थन। डिफ़ॉल्ट रूप से किवी का अपना बटन इसका उपयोग करता है। BorderImage की सीमा विशेषता के साथ प्रयास करें और प्रयोग करें।

    +0

    आपका उत्तर वास्तव में उपयोगी और मददगार है। मैं अभी भी यह पता लगाने की कोशिश कर रहा हूं कि जब मैंने background_normal और background_down के लिए .gif छवि का उपयोग करने का प्रयास किया, तो उसने एनीमेशन नहीं दिखाया, लेकिन आपका तरीका यह दिखा रहा है कि एनीमेशन। मैं अभी भी आपकी पोस्ट के लिए छाया प्रभाव सीखने की कोशिश कर रहा हूं .. क्या आपको पता है क्यों .gif ने पृष्ठभूमि_normal या background_down के लिए काम नहीं किया। –

    +0

    डिफ़ॉल्ट रूप से बटन केवल एक कशेरुक निर्देश का उपयोग करता है .. सीमा कैनवास को चित्रित करने के लिए सीमा इमेज जो स्थिर लोड करता है और प्रदर्शित करता है (एनीमेशन के लिए समर्थन नहीं है, आपको इसे मैन्युअल रूप से संभालना होगा)। छवि विजेट हालांकि छवियों के साथ एक gif या azip देने के लिए समर्थन है जो इसे एनिमेट करता है। –

    संबंधित मुद्दे