2013-06-30 29 views
9

Trong Kivy, có cách nào để truyền đối tượng hình ảnh làm nền nút thay vì tên tệp hình ảnh không?Truyền đối tượng hình ảnh làm nền nút trong Kivy

button.background_normal thuộc tính chỉ chấp nhận chuỗi. Tôi muốn tùy chỉnh các thuộc tính hình ảnh, chẳng hạn như allow_stretch = False.

Nếu thành công, làm cách nào tôi có thể chỉ định căn chỉnh hình ảnh bên trong một nút, ví dụ: để làm cho nó liên kết trên cùng bên trái?

+0

Chỉ cần lưu ý allow_stretch làm không tồn tại trong Kivy 1.6 –

Trả lời

12

Nguồn chỉ là thuộc tính của Nút và đó là chuỗi như bạn đã chỉ ra. Bạn muốn có một Widget bên trong một Widget, và đó là cách cơ bản mà Kivy làm việc. Vì vậy, chỉ cần thêm hình ảnh như nó được. Một chút vị trí sẽ làm phần còn lại.

Bạn phải cẩn thận với vị trí. Hãy chắc chắn rằng nó là một phần có thể nhìn thấy và không có gì bao gồm nó. Tôi sử dụng một Nhãn sau khi nút này vì nó có màu trong suốt để bạn có thể thử nghiệm với nó. Ví dụ: nếu vị trí của bạn sai (thử x:0 y:0), bạn có thể thấy nút chuyển đến góc dưới cùng bên trái trong khu vực nhãn.

Những hình ảnh tôi đang sử dụng là Kivy logo:

from kivy.app import App 
from kivy.uix.boxlayout import BoxLayout 
from kivy.lang import Builder 

Builder.load_string(""" 
<ButtonsApp>: 
    orientation: "vertical" 
    Button: 
     text: "B1" 
     Image: 
      source: 'kivy.png' 
      y: self.parent.y + self.parent.height - 250 
      x: self.parent.x 
      size: 250, 250 
      allow_stretch: True 
    Label: 
     text: "A label" 
""") 

class ButtonsApp(App, BoxLayout): 
    def build(self): 
     return self 

if __name__ == "__main__": 
    ButtonsApp().run() 
+0

Cảm ơn bạn, nó hoạt động tuyệt vời. Tôi bằng cách nào đó nghĩ rằng các widget chỉ có thể được thêm vào các widget layout; Tôi không biết rằng họ có thể được thêm vào đầu bất kỳ tiện ích nào khác. – blablatros

+0

Tôi nghĩ rằng ví dụ này nên được bao gồm ngay tại http://kivy.org/docs/api-kivy.uix.button.html vì bây giờ có vẻ như cách duy nhất để đặt hình nền là 'background_normal'. – martin

+0

Tại sao 'pos_hint: {" center_x ": 0.5," center_y ": 0,5}' trong 'Ìmage' không hoạt động? – Nearoo

7

Ngoài câu trả lời toto_tico, bạn có thể xác định vị trí hình ảnh ở trung tâm của các nút như:

Button: 
    id: myButton 
    Image: 
     source: "./buttonImage.PNG" 
     center_x: self.parent.center_x 
     center_y: self.parent.center_y 
Các vấn đề liên quan