Ứng dụng di động phụ trợ Python

Ngày nay, các nhà phát triển có nhiều khả năng đang làm việc trên một ứng dụng di động hoặc web. Python không có khả năng phát triển di động tích hợp, nhưng có những gói bạn có thể sử dụng để tạo ứng dụng di động, như Kivy, PyQt hoặc thậm chí là thư viện Toga của Beeware

Các thư viện này đều là những người chơi chính trong không gian di động Python. Tuy nhiên, có một số lợi ích bạn sẽ thấy nếu chọn tạo ứng dụng di động với Kivy. Ứng dụng của bạn không chỉ trông giống nhau trên tất cả các nền tảng mà còn không cần phải biên dịch mã của mình sau mỗi thay đổi. Hơn nữa, bạn sẽ có thể sử dụng cú pháp rõ ràng của Python để xây dựng các ứng dụng của mình

Trong hướng dẫn này, bạn sẽ học cách

  • Làm việc với các vật dụng Kivy
  • Bố trí giao diện người dùng
  • Thêm sự kiện
  • Sử dụng ngôn ngữ KV
  • Tạo một ứng dụng máy tính
  • Đóng gói ứng dụng của bạn cho iOS, Android, Windows và macOS

Hướng dẫn này giả định rằng bạn đã quen thuộc với lập trình hướng đối tượng. Nếu chưa, hãy xem Lập trình hướng đối tượng [OOP] trong Python 3

Bắt đầu nào

Tải xuống miễn phí. Nhận một chương mẫu từ Thủ thuật Python. Cuốn sách chỉ cho bạn các phương pháp hay nhất về Python với các ví dụ đơn giản mà bạn có thể áp dụng ngay lập tức để viết mã Pythonic + đẹp hơn

Hiểu về Kivy Framework

Kivy được phát hành lần đầu tiên vào đầu năm 2011. Khung Python đa nền tảng này có thể được triển khai cho Windows, Mac, Linux và Raspberry Pi. Nó hỗ trợ các sự kiện cảm ứng đa điểm ngoài các đầu vào bàn phím và chuột thông thường. Kivy thậm chí còn hỗ trợ tăng tốc GPU cho đồ họa của nó, vì chúng được xây dựng bằng OpenGL ES2. Dự án sử dụng giấy phép MIT, vì vậy bạn có thể sử dụng thư viện này cho phần mềm thương mại và miễn phí

Khi bạn tạo ứng dụng với Kivy, bạn đang tạo Giao diện người dùng tự nhiên hoặc NUI. Ý tưởng đằng sau Giao diện người dùng tự nhiên là người dùng có thể dễ dàng học cách sử dụng phần mềm của bạn mà không cần hướng dẫn

Kivy không cố gắng sử dụng các công cụ hoặc điều khiển gốc. Tất cả các vật dụng của nó được vẽ tùy chỉnh. Điều này có nghĩa là các ứng dụng Kivy sẽ giống nhau trên tất cả các nền tảng. Tuy nhiên, điều đó cũng có nghĩa là giao diện ứng dụng của bạn sẽ khác với ứng dụng gốc của người dùng. Đây có thể là một lợi ích hoặc một nhược điểm, tùy thuộc vào đối tượng của bạn

Loại bỏ các quảng cáo

Cài đặt Kivy

Kivy có nhiều phụ thuộc, vì vậy bạn nên cài đặt nó vào môi trường ảo Python. Bạn có thể sử dụng thư viện

$ python -m pip install kivy
5 tích hợp sẵn của Python hoặc gói
$ python -m pip install kivy
6. Nếu bạn chưa từng sử dụng môi trường ảo Python trước đây, thì hãy xem Môi trường ảo Python. sơn lót

Đây là cách bạn có thể tạo môi trường ảo Python

$ python3 -m venv my_kivy_project

Điều này sẽ sao chép tệp thực thi Python 3 của bạn vào một thư mục có tên là

$ python -m pip install kivy
7 và thêm một vài thư mục con khác vào thư mục đó

Để sử dụng môi trường ảo của bạn, bạn cần kích hoạt nó. Trên Mac và Linux, bạn có thể làm điều đó bằng cách thực hiện thao tác sau trong thư mục

$ python -m pip install kivy
7

$ source bin/activate

Lệnh cho Windows cũng tương tự, nhưng vị trí của tập lệnh kích hoạt nằm trong thư mục

$ python -m pip install kivy
9 thay vì
from kivy.app import App
from kivy.uix.label import Label

class MainApp[App]:
    def build[self]:
        label = Label[text='Hello from Kivy',
                      size_hint=[.5, .5],
                      pos_hint={'center_x': .5, 'center_y': .5}]

        return label

if __name__ == '__main__':
    app = MainApp[]
    app.run[]
0

Bây giờ bạn đã kích hoạt môi trường ảo Python, bạn có thể chạy

from kivy.app import App
from kivy.uix.label import Label

class MainApp[App]:
    def build[self]:
        label = Label[text='Hello from Kivy',
                      size_hint=[.5, .5],
                      pos_hint={'center_x': .5, 'center_y': .5}]

        return label

if __name__ == '__main__':
    app = MainApp[]
    app.run[]
1 để cài đặt Kivy. Trên Linux và Mac, bạn sẽ chạy lệnh sau

$ python -m pip install kivy

Trên Windows, cài đặt phức tạp hơn một chút. Kiểm tra tài liệu chính thức để biết cách cài đặt. [Người dùng Mac cũng có thể tải xuống tệp

from kivy.app import App
from kivy.uix.label import Label

class MainApp[App]:
    def build[self]:
        label = Label[text='Hello from Kivy',
                      size_hint=[.5, .5],
                      pos_hint={'center_x': .5, 'center_y': .5}]

        return label

if __name__ == '__main__':
    app = MainApp[]
    app.run[]
2 và cài đặt Kivy theo cách đó. ]

Nếu bạn gặp bất kỳ sự cố nào khi cài đặt Kivy trên nền tảng của mình, hãy xem trang tải xuống Kivy để biết thêm

Làm việc với Widget Kivy

Tiện ích là một điều khiển trên màn hình mà người dùng sẽ tương tác với. Tất cả các bộ công cụ giao diện người dùng đồ họa đều đi kèm với một bộ tiện ích. Một số tiện ích phổ biến mà bạn có thể đã sử dụng bao gồm các nút, hộp tổ hợp và tab. Kivy có nhiều tiện ích được tích hợp trong khuôn khổ của nó

Chạy chương trình “Xin chào, Kivy. " Chương trình

Để xem Kivy hoạt động như thế nào, hãy xem phần sau “Xin chào, Thế giới. " đăng kí

from kivy.app import App
from kivy.uix.label import Label

class MainApp[App]:
    def build[self]:
        label = Label[text='Hello from Kivy',
                      size_hint=[.5, .5],
                      pos_hint={'center_x': .5, 'center_y': .5}]

        return label

if __name__ == '__main__':
    app = MainApp[]
    app.run[]

Mỗi ứng dụng Kivy cần phải phân lớp

from kivy.app import App
from kivy.uix.label import Label

class MainApp[App]:
    def build[self]:
        label = Label[text='Hello from Kivy',
                      size_hint=[.5, .5],
                      pos_hint={'center_x': .5, 'center_y': .5}]

        return label

if __name__ == '__main__':
    app = MainApp[]
    app.run[]
3 và ghi đè lên
from kivy.app import App
from kivy.uix.label import Label

class MainApp[App]:
    def build[self]:
        label = Label[text='Hello from Kivy',
                      size_hint=[.5, .5],
                      pos_hint={'center_x': .5, 'center_y': .5}]

        return label

if __name__ == '__main__':
    app = MainApp[]
    app.run[]
4. Đây là nơi bạn sẽ đặt mã giao diện người dùng của mình hoặc thực hiện lệnh gọi đến các chức năng khác xác định mã giao diện người dùng của bạn. Trong trường hợp này, bạn tạo một tiện ích con
from kivy.app import App
from kivy.uix.label import Label

class MainApp[App]:
    def build[self]:
        label = Label[text='Hello from Kivy',
                      size_hint=[.5, .5],
                      pos_hint={'center_x': .5, 'center_y': .5}]

        return label

if __name__ == '__main__':
    app = MainApp[]
    app.run[]
5 và chuyển vào nó
from kivy.app import App
from kivy.uix.label import Label

class MainApp[App]:
    def build[self]:
        label = Label[text='Hello from Kivy',
                      size_hint=[.5, .5],
                      pos_hint={'center_x': .5, 'center_y': .5}]

        return label

if __name__ == '__main__':
    app = MainApp[]
    app.run[]
6,
from kivy.app import App
from kivy.uix.label import Label

class MainApp[App]:
    def build[self]:
        label = Label[text='Hello from Kivy',
                      size_hint=[.5, .5],
                      pos_hint={'center_x': .5, 'center_y': .5}]

        return label

if __name__ == '__main__':
    app = MainApp[]
    app.run[]
7 và
from kivy.app import App
from kivy.uix.label import Label

class MainApp[App]:
    def build[self]:
        label = Label[text='Hello from Kivy',
                      size_hint=[.5, .5],
                      pos_hint={'center_x': .5, 'center_y': .5}]

        return label

if __name__ == '__main__':
    app = MainApp[]
    app.run[]
8. Hai đối số cuối cùng này không bắt buộc

from kivy.app import App
from kivy.uix.label import Label

class MainApp[App]:
    def build[self]:
        label = Label[text='Hello from Kivy',
                      size_hint=[.5, .5],
                      pos_hint={'center_x': .5, 'center_y': .5}]

        return label

if __name__ == '__main__':
    app = MainApp[]
    app.run[]
7 cho Kivy biết tỷ lệ sử dụng khi tạo tiện ích. Phải mất hai số

  1. Số đầu tiên là gợi ý kích thước
    [INFO   ] [Logger      ] Record log in /home/mdriscoll/.kivy/logs/kivy_19-06-07_2.txt
    [INFO   ] [Kivy        ] v1.11.0
    [INFO   ] [Kivy        ] Installed at "/home/mdriscoll/code/test/lib/python3.6/site-packages/kivy/__init__.py"
    [INFO   ] [Python      ] v3.6.7 [default, Oct 22 2018, 11:32:17]
    [GCC 8.2.0]
    [INFO   ] [Python      ] Interpreter at "/home/mdriscoll/code/test/bin/python"
    [INFO   ] [Factory     ] 184 symbols loaded
    [INFO   ] [Image       ] Providers: img_tex, img_dds, img_sdl2, img_gif [img_pil, img_ffpyplayer ignored]
    [INFO   ] [Text        ] Provider: sdl2[['text_pango'] ignored]
    [INFO   ] [Window      ] Provider: sdl2[['window_egl_rpi'] ignored]
    [INFO   ] [GL          ] Using the "OpenGL" graphics system
    [INFO   ] [GL          ] Backend used 
    [INFO   ] [GL          ] OpenGL version 
    [INFO   ] [GL          ] OpenGL vendor 
    [INFO   ] [GL          ] OpenGL renderer 
    [INFO   ] [GL          ] OpenGL parsed version: 4, 6
    [INFO   ] [GL          ] Shading version 
    [INFO   ] [GL          ] Texture max size 
    [INFO   ] [GL          ] Texture max units 
    [INFO   ] [Window      ] auto add sdl2 input provider
    [INFO   ] [Window      ] virtual keyboard not allowed, single mode, not docked
    [INFO   ] [Base        ] Start application main loop
    [INFO   ] [GL          ] NPOT texture support is available
    
    0 và đề cập đến chiều rộng của điều khiển
  2. Số thứ hai là gợi ý kích thước
    [INFO   ] [Logger      ] Record log in /home/mdriscoll/.kivy/logs/kivy_19-06-07_2.txt
    [INFO   ] [Kivy        ] v1.11.0
    [INFO   ] [Kivy        ] Installed at "/home/mdriscoll/code/test/lib/python3.6/site-packages/kivy/__init__.py"
    [INFO   ] [Python      ] v3.6.7 [default, Oct 22 2018, 11:32:17]
    [GCC 8.2.0]
    [INFO   ] [Python      ] Interpreter at "/home/mdriscoll/code/test/bin/python"
    [INFO   ] [Factory     ] 184 symbols loaded
    [INFO   ] [Image       ] Providers: img_tex, img_dds, img_sdl2, img_gif [img_pil, img_ffpyplayer ignored]
    [INFO   ] [Text        ] Provider: sdl2[['text_pango'] ignored]
    [INFO   ] [Window      ] Provider: sdl2[['window_egl_rpi'] ignored]
    [INFO   ] [GL          ] Using the "OpenGL" graphics system
    [INFO   ] [GL          ] Backend used 
    [INFO   ] [GL          ] OpenGL version 
    [INFO   ] [GL          ] OpenGL vendor 
    [INFO   ] [GL          ] OpenGL renderer 
    [INFO   ] [GL          ] OpenGL parsed version: 4, 6
    [INFO   ] [GL          ] Shading version 
    [INFO   ] [GL          ] Texture max size 
    [INFO   ] [GL          ] Texture max units 
    [INFO   ] [Window      ] auto add sdl2 input provider
    [INFO   ] [Window      ] virtual keyboard not allowed, single mode, not docked
    [INFO   ] [Base        ] Start application main loop
    [INFO   ] [GL          ] NPOT texture support is available
    
    1 và đề cập đến chiều cao của điều khiển

Cả hai số này có thể nằm trong khoảng từ 0 đến 1. Giá trị mặc định cho cả hai gợi ý là 1. Bạn cũng có thể sử dụng

from kivy.app import App
from kivy.uix.label import Label

class MainApp[App]:
    def build[self]:
        label = Label[text='Hello from Kivy',
                      size_hint=[.5, .5],
                      pos_hint={'center_x': .5, 'center_y': .5}]

        return label

if __name__ == '__main__':
    app = MainApp[]
    app.run[]
8 để định vị tiện ích con. Trong khối mã ở trên, bạn yêu cầu Kivy căn giữa tiện ích trên trục x và y

Để làm cho ứng dụng chạy, bạn khởi tạo lớp

[INFO   ] [Logger      ] Record log in /home/mdriscoll/.kivy/logs/kivy_19-06-07_2.txt
[INFO   ] [Kivy        ] v1.11.0
[INFO   ] [Kivy        ] Installed at "/home/mdriscoll/code/test/lib/python3.6/site-packages/kivy/__init__.py"
[INFO   ] [Python      ] v3.6.7 [default, Oct 22 2018, 11:32:17]
[GCC 8.2.0]
[INFO   ] [Python      ] Interpreter at "/home/mdriscoll/code/test/bin/python"
[INFO   ] [Factory     ] 184 symbols loaded
[INFO   ] [Image       ] Providers: img_tex, img_dds, img_sdl2, img_gif [img_pil, img_ffpyplayer ignored]
[INFO   ] [Text        ] Provider: sdl2[['text_pango'] ignored]
[INFO   ] [Window      ] Provider: sdl2[['window_egl_rpi'] ignored]
[INFO   ] [GL          ] Using the "OpenGL" graphics system
[INFO   ] [GL          ] Backend used 
[INFO   ] [GL          ] OpenGL version 
[INFO   ] [GL          ] OpenGL vendor 
[INFO   ] [GL          ] OpenGL renderer 
[INFO   ] [GL          ] OpenGL parsed version: 4, 6
[INFO   ] [GL          ] Shading version 
[INFO   ] [GL          ] Texture max size 
[INFO   ] [GL          ] Texture max units 
[INFO   ] [Window      ] auto add sdl2 input provider
[INFO   ] [Window      ] virtual keyboard not allowed, single mode, not docked
[INFO   ] [Base        ] Start application main loop
[INFO   ] [GL          ] NPOT texture support is available
3 của mình và sau đó gọi
[INFO   ] [Logger      ] Record log in /home/mdriscoll/.kivy/logs/kivy_19-06-07_2.txt
[INFO   ] [Kivy        ] v1.11.0
[INFO   ] [Kivy        ] Installed at "/home/mdriscoll/code/test/lib/python3.6/site-packages/kivy/__init__.py"
[INFO   ] [Python      ] v3.6.7 [default, Oct 22 2018, 11:32:17]
[GCC 8.2.0]
[INFO   ] [Python      ] Interpreter at "/home/mdriscoll/code/test/bin/python"
[INFO   ] [Factory     ] 184 symbols loaded
[INFO   ] [Image       ] Providers: img_tex, img_dds, img_sdl2, img_gif [img_pil, img_ffpyplayer ignored]
[INFO   ] [Text        ] Provider: sdl2[['text_pango'] ignored]
[INFO   ] [Window      ] Provider: sdl2[['window_egl_rpi'] ignored]
[INFO   ] [GL          ] Using the "OpenGL" graphics system
[INFO   ] [GL          ] Backend used 
[INFO   ] [GL          ] OpenGL version 
[INFO   ] [GL          ] OpenGL vendor 
[INFO   ] [GL          ] OpenGL renderer 
[INFO   ] [GL          ] OpenGL parsed version: 4, 6
[INFO   ] [GL          ] Shading version 
[INFO   ] [GL          ] Texture max size 
[INFO   ] [GL          ] Texture max units 
[INFO   ] [Window      ] auto add sdl2 input provider
[INFO   ] [Window      ] virtual keyboard not allowed, single mode, not docked
[INFO   ] [Base        ] Start application main loop
[INFO   ] [GL          ] NPOT texture support is available
4. Khi bạn làm như vậy, bạn sẽ thấy như sau trên màn hình của bạn

Kivy cũng xuất ra rất nhiều văn bản tới

[INFO   ] [Logger      ] Record log in /home/mdriscoll/.kivy/logs/kivy_19-06-07_2.txt
[INFO   ] [Kivy        ] v1.11.0
[INFO   ] [Kivy        ] Installed at "/home/mdriscoll/code/test/lib/python3.6/site-packages/kivy/__init__.py"
[INFO   ] [Python      ] v3.6.7 [default, Oct 22 2018, 11:32:17]
[GCC 8.2.0]
[INFO   ] [Python      ] Interpreter at "/home/mdriscoll/code/test/bin/python"
[INFO   ] [Factory     ] 184 symbols loaded
[INFO   ] [Image       ] Providers: img_tex, img_dds, img_sdl2, img_gif [img_pil, img_ffpyplayer ignored]
[INFO   ] [Text        ] Provider: sdl2[['text_pango'] ignored]
[INFO   ] [Window      ] Provider: sdl2[['window_egl_rpi'] ignored]
[INFO   ] [GL          ] Using the "OpenGL" graphics system
[INFO   ] [GL          ] Backend used 
[INFO   ] [GL          ] OpenGL version 
[INFO   ] [GL          ] OpenGL vendor 
[INFO   ] [GL          ] OpenGL renderer 
[INFO   ] [GL          ] OpenGL parsed version: 4, 6
[INFO   ] [GL          ] Shading version 
[INFO   ] [GL          ] Texture max size 
[INFO   ] [GL          ] Texture max units 
[INFO   ] [Window      ] auto add sdl2 input provider
[INFO   ] [Window      ] virtual keyboard not allowed, single mode, not docked
[INFO   ] [Base        ] Start application main loop
[INFO   ] [GL          ] NPOT texture support is available
5

[INFO   ] [Logger      ] Record log in /home/mdriscoll/.kivy/logs/kivy_19-06-07_2.txt
[INFO   ] [Kivy        ] v1.11.0
[INFO   ] [Kivy        ] Installed at "/home/mdriscoll/code/test/lib/python3.6/site-packages/kivy/__init__.py"
[INFO   ] [Python      ] v3.6.7 [default, Oct 22 2018, 11:32:17]
[GCC 8.2.0]
[INFO   ] [Python      ] Interpreter at "/home/mdriscoll/code/test/bin/python"
[INFO   ] [Factory     ] 184 symbols loaded
[INFO   ] [Image       ] Providers: img_tex, img_dds, img_sdl2, img_gif [img_pil, img_ffpyplayer ignored]
[INFO   ] [Text        ] Provider: sdl2[['text_pango'] ignored]
[INFO   ] [Window      ] Provider: sdl2[['window_egl_rpi'] ignored]
[INFO   ] [GL          ] Using the "OpenGL" graphics system
[INFO   ] [GL          ] Backend used 
[INFO   ] [GL          ] OpenGL version 
[INFO   ] [GL          ] OpenGL vendor 
[INFO   ] [GL          ] OpenGL renderer 
[INFO   ] [GL          ] OpenGL parsed version: 4, 6
[INFO   ] [GL          ] Shading version 
[INFO   ] [GL          ] Texture max size 
[INFO   ] [GL          ] Texture max units 
[INFO   ] [Window      ] auto add sdl2 input provider
[INFO   ] [Window      ] virtual keyboard not allowed, single mode, not docked
[INFO   ] [Base        ] Start application main loop
[INFO   ] [GL          ] NPOT texture support is available

Điều này rất hữu ích để gỡ lỗi ứng dụng của bạn

Tiếp theo, bạn sẽ thử thêm tiện ích

[INFO   ] [Logger      ] Record log in /home/mdriscoll/.kivy/logs/kivy_19-06-07_2.txt
[INFO   ] [Kivy        ] v1.11.0
[INFO   ] [Kivy        ] Installed at "/home/mdriscoll/code/test/lib/python3.6/site-packages/kivy/__init__.py"
[INFO   ] [Python      ] v3.6.7 [default, Oct 22 2018, 11:32:17]
[GCC 8.2.0]
[INFO   ] [Python      ] Interpreter at "/home/mdriscoll/code/test/bin/python"
[INFO   ] [Factory     ] 184 symbols loaded
[INFO   ] [Image       ] Providers: img_tex, img_dds, img_sdl2, img_gif [img_pil, img_ffpyplayer ignored]
[INFO   ] [Text        ] Provider: sdl2[['text_pango'] ignored]
[INFO   ] [Window      ] Provider: sdl2[['window_egl_rpi'] ignored]
[INFO   ] [GL          ] Using the "OpenGL" graphics system
[INFO   ] [GL          ] Backend used 
[INFO   ] [GL          ] OpenGL version 
[INFO   ] [GL          ] OpenGL vendor 
[INFO   ] [GL          ] OpenGL renderer 
[INFO   ] [GL          ] OpenGL parsed version: 4, 6
[INFO   ] [GL          ] Shading version 
[INFO   ] [GL          ] Texture max size 
[INFO   ] [GL          ] Texture max units 
[INFO   ] [Window      ] auto add sdl2 input provider
[INFO   ] [Window      ] virtual keyboard not allowed, single mode, not docked
[INFO   ] [Base        ] Start application main loop
[INFO   ] [GL          ] NPOT texture support is available
6 và xem tiện ích đó khác với tiện ích
from kivy.app import App
from kivy.uix.label import Label

class MainApp[App]:
    def build[self]:
        label = Label[text='Hello from Kivy',
                      size_hint=[.5, .5],
                      pos_hint={'center_x': .5, 'center_y': .5}]

        return label

if __name__ == '__main__':
    app = MainApp[]
    app.run[]
5 như thế nào

Loại bỏ các quảng cáo

Hiển thị một hình ảnh

Kivy có một vài tiện ích liên quan đến hình ảnh khác nhau để lựa chọn. Bạn có thể sử dụng

[INFO   ] [Logger      ] Record log in /home/mdriscoll/.kivy/logs/kivy_19-06-07_2.txt
[INFO   ] [Kivy        ] v1.11.0
[INFO   ] [Kivy        ] Installed at "/home/mdriscoll/code/test/lib/python3.6/site-packages/kivy/__init__.py"
[INFO   ] [Python      ] v3.6.7 [default, Oct 22 2018, 11:32:17]
[GCC 8.2.0]
[INFO   ] [Python      ] Interpreter at "/home/mdriscoll/code/test/bin/python"
[INFO   ] [Factory     ] 184 symbols loaded
[INFO   ] [Image       ] Providers: img_tex, img_dds, img_sdl2, img_gif [img_pil, img_ffpyplayer ignored]
[INFO   ] [Text        ] Provider: sdl2[['text_pango'] ignored]
[INFO   ] [Window      ] Provider: sdl2[['window_egl_rpi'] ignored]
[INFO   ] [GL          ] Using the "OpenGL" graphics system
[INFO   ] [GL          ] Backend used 
[INFO   ] [GL          ] OpenGL version 
[INFO   ] [GL          ] OpenGL vendor 
[INFO   ] [GL          ] OpenGL renderer 
[INFO   ] [GL          ] OpenGL parsed version: 4, 6
[INFO   ] [GL          ] Shading version 
[INFO   ] [GL          ] Texture max size 
[INFO   ] [GL          ] Texture max units 
[INFO   ] [Window      ] auto add sdl2 input provider
[INFO   ] [Window      ] virtual keyboard not allowed, single mode, not docked
[INFO   ] [Base        ] Start application main loop
[INFO   ] [GL          ] NPOT texture support is available
6 để tải hình ảnh cục bộ từ ổ cứng của mình hoặc
[INFO   ] [Logger      ] Record log in /home/mdriscoll/.kivy/logs/kivy_19-06-07_2.txt
[INFO   ] [Kivy        ] v1.11.0
[INFO   ] [Kivy        ] Installed at "/home/mdriscoll/code/test/lib/python3.6/site-packages/kivy/__init__.py"
[INFO   ] [Python      ] v3.6.7 [default, Oct 22 2018, 11:32:17]
[GCC 8.2.0]
[INFO   ] [Python      ] Interpreter at "/home/mdriscoll/code/test/bin/python"
[INFO   ] [Factory     ] 184 symbols loaded
[INFO   ] [Image       ] Providers: img_tex, img_dds, img_sdl2, img_gif [img_pil, img_ffpyplayer ignored]
[INFO   ] [Text        ] Provider: sdl2[['text_pango'] ignored]
[INFO   ] [Window      ] Provider: sdl2[['window_egl_rpi'] ignored]
[INFO   ] [GL          ] Using the "OpenGL" graphics system
[INFO   ] [GL          ] Backend used 
[INFO   ] [GL          ] OpenGL version 
[INFO   ] [GL          ] OpenGL vendor 
[INFO   ] [GL          ] OpenGL renderer 
[INFO   ] [GL          ] OpenGL parsed version: 4, 6
[INFO   ] [GL          ] Shading version 
[INFO   ] [GL          ] Texture max size 
[INFO   ] [GL          ] Texture max units 
[INFO   ] [Window      ] auto add sdl2 input provider
[INFO   ] [Window      ] virtual keyboard not allowed, single mode, not docked
[INFO   ] [Base        ] Start application main loop
[INFO   ] [GL          ] NPOT texture support is available
9 để tải hình ảnh từ URL. Đối với ví dụ này, bạn sẽ gắn bó với lớp
[INFO   ] [Logger      ] Record log in /home/mdriscoll/.kivy/logs/kivy_19-06-07_2.txt
[INFO   ] [Kivy        ] v1.11.0
[INFO   ] [Kivy        ] Installed at "/home/mdriscoll/code/test/lib/python3.6/site-packages/kivy/__init__.py"
[INFO   ] [Python      ] v3.6.7 [default, Oct 22 2018, 11:32:17]
[GCC 8.2.0]
[INFO   ] [Python      ] Interpreter at "/home/mdriscoll/code/test/bin/python"
[INFO   ] [Factory     ] 184 symbols loaded
[INFO   ] [Image       ] Providers: img_tex, img_dds, img_sdl2, img_gif [img_pil, img_ffpyplayer ignored]
[INFO   ] [Text        ] Provider: sdl2[['text_pango'] ignored]
[INFO   ] [Window      ] Provider: sdl2[['window_egl_rpi'] ignored]
[INFO   ] [GL          ] Using the "OpenGL" graphics system
[INFO   ] [GL          ] Backend used 
[INFO   ] [GL          ] OpenGL version 
[INFO   ] [GL          ] OpenGL vendor 
[INFO   ] [GL          ] OpenGL renderer 
[INFO   ] [GL          ] OpenGL parsed version: 4, 6
[INFO   ] [GL          ] Shading version 
[INFO   ] [GL          ] Texture max size 
[INFO   ] [GL          ] Texture max units 
[INFO   ] [Window      ] auto add sdl2 input provider
[INFO   ] [Window      ] virtual keyboard not allowed, single mode, not docked
[INFO   ] [Base        ] Start application main loop
[INFO   ] [GL          ] NPOT texture support is available
6 tiêu chuẩn

from kivy.app import App
from kivy.uix.image import Image

class MainApp[App]:
    def build[self]:
        img = Image[source='/path/to/real_python.png',
                    size_hint=[1, .5],
                    pos_hint={'center_x':.5, 'center_y':.5}]

        return img

if __name__ == '__main__':
    app = MainApp[]
    app.run[]

Trong mã này, bạn nhập

[INFO   ] [Logger      ] Record log in /home/mdriscoll/.kivy/logs/kivy_19-06-07_2.txt
[INFO   ] [Kivy        ] v1.11.0
[INFO   ] [Kivy        ] Installed at "/home/mdriscoll/code/test/lib/python3.6/site-packages/kivy/__init__.py"
[INFO   ] [Python      ] v3.6.7 [default, Oct 22 2018, 11:32:17]
[GCC 8.2.0]
[INFO   ] [Python      ] Interpreter at "/home/mdriscoll/code/test/bin/python"
[INFO   ] [Factory     ] 184 symbols loaded
[INFO   ] [Image       ] Providers: img_tex, img_dds, img_sdl2, img_gif [img_pil, img_ffpyplayer ignored]
[INFO   ] [Text        ] Provider: sdl2[['text_pango'] ignored]
[INFO   ] [Window      ] Provider: sdl2[['window_egl_rpi'] ignored]
[INFO   ] [GL          ] Using the "OpenGL" graphics system
[INFO   ] [GL          ] Backend used 
[INFO   ] [GL          ] OpenGL version 
[INFO   ] [GL          ] OpenGL vendor 
[INFO   ] [GL          ] OpenGL renderer 
[INFO   ] [GL          ] OpenGL parsed version: 4, 6
[INFO   ] [GL          ] Shading version 
[INFO   ] [GL          ] Texture max size 
[INFO   ] [GL          ] Texture max units 
[INFO   ] [Window      ] auto add sdl2 input provider
[INFO   ] [Window      ] virtual keyboard not allowed, single mode, not docked
[INFO   ] [Base        ] Start application main loop
[INFO   ] [GL          ] NPOT texture support is available
6 từ gói phụ
from kivy.app import App
from kivy.uix.image import Image

class MainApp[App]:
    def build[self]:
        img = Image[source='/path/to/real_python.png',
                    size_hint=[1, .5],
                    pos_hint={'center_x':.5, 'center_y':.5}]

        return img

if __name__ == '__main__':
    app = MainApp[]
    app.run[]
2. Lớp
[INFO   ] [Logger      ] Record log in /home/mdriscoll/.kivy/logs/kivy_19-06-07_2.txt
[INFO   ] [Kivy        ] v1.11.0
[INFO   ] [Kivy        ] Installed at "/home/mdriscoll/code/test/lib/python3.6/site-packages/kivy/__init__.py"
[INFO   ] [Python      ] v3.6.7 [default, Oct 22 2018, 11:32:17]
[GCC 8.2.0]
[INFO   ] [Python      ] Interpreter at "/home/mdriscoll/code/test/bin/python"
[INFO   ] [Factory     ] 184 symbols loaded
[INFO   ] [Image       ] Providers: img_tex, img_dds, img_sdl2, img_gif [img_pil, img_ffpyplayer ignored]
[INFO   ] [Text        ] Provider: sdl2[['text_pango'] ignored]
[INFO   ] [Window      ] Provider: sdl2[['window_egl_rpi'] ignored]
[INFO   ] [GL          ] Using the "OpenGL" graphics system
[INFO   ] [GL          ] Backend used 
[INFO   ] [GL          ] OpenGL version 
[INFO   ] [GL          ] OpenGL vendor 
[INFO   ] [GL          ] OpenGL renderer 
[INFO   ] [GL          ] OpenGL parsed version: 4, 6
[INFO   ] [GL          ] Shading version 
[INFO   ] [GL          ] Texture max size 
[INFO   ] [GL          ] Texture max units 
[INFO   ] [Window      ] auto add sdl2 input provider
[INFO   ] [Window      ] virtual keyboard not allowed, single mode, not docked
[INFO   ] [Base        ] Start application main loop
[INFO   ] [GL          ] NPOT texture support is available
6 có rất nhiều tham số khác nhau, nhưng tham số mà bạn muốn sử dụng là
from kivy.app import App
from kivy.uix.image import Image

class MainApp[App]:
    def build[self]:
        img = Image[source='/path/to/real_python.png',
                    size_hint=[1, .5],
                    pos_hint={'center_x':.5, 'center_y':.5}]

        return img

if __name__ == '__main__':
    app = MainApp[]
    app.run[]
4. Điều này cho Kivy biết hình ảnh nào sẽ tải. Tại đây, bạn chuyển một đường dẫn đủ điều kiện tới hình ảnh. Phần còn lại của mã giống như những gì bạn đã thấy trong ví dụ trước

Khi bạn chạy mã này, bạn sẽ thấy một cái gì đó như sau

Văn bản từ ví dụ trước đã được thay thế bằng một hình ảnh

Bây giờ bạn sẽ học cách thêm và sắp xếp nhiều widget trong ứng dụng của mình

Bố trí giao diện người dùng

Mỗi khung GUI mà bạn sử dụng có phương pháp sắp xếp các widget riêng. Ví dụ: trong wxPython, bạn sẽ sử dụng bộ định cỡ, trong khi ở Tkinter, bạn sử dụng trình quản lý bố cục hoặc hình học. Với Kivy, bạn sẽ sử dụng Bố cục. Có một số loại Bố cục khác nhau mà bạn có thể sử dụng. Dưới đây là một số trong những cái phổ biến nhất

  • from kivy.app import App
    from kivy.uix.image import Image
    
    class MainApp[App]:
        def build[self]:
            img = Image[source='/path/to/real_python.png',
                        size_hint=[1, .5],
                        pos_hint={'center_x':.5, 'center_y':.5}]
    
            return img
    
    if __name__ == '__main__':
        app = MainApp[]
        app.run[]
    
    5
  • from kivy.app import App
    from kivy.uix.image import Image
    
    class MainApp[App]:
        def build[self]:
            img = Image[source='/path/to/real_python.png',
                        size_hint=[1, .5],
                        pos_hint={'center_x':.5, 'center_y':.5}]
    
            return img
    
    if __name__ == '__main__':
        app = MainApp[]
        app.run[]
    
    6
  • from kivy.app import App
    from kivy.uix.image import Image
    
    class MainApp[App]:
        def build[self]:
            img = Image[source='/path/to/real_python.png',
                        size_hint=[1, .5],
                        pos_hint={'center_x':.5, 'center_y':.5}]
    
            return img
    
    if __name__ == '__main__':
        app = MainApp[]
        app.run[]
    
    7

Bạn có thể tìm kiếm tài liệu của Kivy để biết danh sách đầy đủ các Bố cục có sẵn. Bạn cũng có thể xem trong

from kivy.app import App
from kivy.uix.image import Image

class MainApp[App]:
    def build[self]:
        img = Image[source='/path/to/real_python.png',
                    size_hint=[1, .5],
                    pos_hint={'center_x':.5, 'center_y':.5}]

        return img

if __name__ == '__main__':
    app = MainApp[]
    app.run[]
8 để biết mã nguồn thực tế

Hãy dùng thử

from kivy.app import App
from kivy.uix.image import Image

class MainApp[App]:
    def build[self]:
        img = Image[source='/path/to/real_python.png',
                    size_hint=[1, .5],
                    pos_hint={'center_x':.5, 'center_y':.5}]

        return img

if __name__ == '__main__':
    app = MainApp[]
    app.run[]
5 với mã này

import kivy
import random

from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout

red = [1,0,0,1]
green = [0,1,0,1]
blue =  [0,0,1,1]
purple = [1,0,1,1]

class HBoxLayoutExample[App]:
    def build[self]:
        layout = BoxLayout[padding=10]
        colors = [red, green, blue, purple]

        for i in range[5]:
            btn = Button[text="Button #%s" % [i+1],
                         background_color=random.choice[colors]
                         ]

            layout.add_widget[btn]
        return layout

if __name__ == "__main__":
    app = HBoxLayoutExample[]
    app.run[]

Tại đây, bạn nhập

from kivy.app import App
from kivy.uix.image import Image

class MainApp[App]:
    def build[self]:
        img = Image[source='/path/to/real_python.png',
                    size_hint=[1, .5],
                    pos_hint={'center_x':.5, 'center_y':.5}]

        return img

if __name__ == '__main__':
    app = MainApp[]
    app.run[]
5 từ
import kivy
import random

from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout

red = [1,0,0,1]
green = [0,1,0,1]
blue =  [0,0,1,1]
purple = [1,0,1,1]

class HBoxLayoutExample[App]:
    def build[self]:
        layout = BoxLayout[padding=10]
        colors = [red, green, blue, purple]

        for i in range[5]:
            btn = Button[text="Button #%s" % [i+1],
                         background_color=random.choice[colors]
                         ]

            layout.add_widget[btn]
        return layout

if __name__ == "__main__":
    app = HBoxLayoutExample[]
    app.run[]
1 và khởi tạo nó. Sau đó, bạn tạo một danh sách các màu, chính chúng là danh sách các màu Đỏ-Xanh lam-Xanh lá cây [RGB]. Cuối cùng, bạn lặp lại một
import kivy
import random

from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout

red = [1,0,0,1]
green = [0,1,0,1]
blue =  [0,0,1,1]
purple = [1,0,1,1]

class HBoxLayoutExample[App]:
    def build[self]:
        layout = BoxLayout[padding=10]
        colors = [red, green, blue, purple]

        for i in range[5]:
            btn = Button[text="Button #%s" % [i+1],
                         background_color=random.choice[colors]
                         ]

            layout.add_widget[btn]
        return layout

if __name__ == "__main__":
    app = HBoxLayoutExample[]
    app.run[]
2 của 5, tạo một nút
import kivy
import random

from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout

red = [1,0,0,1]
green = [0,1,0,1]
blue =  [0,0,1,1]
purple = [1,0,1,1]

class HBoxLayoutExample[App]:
    def build[self]:
        layout = BoxLayout[padding=10]
        colors = [red, green, blue, purple]

        for i in range[5]:
            btn = Button[text="Button #%s" % [i+1],
                         background_color=random.choice[colors]
                         ]

            layout.add_widget[btn]
        return layout

if __name__ == "__main__":
    app = HBoxLayoutExample[]
    app.run[]
3 cho mỗi lần lặp lại. Để khiến mọi thứ thú vị hơn một chút, bạn đặt
import kivy
import random

from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout

red = [1,0,0,1]
green = [0,1,0,1]
blue =  [0,0,1,1]
purple = [1,0,1,1]

class HBoxLayoutExample[App]:
    def build[self]:
        layout = BoxLayout[padding=10]
        colors = [red, green, blue, purple]

        for i in range[5]:
            btn = Button[text="Button #%s" % [i+1],
                         background_color=random.choice[colors]
                         ]

            layout.add_widget[btn]
        return layout

if __name__ == "__main__":
    app = HBoxLayoutExample[]
    app.run[]
4 của nút thành màu ngẫu nhiên. Sau đó, bạn thêm nút vào bố cục của mình bằng
import kivy
import random

from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout

red = [1,0,0,1]
green = [0,1,0,1]
blue =  [0,0,1,1]
purple = [1,0,1,1]

class HBoxLayoutExample[App]:
    def build[self]:
        layout = BoxLayout[padding=10]
        colors = [red, green, blue, purple]

        for i in range[5]:
            btn = Button[text="Button #%s" % [i+1],
                         background_color=random.choice[colors]
                         ]

            layout.add_widget[btn]
        return layout

if __name__ == "__main__":
    app = HBoxLayoutExample[]
    app.run[]
5

Khi bạn chạy mã này, bạn sẽ thấy một cái gì đó như thế này

Có 5 nút được tô màu ngẫu nhiên, một nút cho mỗi lần lặp của vòng lặp

import kivy
import random

from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout

red = [1,0,0,1]
green = [0,1,0,1]
blue =  [0,0,1,1]
purple = [1,0,1,1]

class HBoxLayoutExample[App]:
    def build[self]:
        layout = BoxLayout[padding=10]
        colors = [red, green, blue, purple]

        for i in range[5]:
            btn = Button[text="Button #%s" % [i+1],
                         background_color=random.choice[colors]
                         ]

            layout.add_widget[btn]
        return layout

if __name__ == "__main__":
    app = HBoxLayoutExample[]
    app.run[]
6 của bạn

Khi bạn tạo bố cục, có một vài đối số bạn nên biết

  • import kivy
    import random
    
    from kivy.app import App
    from kivy.uix.button import Button
    from kivy.uix.boxlayout import BoxLayout
    
    red = [1,0,0,1]
    green = [0,1,0,1]
    blue =  [0,0,1,1]
    purple = [1,0,1,1]
    
    class HBoxLayoutExample[App]:
        def build[self]:
            layout = BoxLayout[padding=10]
            colors = [red, green, blue, purple]
    
            for i in range[5]:
                btn = Button[text="Button #%s" % [i+1],
                             background_color=random.choice[colors]
                             ]
    
                layout.add_widget[btn]
            return layout
    
    if __name__ == "__main__":
        app = HBoxLayoutExample[]
        app.run[]
    
    7. Bạn có thể chỉ định
    import kivy
    import random
    
    from kivy.app import App
    from kivy.uix.button import Button
    from kivy.uix.boxlayout import BoxLayout
    
    red = [1,0,0,1]
    green = [0,1,0,1]
    blue =  [0,0,1,1]
    purple = [1,0,1,1]
    
    class HBoxLayoutExample[App]:
        def build[self]:
            layout = BoxLayout[padding=10]
            colors = [red, green, blue, purple]
    
            for i in range[5]:
                btn = Button[text="Button #%s" % [i+1],
                             background_color=random.choice[colors]
                             ]
    
                layout.add_widget[btn]
            return layout
    
    if __name__ == "__main__":
        app = HBoxLayoutExample[]
        app.run[]
    
    7 bằng pixel giữa bố cục và phần tử con của nó theo một trong ba cách
    1. Một danh sách bốn đối số. [
      import kivy
      import random
      
      from kivy.app import App
      from kivy.uix.button import Button
      from kivy.uix.boxlayout import BoxLayout
      
      red = [1,0,0,1]
      green = [0,1,0,1]
      blue =  [0,0,1,1]
      purple = [1,0,1,1]
      
      class HBoxLayoutExample[App]:
          def build[self]:
              layout = BoxLayout[padding=10]
              colors = [red, green, blue, purple]
      
              for i in range[5]:
                  btn = Button[text="Button #%s" % [i+1],
                               background_color=random.choice[colors]
                               ]
      
                  layout.add_widget[btn]
              return layout
      
      if __name__ == "__main__":
          app = HBoxLayoutExample[]
          app.run[]
      
      9,
      from kivy.app import App
      from kivy.uix.button import Button
      
      class MainApp[App]:
          def build[self]:
              button = Button[text='Hello from Kivy',
                              size_hint=[.5, .5],
                              pos_hint={'center_x': .5, 'center_y': .5}]
              button.bind[on_press=self.on_press_button]
      
              return button
      
          def on_press_button[self, instance]:
              print['You pressed the button!']
      
      if __name__ == '__main__':
          app = MainApp[]
          app.run[]
      
      0,
      from kivy.app import App
      from kivy.uix.button import Button
      
      class MainApp[App]:
          def build[self]:
              button = Button[text='Hello from Kivy',
                              size_hint=[.5, .5],
                              pos_hint={'center_x': .5, 'center_y': .5}]
              button.bind[on_press=self.on_press_button]
      
              return button
      
          def on_press_button[self, instance]:
              print['You pressed the button!']
      
      if __name__ == '__main__':
          app = MainApp[]
          app.run[]
      
      1,
      from kivy.app import App
      from kivy.uix.button import Button
      
      class MainApp[App]:
          def build[self]:
              button = Button[text='Hello from Kivy',
                              size_hint=[.5, .5],
                              pos_hint={'center_x': .5, 'center_y': .5}]
              button.bind[on_press=self.on_press_button]
      
              return button
      
          def on_press_button[self, instance]:
              print['You pressed the button!']
      
      if __name__ == '__main__':
          app = MainApp[]
          app.run[]
      
      2]
    2. Một danh sách hai đối số. [
      from kivy.app import App
      from kivy.uix.button import Button
      
      class MainApp[App]:
          def build[self]:
              button = Button[text='Hello from Kivy',
                              size_hint=[.5, .5],
                              pos_hint={'center_x': .5, 'center_y': .5}]
              button.bind[on_press=self.on_press_button]
      
              return button
      
          def on_press_button[self, instance]:
              print['You pressed the button!']
      
      if __name__ == '__main__':
          app = MainApp[]
          app.run[]
      
      3,
      from kivy.app import App
      from kivy.uix.button import Button
      
      class MainApp[App]:
          def build[self]:
              button = Button[text='Hello from Kivy',
                              size_hint=[.5, .5],
                              pos_hint={'center_x': .5, 'center_y': .5}]
              button.bind[on_press=self.on_press_button]
      
              return button
      
          def on_press_button[self, instance]:
              print['You pressed the button!']
      
      if __name__ == '__main__':
          app = MainApp[]
          app.run[]
      
      4]
    3. Một đối số duy nhất.
      from kivy.app import App
      from kivy.uix.button import Button
      
      class MainApp[App]:
          def build[self]:
              button = Button[text='Hello from Kivy',
                              size_hint=[.5, .5],
                              pos_hint={'center_x': .5, 'center_y': .5}]
              button.bind[on_press=self.on_press_button]
      
              return button
      
          def on_press_button[self, instance]:
              print['You pressed the button!']
      
      if __name__ == '__main__':
          app = MainApp[]
          app.run[]
      
      5
  • from kivy.app import App
    from kivy.uix.button import Button
    
    class MainApp[App]:
        def build[self]:
            button = Button[text='Hello from Kivy',
                            size_hint=[.5, .5],
                            pos_hint={'center_x': .5, 'center_y': .5}]
            button.bind[on_press=self.on_press_button]
    
            return button
    
        def on_press_button[self, instance]:
            print['You pressed the button!']
    
    if __name__ == '__main__':
        app = MainApp[]
        app.run[]
    
    6. Bạn có thể thêm khoảng cách giữa các tiện ích con với đối số này
  • from kivy.app import App
    from kivy.uix.button import Button
    
    class MainApp[App]:
        def build[self]:
            button = Button[text='Hello from Kivy',
                            size_hint=[.5, .5],
                            pos_hint={'center_x': .5, 'center_y': .5}]
            button.bind[on_press=self.on_press_button]
    
            return button
    
        def on_press_button[self, instance]:
            print['You pressed the button!']
    
    if __name__ == '__main__':
        app = MainApp[]
        app.run[]
    
    7. Bạn có thể thay đổi
    from kivy.app import App
    from kivy.uix.button import Button
    
    class MainApp[App]:
        def build[self]:
            button = Button[text='Hello from Kivy',
                            size_hint=[.5, .5],
                            pos_hint={'center_x': .5, 'center_y': .5}]
            button.bind[on_press=self.on_press_button]
    
            return button
    
        def on_press_button[self, instance]:
            print['You pressed the button!']
    
    if __name__ == '__main__':
        app = MainApp[]
        app.run[]
    
    7 mặc định của
    from kivy.app import App
    from kivy.uix.image import Image
    
    class MainApp[App]:
        def build[self]:
            img = Image[source='/path/to/real_python.png',
                        size_hint=[1, .5],
                        pos_hint={'center_x':.5, 'center_y':.5}]
    
            return img
    
    if __name__ == '__main__':
        app = MainApp[]
        app.run[]
    
    5 từ ngang sang dọc

Loại bỏ các quảng cáo

Thêm sự kiện

Giống như hầu hết các bộ công cụ GUI, Kivy chủ yếu dựa trên sự kiện. Khung phản hồi với các lần nhấn phím, sự kiện chuột và sự kiện chạm của người dùng. Kivy có khái niệm về Đồng hồ mà bạn có thể sử dụng để lên lịch các cuộc gọi chức năng trong một thời gian trong tương lai

Kivy cũng có khái niệm về

from kivy.app import App
from kivy.uix.button import Button

class ButtonApp[App]:
    def build[self]:
        return Button[]

    def on_press_button[self]:
        print['You pressed the button!']

if __name__ == '__main__':
    app = ButtonApp[]
    app.run[]
0, hoạt động với. Thuộc tính giúp bạn kiểm tra xác thực. Chúng cũng cho phép bạn kích hoạt các sự kiện bất cứ khi nào một tiện ích thay đổi kích thước hoặc vị trí của nó

Hãy thêm một sự kiện nút vào mã nút của bạn từ trước đó

from kivy.app import App
from kivy.uix.button import Button

class MainApp[App]:
    def build[self]:
        button = Button[text='Hello from Kivy',
                        size_hint=[.5, .5],
                        pos_hint={'center_x': .5, 'center_y': .5}]
        button.bind[on_press=self.on_press_button]

        return button

    def on_press_button[self, instance]:
        print['You pressed the button!']

if __name__ == '__main__':
    app = MainApp[]
    app.run[]

Trong mã này, bạn gọi

from kivy.app import App
from kivy.uix.button import Button

class ButtonApp[App]:
    def build[self]:
        return Button[]

    def on_press_button[self]:
        print['You pressed the button!']

if __name__ == '__main__':
    app = ButtonApp[]
    app.run[]
2 và liên kết sự kiện
from kivy.app import App
from kivy.uix.button import Button

class ButtonApp[App]:
    def build[self]:
        return Button[]

    def on_press_button[self]:
        print['You pressed the button!']

if __name__ == '__main__':
    app = ButtonApp[]
    app.run[]
3 với
from kivy.app import App
from kivy.uix.button import Button

class ButtonApp[App]:
    def build[self]:
        return Button[]

    def on_press_button[self]:
        print['You pressed the button!']

if __name__ == '__main__':
    app = ButtonApp[]
    app.run[]
4. Phương thức này ngầm nhận widget
from kivy.app import App
from kivy.uix.button import Button

class ButtonApp[App]:
    def build[self]:
        return Button[]

    def on_press_button[self]:
        print['You pressed the button!']

if __name__ == '__main__':
    app = ButtonApp[]
    app.run[]
5, chính là đối tượng
from kivy.app import App
from kivy.uix.button import Button

class ButtonApp[App]:
    def build[self]:
        return Button[]

    def on_press_button[self]:
        print['You pressed the button!']

if __name__ == '__main__':
    app = ButtonApp[]
    app.run[]
6. Cuối cùng, một tin nhắn sẽ được in tới
[INFO   ] [Logger      ] Record log in /home/mdriscoll/.kivy/logs/kivy_19-06-07_2.txt
[INFO   ] [Kivy        ] v1.11.0
[INFO   ] [Kivy        ] Installed at "/home/mdriscoll/code/test/lib/python3.6/site-packages/kivy/__init__.py"
[INFO   ] [Python      ] v3.6.7 [default, Oct 22 2018, 11:32:17]
[GCC 8.2.0]
[INFO   ] [Python      ] Interpreter at "/home/mdriscoll/code/test/bin/python"
[INFO   ] [Factory     ] 184 symbols loaded
[INFO   ] [Image       ] Providers: img_tex, img_dds, img_sdl2, img_gif [img_pil, img_ffpyplayer ignored]
[INFO   ] [Text        ] Provider: sdl2[['text_pango'] ignored]
[INFO   ] [Window      ] Provider: sdl2[['window_egl_rpi'] ignored]
[INFO   ] [GL          ] Using the "OpenGL" graphics system
[INFO   ] [GL          ] Backend used 
[INFO   ] [GL          ] OpenGL version 
[INFO   ] [GL          ] OpenGL vendor 
[INFO   ] [GL          ] OpenGL renderer 
[INFO   ] [GL          ] OpenGL parsed version: 4, 6
[INFO   ] [GL          ] Shading version 
[INFO   ] [GL          ] Texture max size 
[INFO   ] [GL          ] Texture max units 
[INFO   ] [Window      ] auto add sdl2 input provider
[INFO   ] [Window      ] virtual keyboard not allowed, single mode, not docked
[INFO   ] [Base        ] Start application main loop
[INFO   ] [GL          ] NPOT texture support is available
5 bất cứ khi nào người dùng nhấn nút của bạn

Sử dụng ngôn ngữ KV

Kivy cũng cung cấp một ngôn ngữ thiết kế gọi là KV mà bạn có thể sử dụng với các ứng dụng Kivy của mình. Ngôn ngữ KV cho phép bạn tách thiết kế giao diện của mình khỏi logic của ứng dụng. Điều này tuân theo nguyên tắc phân tách mối quan tâm và là một phần của mẫu kiến ​​trúc Model-View-Controller. Bạn có thể cập nhật ví dụ trước để sử dụng ngôn ngữ KV

from kivy.app import App
from kivy.uix.button import Button

class ButtonApp[App]:
    def build[self]:
        return Button[]

    def on_press_button[self]:
        print['You pressed the button!']

if __name__ == '__main__':
    app = ButtonApp[]
    app.run[]

Thoạt nhìn, mã này có thể trông hơi kỳ quặc vì nó tạo một

from kivy.app import App
from kivy.uix.button import Button

class ButtonApp[App]:
    def build[self]:
        return Button[]

    def on_press_button[self]:
        print['You pressed the button!']

if __name__ == '__main__':
    app = ButtonApp[]
    app.run[]
8 mà không thiết lập bất kỳ thuộc tính nào của nó hoặc ràng buộc nó với bất kỳ sự kiện nào. Điều đang xảy ra ở đây là Kivy sẽ tự động tìm kiếm một tệp có cùng tên với lớp ở dạng chữ thường, không có phần
from kivy.app import App
from kivy.uix.label import Label

class MainApp[App]:
    def build[self]:
        label = Label[text='Hello from Kivy',
                      size_hint=[.5, .5],
                      pos_hint={'center_x': .5, 'center_y': .5}]

        return label

if __name__ == '__main__':
    app = MainApp[]
    app.run[]
3 của tên lớp

Trong trường hợp này, tên lớp là

 1:
 2    text: 'Press me'
 3    size_hint: [.5, .5]
 4    pos_hint: {'center_x': .5, 'center_y': .5}
 5    on_press: app.on_press_button[]
0, vì vậy Kivy sẽ tìm tệp có tên
 1:
 2    text: 'Press me'
 3    size_hint: [.5, .5]
 4    pos_hint: {'center_x': .5, 'center_y': .5}
 5    on_press: app.on_press_button[]
1. Nếu tệp đó tồn tại và được định dạng đúng thì Kivy sẽ sử dụng tệp đó để tải lên giao diện người dùng. Hãy tiếp tục và tạo tệp này và thêm đoạn mã sau

 1:
 2    text: 'Press me'
 3    size_hint: [.5, .5]
 4    pos_hint: {'center_x': .5, 'center_y': .5}
 5    on_press: app.on_press_button[]

Đây là những gì mỗi dòng làm

  • Dòng 1 khớp với lệnh gọi
    from kivy.app import App
    from kivy.uix.button import Button
    
    class ButtonApp[App]:
        def build[self]:
            return Button[]
    
        def on_press_button[self]:
            print['You pressed the button!']
    
    if __name__ == '__main__':
        app = ButtonApp[]
        app.run[]
    
    8 trong mã Python của bạn. Nó yêu cầu Kivy xem xét đối tượng được khởi tạo để biết định nghĩa nút
  • Dòng 2 đặt
    from kivy.app import App
    from kivy.uix.label import Label
    
    class MainApp[App]:
        def build[self]:
            label = Label[text='Hello from Kivy',
                          size_hint=[.5, .5],
                          pos_hint={'center_x': .5, 'center_y': .5}]
    
            return label
    
    if __name__ == '__main__':
        app = MainApp[]
        app.run[]
    
    6 của nút
  • Dòng 3 đặt chiều rộng và chiều cao với
    from kivy.app import App
    from kivy.uix.label import Label
    
    class MainApp[App]:
        def build[self]:
            label = Label[text='Hello from Kivy',
                          size_hint=[.5, .5],
                          pos_hint={'center_x': .5, 'center_y': .5}]
    
            return label
    
    if __name__ == '__main__':
        app = MainApp[]
        app.run[]
    
    7
  • Dòng 4 đặt vị trí của nút bằng
    from kivy.app import App
    from kivy.uix.label import Label
    
    class MainApp[App]:
        def build[self]:
            label = Label[text='Hello from Kivy',
                          size_hint=[.5, .5],
                          pos_hint={'center_x': .5, 'center_y': .5}]
    
            return label
    
    if __name__ == '__main__':
        app = MainApp[]
        app.run[]
    
    8
  • Dòng 5 đặt trình xử lý sự kiện
    from kivy.app import App
    from kivy.uix.button import Button
    
    class ButtonApp[App]:
        def build[self]:
            return Button[]
    
        def on_press_button[self]:
            print['You pressed the button!']
    
    if __name__ == '__main__':
        app = ButtonApp[]
        app.run[]
    
    3. Để báo cho Kivy biết nơi xử lý sự kiện, bạn sử dụng
     1:
     2    text: 'Press me'
     3    size_hint: [.5, .5]
     4    pos_hint: {'center_x': .5, 'center_y': .5}
     5    on_press: app.on_press_button[]
    
    7. Ở đây, Kivy biết sẽ tìm trong lớp
     1:
     2    text: 'Press me'
     3    size_hint: [.5, .5]
     4    pos_hint: {'center_x': .5, 'center_y': .5}
     5    on_press: app.on_press_button[]
    
    8 một phương thức có tên là
     1:
     2    text: 'Press me'
     3    size_hint: [.5, .5]
     4    pos_hint: {'center_x': .5, 'center_y': .5}
     5    on_press: app.on_press_button[]
    
    9

Bạn có thể thiết lập tất cả các vật dụng và bố cục của mình bên trong một hoặc nhiều tệp ngôn ngữ KV. Ngôn ngữ KV cũng hỗ trợ nhập các mô-đun Python trong KV, tạo các lớp động, v.v. Để biết chi tiết đầy đủ, hãy xem hướng dẫn của Kivy về Ngôn ngữ KV

Bây giờ bạn đã sẵn sàng để tạo một ứng dụng thực sự

Tạo ứng dụng Kivy

Một trong những cách tốt nhất để học một kỹ năng mới là tạo ra thứ gì đó hữu ích. Với ý nghĩ đó, bạn sẽ sử dụng Kivy để xây dựng một máy tính hỗ trợ các hoạt động sau

  • Phép cộng
  • phép trừ
  • Phép nhân
  • Phân công

Đối với ứng dụng này, bạn sẽ cần một loạt nút theo kiểu bố cục nào đó. Bạn cũng sẽ cần một hộp ở đầu ứng dụng của mình để hiển thị các phương trình và kết quả của chúng. Đây là một bản phác thảo của máy tính của bạn

Bây giờ bạn đã có mục tiêu cho giao diện người dùng, bạn có thể tiếp tục và viết mã

$ source bin/activate
0

Đây là cách mã máy tính của bạn hoạt động

  • Trong các dòng 8 đến 10, bạn tạo một danh sách
    $ source bin/activate
    
    00 và một vài giá trị tiện dụng,
    $ source bin/activate
    
    01 và
    $ source bin/activate
    
    02, mà bạn sẽ sử dụng sau này
  • Trong dòng 11 đến 15, bạn tạo bố cục cấp cao nhất
    $ source bin/activate
    
    03 và thêm tiện ích chỉ đọc
    $ source bin/activate
    
    04 vào đó
  • Trong các dòng 16 đến 21, bạn tạo một danh sách các danh sách lồng nhau chứa hầu hết
    $ source bin/activate
    
    05 của bạn cho máy tính
  • Ở dòng 22, bạn bắt đầu một vòng lặp
    import kivy
    import random
    
    from kivy.app import App
    from kivy.uix.button import Button
    from kivy.uix.boxlayout import BoxLayout
    
    red = [1,0,0,1]
    green = [0,1,0,1]
    blue =  [0,0,1,1]
    purple = [1,0,1,1]
    
    class HBoxLayoutExample[App]:
        def build[self]:
            layout = BoxLayout[padding=10]
            colors = [red, green, blue, purple]
    
            for i in range[5]:
                btn = Button[text="Button #%s" % [i+1],
                             background_color=random.choice[colors]
                             ]
    
                layout.add_widget[btn]
            return layout
    
    if __name__ == "__main__":
        app = HBoxLayoutExample[]
        app.run[]
    
    6 trên những
    $ source bin/activate
    
    05 đó. Đối với mỗi danh sách lồng nhau, bạn sẽ làm như sau
    • Ở dòng 23, bạn tạo một
      from kivy.app import App
      from kivy.uix.image import Image
      
      class MainApp[App]:
          def build[self]:
              img = Image[source='/path/to/real_python.png',
                          size_hint=[1, .5],
                          pos_hint={'center_x':.5, 'center_y':.5}]
      
              return img
      
      if __name__ == '__main__':
          app = MainApp[]
          app.run[]
      
      5 với hướng nằm ngang
    • Ở dòng 24, bạn bắt đầu một vòng lặp
      import kivy
      import random
      
      from kivy.app import App
      from kivy.uix.button import Button
      from kivy.uix.boxlayout import BoxLayout
      
      red = [1,0,0,1]
      green = [0,1,0,1]
      blue =  [0,0,1,1]
      purple = [1,0,1,1]
      
      class HBoxLayoutExample[App]:
          def build[self]:
              layout = BoxLayout[padding=10]
              colors = [red, green, blue, purple]
      
              for i in range[5]:
                  btn = Button[text="Button #%s" % [i+1],
                               background_color=random.choice[colors]
                               ]
      
                  layout.add_widget[btn]
              return layout
      
      if __name__ == "__main__":
          app = HBoxLayoutExample[]
          app.run[]
      
      6 khác trên các mục trong danh sách lồng nhau
    • Trong các dòng từ 25 đến 39, bạn tạo các nút cho hàng, liên kết chúng với trình xử lý sự kiện và thêm các nút vào
      from kivy.app import App
      from kivy.uix.image import Image
      
      class MainApp[App]:
          def build[self]:
              img = Image[source='/path/to/real_python.png',
                          size_hint=[1, .5],
                          pos_hint={'center_x':.5, 'center_y':.5}]
      
              return img
      
      if __name__ == '__main__':
          app = MainApp[]
          app.run[]
      
      5 nằm ngang từ dòng 23
    • Ở dòng 31, bạn thêm bố cục này vào
      $ source bin/activate
      
      03
  • Trong các dòng từ 33 đến 37, bạn tạo nút bằng [
    $ source bin/activate
    
    12], liên kết nó với trình xử lý sự kiện và thêm nó vào
    $ source bin/activate
    
    03

Bước tiếp theo là tạo trình xử lý sự kiện

$ source bin/activate
14. Đây là mã đó trông như thế nào

$ source bin/activate
1

Hầu hết các widget trong ứng dụng của bạn sẽ gọi

$ source bin/activate
14. Đây là cách nó hoạt động

  • Dòng 41 lấy đối số

    from kivy.app import App
    from kivy.uix.button import Button
    
    class ButtonApp[App]:
        def build[self]:
            return Button[]
    
        def on_press_button[self]:
            print['You pressed the button!']
    
    if __name__ == '__main__':
        app = ButtonApp[]
        app.run[]
    
    5 để bạn có thể truy cập tiện ích nào được gọi là hàm

  • Dòng 42 và 43 trích xuất và lưu trữ giá trị của nút

    $ source bin/activate
    
    17 và nút
    from kivy.app import App
    from kivy.uix.label import Label
    
    class MainApp[App]:
        def build[self]:
            label = Label[text='Hello from Kivy',
                          size_hint=[.5, .5],
                          pos_hint={'center_x': .5, 'center_y': .5}]
    
            return label
    
    if __name__ == '__main__':
        app = MainApp[]
        app.run[]
    
    6

  • Dòng 45 đến 47 kiểm tra xem nút nào đã được nhấn. Nếu người dùng nhấn

    $ source bin/activate
    
    19, thì bạn sẽ xóa
    $ source bin/activate
    
    17. Nếu không, hãy chuyển sang câu lệnh
    $ source bin/activate
    
    21

  • Dòng 49 kiểm tra xem giải pháp có bất kỳ giá trị tồn tại trước nào không

  • Dòng 50 đến 52 kiểm tra xem nút cuối cùng được nhấn có phải là nút điều hành không. Nếu đúng như vậy, thì

    $ source bin/activate
    
    17 sẽ không được cập nhật. Điều này là để ngăn người dùng có hai toán tử liên tiếp. Ví dụ,
    $ source bin/activate
    
    23 không phải là một tuyên bố hợp lệ

  • Dòng 53 đến 55 kiểm tra xem ký tự đầu tiên có phải là toán tử không. Nếu có, thì

    $ source bin/activate
    
    17 sẽ không được cập nhật, vì giá trị đầu tiên không thể là giá trị toán tử

  • Dòng 56 đến 58 chuyển sang mệnh đề

    $ source bin/activate
    
    21. Nếu không có điều kiện nào trước đó được đáp ứng, thì hãy cập nhật
    $ source bin/activate
    
    17

  • Dòng 59 đặt

    $ source bin/activate
    
    02 thành nhãn của nút cuối cùng được nhấn

  • Dòng 60 đặt

    $ source bin/activate
    
    01 thành
    $ source bin/activate
    
    29 hoặc
    $ source bin/activate
    
    30 tùy thuộc vào việc đó có phải là ký tự toán tử hay không

Đoạn mã cuối cùng cần viết là

$ source bin/activate
31

$ source bin/activate
2

Một lần nữa, bạn lấy văn bản hiện tại từ

$ source bin/activate
17 và sử dụng
$ source bin/activate
33 tích hợp sẵn của Python để thực thi nó. Nếu người dùng đã tạo một công thức như
$ source bin/activate
34, thì
$ source bin/activate
33 sẽ chạy mã của bạn và trả về kết quả. Cuối cùng, bạn đặt kết quả làm giá trị mới cho tiện ích
$ source bin/activate
17

Ghi chú.

$ source bin/activate
33 hơi nguy hiểm vì nó có thể chạy mã tùy ý. Hầu hết các nhà phát triển tránh sử dụng nó vì thực tế đó. Tuy nhiên, vì bạn chỉ cho phép số nguyên, toán tử và dấu chấm làm đầu vào cho
$ source bin/activate
33, nên sử dụng an toàn trong ngữ cảnh này

Khi bạn chạy mã này, ứng dụng của bạn sẽ trông như thế này trên máy tính để bàn

Để xem mã đầy đủ cho ví dụ này, hãy mở rộng khối mã bên dưới

Ví dụ về mã hoàn chỉnhHiển thị/Ẩn

Đây là mã đầy đủ cho máy tính

$ source bin/activate
3

Đã đến lúc triển khai ứng dụng của bạn

Loại bỏ các quảng cáo

Đóng gói ứng dụng của bạn cho Android

Bây giờ bạn đã hoàn thành mã cho ứng dụng của mình, bạn có thể chia sẻ nó với những người khác. Một cách tuyệt vời để làm điều đó là biến mã của bạn thành một ứng dụng có thể chạy trên điện thoại Android của bạn. Để thực hiện điều này, trước tiên, bạn cần cài đặt gói có tên

$ source bin/activate
39 với
from kivy.app import App
from kivy.uix.label import Label

class MainApp[App]:
    def build[self]:
        label = Label[text='Hello from Kivy',
                      size_hint=[.5, .5],
                      pos_hint={'center_x': .5, 'center_y': .5}]

        return label

if __name__ == '__main__':
    app = MainApp[]
    app.run[]
1

$ source bin/activate
4

Sau đó, tạo một thư mục mới và điều hướng đến nó trong thiết bị đầu cuối của bạn. Khi bạn ở đó, bạn sẽ cần chạy lệnh sau

$ source bin/activate
5

Thao tác này sẽ tạo tệp

$ source bin/activate
41 mà bạn sẽ sử dụng để định cấu hình bản dựng của mình. Đối với ví dụ này, bạn có thể chỉnh sửa một vài dòng đầu tiên của tệp thông số kỹ thuật như sau

$ source bin/activate
6

Vui lòng duyệt qua phần còn lại của tệp để xem bạn có thể thay đổi những gì khác

Tại thời điểm này, bạn gần như đã sẵn sàng để xây dựng ứng dụng của mình, nhưng trước tiên, bạn sẽ muốn cài đặt cho

$ source bin/activate
39. Sau khi chúng được cài đặt, hãy sao chép ứng dụng máy tính của bạn vào thư mục mới và đổi tên nó thành
$ source bin/activate
43. Điều này được yêu cầu bởi
$ source bin/activate
39. Nếu bạn không đặt tên tệp chính xác thì quá trình xây dựng sẽ thất bại

Bây giờ bạn có thể chạy lệnh sau

$ source bin/activate
7

Bước xây dựng mất nhiều thời gian. Trên máy của tôi, mất 15 đến 20 phút. Tùy thuộc vào phần cứng của bạn, quá trình này có thể mất nhiều thời gian hơn, vì vậy hãy thoải mái lấy một tách cà phê hoặc chạy bộ trong khi chờ đợi.

$ source bin/activate
45 sẽ tải xuống bất kỳ phần SDK Android nào nó cần trong quá trình xây dựng. Nếu mọi thứ diễn ra theo đúng kế hoạch, thì bạn sẽ có một tệp có tên giống như
$ source bin/activate
46 trong thư mục
from kivy.app import App
from kivy.uix.label import Label

class MainApp[App]:
    def build[self]:
        label = Label[text='Hello from Kivy',
                      size_hint=[.5, .5],
                      pos_hint={'center_x': .5, 'center_y': .5}]

        return label

if __name__ == '__main__':
    app = MainApp[]
    app.run[]
0 của mình

Bước tiếp theo là kết nối điện thoại Android của bạn với máy tính và sao chép tệp

$ source bin/activate
48 vào đó. Sau đó, bạn có thể mở trình duyệt tệp trên điện thoại của mình và nhấp vào tệp
$ source bin/activate
48. Android sẽ hỏi bạn có muốn cài đặt ứng dụng không. Bạn có thể thấy cảnh báo do ứng dụng được tải xuống từ bên ngoài Google Play nhưng bạn vẫn có thể cài đặt ứng dụng đó

Đây là máy tính chạy trên Samsung S9 của tôi

Công cụ

$ source bin/activate
39 có một số lệnh khác mà bạn có thể sử dụng. Kiểm tra tài liệu để xem bạn có thể làm gì khác

Bạn cũng có thể đóng gói ứng dụng bằng cách sử dụng

$ source bin/activate
51 nếu bạn cần kiểm soát chi tiết hơn. Bạn sẽ không trình bày vấn đề này ở đây, nhưng nếu bạn quan tâm, hãy xem phần bắt đầu nhanh của dự án

Đóng gói ứng dụng của bạn cho iOS

Hướng dẫn xây dựng ứng dụng cho iOS phức tạp hơn Android một chút. Để có thông tin cập nhật nhất, bạn phải luôn sử dụng tài liệu đóng gói chính thức của Kivy. Bạn sẽ cần chạy các lệnh sau trước khi có thể đóng gói ứng dụng cho iOS trên máy Mac của mình

$ source bin/activate
8

Khi tất cả những thứ đó đã được cài đặt thành công, bạn sẽ cần biên dịch bản phân phối bằng các lệnh sau

$ source bin/activate
9

Nếu bạn gặp lỗi cho biết không thể tìm thấy

$ source bin/activate
52, thì hãy xem câu trả lời StackOverflow này để biết cách giải quyết vấn đề đó. Sau đó thử chạy lại các lệnh trên

Nếu bạn gặp phải lỗi SSL, thì có thể bạn chưa thiết lập OpenSSL của Python. Lệnh này sẽ khắc phục điều đó

$ python -m pip install kivy
0

Bây giờ hãy quay lại và thử chạy lại lệnh

$ source bin/activate
53

Khi bạn đã chạy thành công tất cả các lệnh trước đó, bạn có thể tạo dự án Xcode của mình bằng cách sử dụng tập lệnh

$ source bin/activate
53. Điểm đầu vào của ứng dụng chính của bạn phải được đặt tên là
$ source bin/activate
43 trước khi bạn tạo dự án Xcode. Đây là lệnh bạn sẽ chạy

$ python -m pip install kivy
1

Cần có một thư mục có tên

$ source bin/activate
56 với dự án Xcode của bạn trong đó. Bây giờ bạn có thể mở dự án đó trong Xcode và làm việc với nó từ đó. Lưu ý rằng nếu bạn muốn gửi ứng dụng của mình lên App Store, thì bạn sẽ phải tạo tài khoản nhà phát triển tại nhà phát triển. quả táo. com và trả phí hàng năm của họ

Loại bỏ các quảng cáo

Đóng gói ứng dụng của bạn cho Windows

Bạn có thể đóng gói ứng dụng Kivy của mình cho Windows bằng PyInstaller. Nếu bạn chưa từng sử dụng nó trước đây, thì hãy xem Sử dụng PyInstaller để dễ dàng phân phối các ứng dụng Python

Bạn có thể cài đặt PyInstaller bằng cách sử dụng

from kivy.app import App
from kivy.uix.label import Label

class MainApp[App]:
    def build[self]:
        label = Label[text='Hello from Kivy',
                      size_hint=[.5, .5],
                      pos_hint={'center_x': .5, 'center_y': .5}]

        return label

if __name__ == '__main__':
    app = MainApp[]
    app.run[]
1

$ python -m pip install kivy
2

Lệnh sau sẽ đóng gói ứng dụng của bạn

$ python -m pip install kivy
3

Lệnh này sẽ tạo một tệp thực thi Windows và một số tệp khác. Đối số

$ source bin/activate
58 cho PyInstaller biết rằng đây là ứng dụng có cửa sổ, chứ không phải ứng dụng dòng lệnh. Nếu bạn muốn PyInstaller tạo một tệp thực thi duy nhất, thì bạn có thể chuyển vào đối số
$ source bin/activate
59 ngoài
$ source bin/activate
58

Đóng gói ứng dụng của bạn cho macOS

Bạn có thể sử dụng PyInstaller để tạo tệp thực thi Mac giống như bạn đã làm cho Windows. Yêu cầu duy nhất là bạn chạy lệnh này trên máy Mac

$ python -m pip install kivy
4

Thao tác này sẽ tạo một tệp duy nhất có thể thực thi được trong thư mục

$ source bin/activate
61. Tệp thực thi sẽ có cùng tên với tệp Python mà bạn đã chuyển đến PyInstaller. Nếu bạn muốn giảm kích thước tệp của tệp thực thi hoặc bạn đang sử dụng GStreamer trong ứng dụng của mình, thì hãy xem trang đóng gói của Kivy dành cho macOS để biết thêm thông tin

Phần kết luận

Kivy là một khung GUI thực sự thú vị mà bạn có thể sử dụng để tạo giao diện người dùng trên máy tính để bàn và ứng dụng di động trên cả iOS và Android. Các ứng dụng Kivy sẽ không giống như các ứng dụng gốc trên bất kỳ nền tảng nào. Đây có thể là một lợi thế nếu bạn muốn ứng dụng của mình có giao diện khác với đối thủ cạnh tranh

Trong hướng dẫn này, bạn đã học những kiến ​​thức cơ bản về Kivy, bao gồm cách thêm tiện ích, kết nối sự kiện, bố trí nhiều tiện ích và sử dụng ngôn ngữ KV. Sau đó, bạn đã tạo ứng dụng Kivy đầu tiên của mình và học cách phân phối nó trên các nền tảng khác, bao gồm cả thiết bị di động

Có nhiều tiện ích và khái niệm về Kivy mà bạn chưa trình bày ở đây, vì vậy hãy nhớ xem trang web của Kivy để biết hướng dẫn, ứng dụng mẫu, v.v.

Đọc thêm

Để tìm hiểu thêm về Kivy, hãy xem các tài nguyên này

  • Hướng dẫn lập trình Kivy
  • Tài liệu Bao bì Kivy
  • Xây dựng ứng dụng GUI trên máy tính để bàn bằng Python

Để xem cách bạn có thể tạo ứng dụng máy tính để bàn với khung GUI Python khác, hãy xem Cách xây dựng ứng dụng GUI Python với wxPython

Đánh dấu là đã hoàn thành

Xem ngay Hướng dẫn này có một khóa học video liên quan do nhóm Real Python tạo. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn. Xây dựng ứng dụng GUI đa nền tảng với Kivy

🐍 Thủ thuật Python 💌

Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python

Gửi cho tôi thủ thuật Python »

Giới thiệu về Mike Driscoll

Mike đã lập trình bằng Python hơn một thập kỷ và thích viết về Python

» Thông tin thêm về Mike

Mỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là

Aldren

Geir Arne

Jaya

Joanna

Kyle

Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Chuyên gia Kỹ năng Python trong thế giới thực
Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Bạn nghĩ sao?

Đánh giá bài viết này

Tweet Chia sẻ Chia sẻ Email

Bài học số 1 hoặc điều yêu thích mà bạn đã học được là gì?

Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi

Tôi có thể sử dụng Python làm phần phụ trợ cho ứng dụng dành cho thiết bị di động không?

Python là một trong những ngôn ngữ lập trình được sử dụng nhiều nhất và có cơ sở nhà phát triển mạnh mẽ. 48% nhà phát triển sử dụng Python để phát triển phần phụ trợ chắc chắn, mạnh mẽ cho các ứng dụng . Nó được ưa thích nhờ tính dễ đọc, đơn giản và nhiều thư viện Python miễn phí giúp nhà phát triển làm việc hiệu quả và năng suất.

Tôi có thể sử dụng Python làm chương trình phụ trợ cho ứng dụng Android không?

Câu trả lời của tôi cho câu hỏi này là Có. Bạn chắc chắn có thể phát triển ứng dụng Android bằng Python . Và điều này không chỉ giới hạn ở python, trên thực tế, bạn có thể phát triển các ứng dụng Android bằng nhiều ngôn ngữ khác ngoài Java.

Ứng dụng di động có thể chạy Python không?

Python có thể được sử dụng trên nhiều nền tảng khác nhau như iOS, Android, điện thoại Windows và máy tính để bàn . Nhiều framework Python giúp xây dựng ứng dụng di động trong thời gian ngắn hơn. Một số trong số đó là Kivy, BeeWare hoặc PyQT. Ngoài ra, Python là một ngôn ngữ tuyệt vời để tạo nguyên mẫu và có thể thử nghiệm các ý tưởng mới khi đang di chuyển bằng một ứng dụng.

Chủ Đề