Hướng dẫn menu trong python
Mục lục bài viết:
Show
Nhấn vào ĐÂY để xem source code của bài viết. Khi nói đến việc phát triển các ứng dụng giao diện người dùng đồ họa (GUI) với Python và PyQt, một số phần tử đồ họa hữu ích và linh hoạt nhất mà bạn sẽ sử dụng là menu, thanh công cụ và thanh trạng thái. Các menu và thanh công cụ có thể làm cho các ứng dụng của bạn trông bóng bẩy và chuyên nghiệp, cung cấp cho người dùng một bộ tùy chọn có thể truy cập được, trong khi các thanh trạng thái cho phép bạn hiển thị thông tin liên quan về trạng thái của ứng dụng. Trong hướng dẫn này, bạn sẽ học:
Ngoài ra, bạn sẽ học một số phương pháp lập trình hay nhất mà bạn có thể áp dụng khi tạo menu, thanh công cụ và thanh trạng thái bằng Python và PyQt. Nếu bạn chưa quen với lập trình GUI với PyQt, thì bạn có thể xem Python và PyQt: Xây dựng Máy tính để bàn GUI. Xây dựng thanh menu, menu và thanh công cụ Python trong PyQtMột thanh menu là một khu vực của một ứng dụng GUI của cửa sổ chính chứa các menu. Menu là danh sách các tùy chọn kéo xuống cung cấp khả năng truy cập thuận tiện vào các tùy chọn của ứng dụng của bạn. Ví dụ: nếu bạn đang tạo một trình soạn thảo văn bản, thì bạn có thể có một số menu sau trong thanh menu của mình:
Bạn cũng có thể thêm một số tùy chọn này vào thanh công cụ. Thanh công cụ là một bảng gồm các nút với các biểu tượng có ý nghĩa giúp truy cập nhanh vào các tùy chọn thường được sử dụng nhất trong một ứng dụng. Trong ví dụ về trình soạn thảo văn bản của bạn, bạn có thể thêm các tùy chọn như New, Open, Save, Copy và Paste vào thanh công cụ.
Trong phần này, bạn sẽ tìm hiểu những kiến thức cơ bản về cách thêm thanh menu, menu và thanh công cụ vào các ứng dụng GUI của bạn với Python và PyQt. Trước khi tiếp tục, bạn sẽ tạo một ứng dụng PyQt mẫu mà bạn sẽ sử dụng trong suốt hướng dẫn này. Trong mỗi phần, bạn sẽ thêm các tính năng và chức năng mới vào ứng dụng mẫu này. Ứng dụng này sẽ là một ứng dụng kiểu cửa sổ chính. Điều này có nghĩa là nó sẽ có thanh menu, thanh công cụ, thanh trạng thái và tiện ích trung tâm. Mở trình soạn thảo mã hoặc IDE yêu thích của bạn và tạo một tệp Python có tên
Bây giờ Trong trình khởi tạo lớp Tiện ích trung tâm của cửa sổ là một đối tượng QLabel mà bạn sẽ sử dụng để hiển thị thông báo phản hồi lại các hành động nhất định của người
dùng. Các thông báo này sẽ hiển thị ở giữa cửa sổ. Để làm điều này, bạn gọi Nếu bạn chạy ứng dụng từ dòng lệnh của mình, thì bạn sẽ thấy cửa sổ sau trên màn hình của bạn: Như vậy bạn đã tạo được một ứng dụng kiểu cửa sổ chính với Python và PyQt. Bạn sẽ sử dụng ứng dụng mẫu này cho tất cả các ví dụ dưới đây trong bài viết này. Tạo thanh menuTrong ứng dụng kiểu cửa sổ chính PyQt, Bây giờ quay lại ứng dụng mẫu của bạn và thêm phương thức sau vào định nghĩa của
Đây là cách ưa thích để tạo thanh menu trong PyQt. Tại đây, biên
Một cách khác để thêm thanh menu vào các ứng dụng PyQt của bạn là tạo một đối tượng
Trong ví dụ trên, Trong ứng dụng GUI, thanh menu sẽ được hiển thị ở các vị trí khác nhau tùy thuộc vào hệ điều hành cơ bản:
Bước cuối cùng để tạo thanh menu cho ứng dụng của bạn là gọi
Nếu bạn chạy ứng dụng mẫu của mình với những thay đổi mới này, thì bạn sẽ không thấy thanh menu hiển thị trên cửa sổ chính của ứng dụng. Đó là bởi vì thanh menu của bạn vẫn còn trống. Để xem thanh menu trên cửa sổ chính của ứng dụng, bạn cần tạo một số menu. Đó là những gì bạn sẽ học ở phần tiếp sau. Thêm menu vào thanh menuMenu là danh sách kéo xuống các tùy chọn menu mà bạn có thể kích hoạt bằng cách nhấp vào chúng hoặc bằng cách nhấn phím tắt. Có ít nhất ba cách để thêm menu vào đối tượng thanh menu trong PyQt:
Nếu bạn sử dụng tùy chọn đầu tiên, thì trước tiên bạn cần tạo các đối tượng
Trong cả hai trường hợp, Đây là cách bạn có thể thêm các menu File, Edit và Help vào thanh menu của ứng
dụng mẫu của mình:
Trong đoạn code trên, đầu tiên bạn import Kết quả là bạn sẽ thấy rằng bây giờ bạn có một thanh menu như sau: Thanh menu của ứng dụng có các menu File, Edit và Help. Khi bạn nhấp vào các menu này, chúng không hiển thị danh sách tùy chọn menu kéo xuống. Đó là bởi vì bạn chưa thêm các tùy chọn menu. Bạn sẽ học cách thêm các tùy chọn menu vào menu trong phần Tạo menu bằng hành động. Cuối cùng, hãy lưu ý rằng ký tự dấu và ( Tạo thanh công cụMột thanh công cụ là một bảng điều khiển di chuyển giữ các nút và các widget khác để cung cấp các tùy chọn phổ biến nhất của một ứng dụng GUI truy cập nhanh. Các nút trên thanh công cụ có thể hiển thị các biểu tượng, văn bản hoặc cả hai để thể hiện tác vụ mà chúng thực hiện. Lớp cơ sở cho các thanh công cụ trong PyQt là QToolBar. Lớp này sẽ cho phép bạn tạo các thanh công cụ tùy chỉnh cho các ứng dụng GUI của mình. Khi bạn thêm thanh công cụ vào ứng dụng kiểu cửa sổ chính, vị trí mặc định là ở đầu cửa sổ. Tuy nhiên, bạn có thể đặt thanh công cụ vào bất kỳ một trong bốn khu vực thanh công cụ sau:
Các vùng trên thanh công cụ được định nghĩa là các hằng số trong PyQt. Nếu bạn cần sử dụng chúng, thì bạn phải import Có ba cách để thêm thanh công cụ vào ứng dụng cửa sổ chính của bạn trong PyQt:
Nếu bạn sử dụng một trong hai tùy chọn cuối cùng, thì bạn cần tự tạo thanh công cụ. Để thực hiện việc này, bạn có thể sử dụng một trong các hàm tạo sau:
Trong cả hai trường hợp, Bây giờ bạn có thể quay lại ứng dụng mẫu của mình và thêm phương thức sau vào
Đầu tiên, bạn import Bước cuối cùng để thực hiện công việc này là gọi
Lệnh gọi Bây giờ bạn có hai thanh công cụ ngay bên dưới thanh menu và một thanh công cụ dọc theo bên trái của cửa sổ. Mỗi thanh công cụ có một đường chấm kép. Khi bạn di chuyển chuột qua các đường chấm, con trỏ sẽ chuyển thành bàn tay. Nếu bạn nhấp và giữ trên đường chấm chấm, thì bạn có thể di chuyển thanh công cụ đến bất kỳ vị trí hoặc khu vực thanh công cụ nào khác trên cửa sổ. Nếu bạn nhấp chuột phải vào thanh công cụ, thì PyQt sẽ hiển thị menu ngữ cảnh cho phép bạn ẩn và hiển thị các thanh công cụ hiện có theo nhu cầu của bạn. Như vậy là bạn có ba thanh công cụ trên cửa sổ ứng dụng của mình. Các thanh công cụ này vẫn trống — bạn sẽ cần thêm một số nút trên thanh công cụ để làm cho chúng hoạt động. Để làm điều đó, bạn có thể sử dụng các hành động PyQt, là các trường hợp của QAction. Bạn sẽ học cách tạo các hành động trong PyQt trong phần sau. Hiện tại, bạn sẽ học cách sử dụng các biểu tượng và các tài nguyên khác trong các ứng dụng PyQt của mình. Sử dụng các Icon và tài nguyên trong PyQtCác thư viện Qt bao gồm các hệ thống tài nguyên Qt, đây là một cách thuận tiện để thêm các tập tin nhị phân như biểu tượng, hình ảnh, tệp dịch thuật và các nguồn khác cho các ứng dụng của bạn. Để sử dụng hệ thống tài nguyên, bạn cần liệt kê các tài nguyên của mình trong một tệp thu thập tài nguyên hoặc một tệp Giả sử rằng ứng dụng mẫu của bạn có một thư mục
Mỗi mục nhập
Khi bạn có tài nguyên cho ứng dụng của mình, bạn có thể chạy công cụ dòng lệnh là pyrcc5 với đích là file
Lệnh này sẽ đọc
Đây là một đoạn mã
Với file Nếu bạn có bí danh, nhưng vì lý do nào đó mà bạn muốn truy cập vào một tài nguyên nhất định bằng đường dẫn của nó, thì bạn có thể phải xóa dấu hai chấm khỏi chuỗi truy cập để làm cho điều này hoạt động bình thường. Để sử dụng các biểu tượng trong các hành động của mình, trước tiên bạn cần import mô-đun tài nguyên của mình:
Khi bạn đã nhập mô-đun có chứa tài nguyên của mình, bạn có thể sử dụng tài nguyên trong GUI của ứng dụng.
Để tạo một biểu tượng bằng hệ thống tài nguyên, bạn cần khởi tạo QIcon, truyền bí danh hoặc đường dẫn đến hàm tạo của lớp như sau:
Trong ví dụ trên, bạn tạo một đối tượng Bây giờ quay lại ứng dụng mẫu của bạn và cập nhật dòng cuối cùng của
Để mã này hoạt động, trước tiên bạn cần import Nếu bạn chạy ứng dụng mẫu của mình với bản cập nhật này, thì bạn sẽ nhận được kết quả sau: Cửa sổ chính của ứng dụng hiện hiển thị một biểu tượng trên menu Help của ứng dụng. Khi bạn nhấp vào biểu tượng, menu sẽ hiển thị văn bản Tạo Hành động cho Trình đơn Python và Thanh công cụ trong PyQtCác hành động PyQt là các đối tượng đại diện cho một lệnh, hoạt động hoặc hành động nhất định trong một ứng dụng. Chúng hữu ích khi bạn cần cung cấp cùng một chức năng cho các thành phần GUI khác nhau, chẳng hạn như tùy chọn menu, nút trên thanh công cụ và phím tắt. Bạn có thể tạo các hành động bằng cách khởi tạo Bạn cũng cần kết nối các hành động của mình với một số chức năng. Nói cách khác, bạn cần kết nối chúng với hàm hoặc phương thức mà bạn muốn chạy khi hành động được kích hoạt. Điều này sẽ cho phép ứng dụng của bạn thực hiện các hoạt động để phản hồi lại các hành động của người dùng trong GUI. Các hành động khá linh hoạt. Chúng cho phép bạn sử dụng lại và giữ đồng bộ cùng một chức năng trên các tùy chọn menu, nút trên thanh công cụ và phím tắt. Điều này cung cấp một hành vi nhất quán trong suốt ứng dụng. Ví dụ: người dùng có thể mong đợi ứng dụng thực hiện hành động tương tự khi họ nhấp vào tùy chọn menu Open… , nhấp vào nút Open thanh công cụ hoặc nhấn Ctrl+O trên bàn phím của họ.
Để tạo các hành động, bạn cần phải khởi tạo
Trong cả ba trường hợp, Trong hàm tạo thứ hai và thứ ba, Văn bản của một hành động hiển thị
khác nhau trên các tùy chọn menu và các nút trên thanh công cụ. Ví dụ: văn bản Trong hàm tạo thứ ba,
Bạn cũng có thể thiết lập văn bản và icon của hành động sử dụng các phương thức set tương ứng là
Đây là cách bạn có thể tạo một số hành động cho ứng dụng
mẫu của mình bằng cách sử dụng các hàm tạo khác nhau của
Trong Lưu ý rằng bạn đang tạo các hành động dưới dạng thuộc tính của đối tượng, vì vậy bạn có thể
truy cập chúng từ bên ngoài
Bước tiếp theo là gọi
Nếu bạn chạy ứng dụng ngay bây giờ, thì bạn sẽ không thấy bất kỳ thay đổi nào trên GUI. Đó là bởi vì các hành động không được hiển thị cho đến khi chúng được thêm vào menu hoặc thanh công cụ. Lưu ý rằng bạn gọi Nếu bạn thêm một hành động vào menu, thì hành động đó sẽ trở thành một tùy chọn menu. Nếu bạn thêm một hành động vào thanh công cụ, thì hành động đó sẽ trở thành một nút trên thanh công cụ. Đây là chủ đề cho một số phần tiếp theo dưới đây. Thêm tùy chọn vào menu Python trong PyQtNếu bạn muốn
thêm danh sách các tùy chọn vào một menu nhất định trong PyQt, thì bạn cần phải sử dụng các hành động. Cho đến nay, bạn đã học cách tạo các hành động bằng cách sử dụng các hàm tạo khác nhau của Trong phần này, bạn sẽ học cách sử dụng các hành động để điền vào menu các tùy chọn menu. Tạo menu bằng các hành độngĐể điền các menu với các tùy chọn menu, bạn sẽ sử dụng các hành động. Trong menu, một hành động được biểu thị dưới dạng tùy chọn ngang có ít nhất một văn bản mô tả như New, Open, Save, v.v. Các tùy chọn menu cũng có thể hiển thị một biểu tượng ở bên trái và chuỗi phím tắt, chẳng hạn như Ctrl+S ở bên phải của nó. Bạn có thể thêm các hành động vào một đối tượng
Đối số
Với công cụ này, bạn có thể bắt đầu thêm các hành động vào menu của ứng dụng mẫu của mình. Để thực hiện
việc này, bạn cần cập nhật
Với bản cập nhật code này cho Bây giờ menu File có bốn tùy chọn:
Menu Edit có ba lựa chọn:
Menu Help có hai lựa chọn:
Thứ tự các tùy chọn được hiển thị trong menu từ trên xuống dưới tương ứng với thứ tự mà bạn thêm các tùy chọn trong mã của mình. Nếu bạn chạy ứng dụng, thì bạn sẽ thấy cửa sổ sau trên màn hình của mình: Nếu bạn nhấp vào menu, thì ứng dụng sẽ hiển thị danh sách kéo xuống với các tùy chọn bạn đã thấy trước đó. Tạo menu conĐôi khi bạn cần sử dụng menu con trong các ứng dụng
GUI của mình. Menu con là một menu lồng nhau hiển thị trong khi bạn di chuyển con trỏ qua một tùy chọn menu nhất định. Để thêm menu con vào ứng dụng, bạn cần gọi Giả sử bạn cần thêm menu con trong menu Edit của ứng dụng mẫu. Menu con của bạn sẽ chứa các tùy chọn để tìm và thay thế nội dung, vì vậy bạn sẽ gọi nó là Find and Replace. Menu con này sẽ có hai tùy chọn:
Dưới đây là cách bạn có thể thêm menu con này vào ứng dụng mẫu của mình:
Trong dòng đầu tiên được đánh dấu, bạn thêm một đối tượng Menu Edit bây giờ có một mục gọi là Find and Replace. Khi bạn di chuột qua tùy chọn menu mới này, một menu con sẽ xuất hiện, hiển thị cho bạn hai tùy chọn mới, Find… và Replace… . Bây giờ bạn đã tạo được một menu con. Thêm tùy chọn vào thanh công cụ trong PyQtThanh công cụ là một thành phần khá hữu ích khi nói đến việc xây dựng các ứng dụng GUI với Python và PyQt. Bạn có thể sử dụng thanh công cụ để giới thiệu cho người dùng một cách nhanh chóng để truy cập vào các tùy chọn thường được sử dụng nhất trong ứng dụng của bạn. Bạn cũng có thể thêm các widget như spin box và combo box vào thanh công cụ để cho phép người dùng sửa đổi trực tiếp một số thuộc tính và biến từ GUI của ứng dụng. Trong một vài phần sau, bạn sẽ học cách thêm các tùy chọn hoặc nút vào thanh công cụ của mình bằng các thao tác và cả cách thêm tiện ích con vào thanh công cụ Tạo thanh công cụ bằng các hành độngĐể thêm các tùy chọn hoặc nút vào thanh công cụ, bạn cần gọi Khi bạn tạo các thanh công cụ, bạn sẽ thường gặp phải vấn đề là phải quyết định những tùy chọn nào để thêm vào chúng. Thông thường, bạn sẽ chỉ muốn thêm các hành động được sử dụng thường xuyên nhất vào các thanh công cụ của mình. Nếu bạn quay lại ứng dụng mẫu của mình, thì bạn sẽ nhớ rằng bạn đã thêm ba thanh công cụ:
Trong thanh công cụ File, bạn có thể thêm các tùy chọn như sau:
Trong thanh công cụ Edit, bạn có thể thêm các tùy chọn sau:
Thông thường, khi bạn muốn thêm các nút vào thanh công cụ, thì trước tiên bạn chọn các biểu tượng mà bạn muốn sử dụng trên mỗi nút. Điều này không bắt buộc, nhưng đó là một phương pháp hay nhất. Khi bạn đã chọn các biểu tượng, bạn cần thêm chúng vào các hành động tương ứng của chúng. Dưới đây là cách bạn có thể thêm các biểu tượng vào các hành động của ứng dụng mẫu của
mình:
Để thêm các biểu tượng vào hành động của mình, bạn cập nhật các dòng được đánh dấu. Trong trường hợp Sau khi các hành động đã chọn của bạn có biểu tượng, bạn có thể thêm các hành động này vào thanh công cụ tương ứng của chúng bằng cách gọi
Với bản cập nhật code này cho
Nếu bạn chạy ứng dụng mẫu của mình ngay bây giờ, thì bạn sẽ thấy cửa sổ sau trên màn hình của mình: Ứng dụng mẫu hiện hiển thị hai thanh công cụ với một vài nút mỗi thanh. Người dùng của bạn có thể nhấp vào các nút này để truy cập nhanh vào các tùy chọn được sử dụng phổ biến nhất của ứng dụng.
Lưu ý rằng, vì bạn chia sẻ các hành động giống nhau giữa các menu và thanh công cụ, nên các tùy chọn menu cũng sẽ hiển thị các biểu tượng ở phía bên trái của chúng, đây là một cải tiến lớn về năng suất và sử dụng tài nguyên. Đây là một trong những lợi thế của việc sử dụng các hành động PyQt để tạo menu và thanh công cụ với Python. Thêm tiện ích vào Thanh công cụTrong một số trường hợp, bạn sẽ thấy hữu ích khi thêm các tiện ích cụ thể như hộp quay, hộp tổ hợp hoặc các tiện ích khác vào thanh công cụ. Một ví dụ phổ biến về điều này là các hộp tổ hợp mà hầu hết các trình xử lý văn bản sử dụng để cho phép người dùng thay đổi phông chữ của tài liệu hoặc kích thước của văn bản đã chọn. Để thêm tiện ích con vào thanh công cụ, trước tiên bạn cần tạo tiện ích con, thiết lập các thuộc tính của nó và sau đó gọi đối tượng Giả sử bạn muốn thêm một đối tượng
Ở đây, trước tiên bạn import lớp spin box. Sau đó, bạn tạo một đối tượng
Bây giờ, nếu bạn chạy ứng dụng, thì bạn sẽ nhận được kết quả sau: Tại đây, thanh công cụ Edit hiển thị một đối tượng Tùy chỉnh thanh công cụCác thanh công cụ PyQt khá linh hoạt và có thể tùy chỉnh. Bạn có thể đặt một loạt các thuộc tính trên một đối tượng thanh công cụ. Một số thuộc tính hữu ích nhất được hiển thị trong bảng sau:
Tất cả các thuộc tính này đều có một phương thức setter liên quan. Ví dụ, bạn có thể sử dụng Bây giờ, giả sử bạn không muốn người dùng của mình di chuyển thanh công cụ File xung quanh cửa sổ. Trong trường hợp này, bạn có thể đặt
Dòng được đánh dấu làm nên điều kỳ diệu ở đây. Giờ đây, người dùng của bạn không thể di chuyển thanh công cụ xung quanh cửa sổ của ứng dụng: Các file trên thanh công cụ không hiển thị các đường chấm chấm đôi nữa, vì vậy người dùng sẽ không thể di chuyển nó. Lưu ý rằng thanh công cụ Edit vẫn có thể di chuyển được. Bạn có thể thay đổi các thuộc tính khác trên thanh công cụ của mình bằng cách sử dụng cùng cách tiếp cận này và tùy chỉnh chúng theo nhu cầu của bạn. Tổ chức Menu và Tùy chọn Thanh công cụĐể thêm rõ ràng và cải thiện trải nghiệm người dùng trong các ứng dụng GUI của mình, bạn có thể sắp xếp các tùy chọn menu và nút trên thanh công cụ bằng cách sử dụng dấu phân cách. Dấu phân cách hiển thị dưới dạng một đường ngang phân định hoặc ngăn cách, các tùy chọn menu hoặc như một đường thẳng đứng phân tách các nút trên thanh công cụ. Để
chèn hoặc thêm dấu phân tách vào đối tượng menu, menu con hoặc thanh công cụ, bạn có thể gọi Ví dụ: bạn có thể sử dụng dấu phân tách để tách tùy chọn Exit trên menu File của mình khỏi phần còn lại của các tùy chọn chỉ để làm rõ rằng Exit không liên quan về mặt logic với các tùy chọn còn lại trên menu. Bạn cũng có thể sử dụng dấu phân tách để tách tùy chọn Find and Replace trên menu Edit với phần còn lại của các tùy chọn theo cùng một quy tắc. Đi tới ứng dụng mẫu của bạn và cập nhật
Trong dòng đầu tiên được đánh dấu, bạn thêm dấu phân cách giữa các tùy chọn Save và Exit trong menu File. Trong dòng được đánh dấu thứ hai, bạn thêm dấu phân tách để phân tách tùy chọn Find and Replace với phần còn lại của các tùy chọn trong menu Edit. Sau đây là cách những bổ sung này hoạt động: Menu File của bạn bây giờ hiển thị một đường ngang ngăn cách tùy chọn Edit với phần còn lại của các tùy chọn trong trình đơn. Menu Edit cũng cho thấy một dấu phân tách ở cuối danh sách thả xuống của tùy chọn. Việc sử dụng nhất quán dấu phân cách có thể cải thiện một cách tinh tế độ rõ ràng của các menu và thanh công cụ, làm cho các ứng dụng GUI của bạn thân thiện hơn với người dùng. Bài tập: bạn có thể đi tới định nghĩa Xây dựng menu ngữ cảnh hoặc menu bật lên trong PyQtMenu ngữ cảnh, còn được gọi là menu bật lên, là một loại menu đặc biệt xuất hiện để phản ứng với các hành động nhất định của người dùng, chẳng hạn như nhấp chuột phải vào một tiện ích hoặc cửa sổ nhất định. Các menu này cung cấp một danh sách nhỏ các tùy chọn có sẵn trong ngữ cảnh nhất định của hệ điều hành hoặc ứng dụng mà bạn đang sử dụng. Ví dụ: nếu bạn nhấp chuột phải vào màn hình của máy Windows, thì bạn sẽ nhận được một menu với các tùy chọn tương ứng với ngữ cảnh hoặc không gian cụ thể đó của hệ điều hành. Nếu bạn nhấp chuột phải vào không gian làm việc của một trình soạn thảo văn bản, thì bạn sẽ nhận được một menu ngữ cảnh hoàn toàn khác tùy thuộc vào trình soạn thảo bạn đang sử dụng. Trong PyQt, bạn có một số tùy chọn để tạo menu ngữ cảnh. Trong hướng dẫn này, bạn sẽ tìm hiểu về hai trong số các tùy chọn đó:
Tùy chọn đầu tiên là tùy chọn phổ biến và thân thiện với người dùng nhất trong hai tùy chọn này, vì vậy bạn sẽ tìm hiểu về nó trước. Tùy chọn thứ hai phức tạp hơn một chút và dựa vào việc xử lý các sự kiện của người dùng. Trong lập trình GUI, sự kiện là bất kỳ hành động nào của người dùng trên ứng dụng, chẳng hạn như nhấp vào nút hoặc menu, chọn một mục từ hộp tổ hợp, nhập hoặc cập nhật văn bản trong trường văn bản, nhấn một phím trên bàn phím, v.v. . Tạo menu ngữ cảnh thông qua chính sách menu ngữ cảnhTất cả các thành phần hoặc tiện ích đồ họa PyQt có nguồn gốc từ việc Để làm cho một tiện ích hiển thị menu ngữ cảnh dựa trên các hành động bên trong của nó, bạn cần thực hiện hai bước:
Thiết lập Với kỹ thuật này, bạn có thể thêm menu ngữ cảnh vào tiện ích con trung tâm của ứng dụng mẫu và cung cấp cho người dùng cách truy cập nhanh vào một số tùy chọn của ứng dụng. Để làm điều đó, bạn có thể thêm phương thức sau vào
Trong
Nếu bạn chạy ứng dụng mẫu của mình sau những lần bổ sung này, thì bạn sẽ thấy tiện ích con trung tâm của ứng dụng hiển thị menu ngữ cảnh khi bạn nhấp chuột phải vào nó: Bây giờ ứng dụng mẫu của bạn có một menu ngữ cảnh bật lên bất cứ khi nào bạn nhấp chuột phải vào tiện ích trung tâm của ứng dụng. Tiện ích trung tâm trải dài để chiếm tất cả không gian có sẵn trong cửa sổ, vì vậy bạn không bị giới hạn khi nhấp chuột phải vào văn bản nhãn để xem menu ngữ cảnh. Cuối cùng, vì bạn sử dụng các hành động giống nhau trong toàn bộ ứng dụng này nên các tùy chọn trên menu ngữ cảnh sẽ hiển thị cùng một bộ biểu tượng. Tạo menu ngữ cảnh thông qua xử lý sự kiệnMột cách thay thế để tạo menu ngữ cảnh trong PyQt là xử lý sự kiện menu ngữ cảnh của cửa sổ chính của ứng dụng. Để thực hiện việc này, bạn cần thực hiện các bước sau:
Cách quản lý menu ngữ cảnh này phức tạp hơn một chút. Tuy nhiên, nó cho phép bạn kiểm soát tốt những gì xảy ra khi trình đơn ngữ cảnh được gọi. Ví dụ: bạn có thể bật hoặc tắt các tùy chọn menu tùy theo trạng thái của ứng dụng, v.v.
Đây là cách bạn có thể thực hiện lại menu ngữ cảnh của ứng dụng mẫu của mình, ghi đè phương thức xử lý sự kiện trên đối tượng cửa sổ chính:
Trong Đối số thứ hai của Trong lệnh gọi tới Nếu bạn chạy ứng dụng mẫu của mình với những thay đổi mới này, thì bạn sẽ nhận được kết quả tương tự như bạn đã nhận được trong phần trước. Tổ chức các tùy chọn menu ngữ cảnhKhông giống như trong menu và thanh công
cụ, trong menu ngữ cảnh, bạn không thể sử dụng
Lời gọi đến Nếu bạn nhìn lại ứng dụng mẫu của mình, thì bạn có thể muốn tách các tùy chọn đến từ menu File với các tùy chọn đến từ menu Edit. Để làm điều đó, bạn có thể cập nhật
Trong hai dòng được đánh dấu đầu tiên, bạn tạo hành động phân tách. Trong dòng đánh dấu thứ ba, bạn thêm hành động phân tách vào menu bằng cách sử dụng Thao tác này sẽ thêm một đường ngang giữa tùy chọn File và tùy chọn Edit. Đây là kết quả bạn nhận được: Bây giờ menu ngữ cảnh của bạn bao gồm một đường ngang phân tách trực quan các tùy chọn đến từ File với các tùy chọn đến từ Edit. Với điều này, bạn đã cải thiện chất lượng hình ảnh của menu và cung cấp trải nghiệm người dùng tốt hơn. Kết nối Tín hiệu và Khe cắm trong Menu và Thanh công cụTrong PyQt, bạn sử dụng các tín hiệu (signal) và khe cắm (slot) để cung cấp chức năng cho các ứng dụng GUI của mình. Các widget PyQt phát ra tín hiệu mỗi khi một sự kiện như nhấp chuột, nhấn phím hoặc thay đổi kích thước cửa sổ xảy ra trên chúng. Một khe cắm là một callable Python mà bạn có thể kết nối với tín hiệu của một widget để thực hiện một số hành động để đáp ứng với sự kiện người dùng. Nếu một tín hiệu và một khe cắm được kết nối, thì khe cắm sẽ được gọi tự động mỗi khi tín hiệu được phát ra. Nếu một tín hiệu nhất định không được kết nối với một khe cắm, thì sẽ không có gì xảy ra khi tín hiệu được phát ra. Để làm cho các tùy chọn menu và nút trên thanh công cụ của bạn khởi chạy một số hoạt động khi người dùng nhấp vào chúng, bạn cần kết nối tín hiệu của các hành động cơ bản với một số vị trí tùy chỉnh hoặc được tích hợp sẵn. Các đối
tượng QAction có thể phát ra nhiều loại tín hiệu. Tuy nhiên, tín hiệu được sử dụng phổ biến nhất trong menu và thanh công cụ là
Trong ví dụ này, Bạn đã có một tập hợp các hành động trong ứng dụng mẫu của mình. Bây giờ bạn cần mã hóa các vị trí mà bạn sẽ gọi mỗi khi người dùng nhấp vào tùy chọn menu hoặc nút trên thanh công cụ. Đi tới định nghĩa của
Các phương thức này sẽ đóng vai trò của các khe cắm của ứng dụng mẫu của bạn. Chúng sẽ được gọi mỗi khi người dùng nhấp vào tùy chọn menu hoặc nút thanh công cụ tương ứng. Khi bạn có các khe cung cấp chức năng, bạn cần kết nối chúng với tín hiệu
Phương
thức này sẽ kết nối tất cả các tín hiệu Trong trường hợp Cuối cùng, đi tới trình khởi tạo của
Với bản cập nhật cuối cùng này, bạn có thể chạy lại ứng dụng. Kết quả sẽ có dạng như sau: Nếu bạn nhấp vào tùy chọn menu, nút thanh công cụ hoặc tùy chọn menu ngữ cảnh, thì nhãn ở giữa cửa sổ ứng dụng sẽ hiển thị thông báo cho biết hành động đã được thực thi. Chức năng này không hữu ích lắm ngoài bối cảnh học tập, nhưng nó cung cấp cho bạn ý tưởng về cách làm cho các ứng dụng của bạn thực hiện các hành động trong thế giới thực khi người dùng tương tác với GUI. Cuối cùng, khi bạn chọn File → Exit, ứng dụng sẽ đóng vì tín hiệu Bài tập: Bạn
có thể thử tạo các vị trí tùy chỉnh cho các tùy chọn Find… và Replace… trong menu con Find and Replace, sau đó kết nối tín hiệu Đưa vào menu Python một cách độngKhi tạo menu cho một ứng dụng, đôi khi bạn sẽ cần điền các menu đó với các tùy chọn chưa được biết vào thời điểm bạn tạo GUI của ứng dụng. Ví dụ: menu Open Recent trong trình soạn thảo văn bản hiển thị danh sách các tài liệu đã mở gần đây. Bạn không thể điền menu này vào lúc tạo GUI của ứng dụng vì mỗi người dùng sẽ mở các tài liệu khác nhau và không có cách nào để biết trước thông tin này. Trong trường hợp này, bạn cần điền động các menu để phản hồi lại các hành động
của người dùng hoặc trạng thái của ứng dụng. Để tiếp tục phát triển ứng dụng mẫu của mình, giả sử bạn cần tạo menu con Open Recent trong File và tự động điền nó vào các tệp hoặc tài liệu đã mở gần đây. Để thực hiện việc này, bạn cần thực hiện các bước sau:
Đây là mã để tạo menu con:
Trong dòng được đánh dấu, bạn thêm một menu con bên dưới menu File với tiêu đề Bạn có thể thực hiện việc này bằng cách viết mã một phương thức để tạo động các hành động và thêm chúng vào menu con. Dưới đây là một ví dụ cho thấy logic chung mà bạn có thể sử dụng:
Trong Trong vòng lặp for, bạn sử dụng functools.partial() để kết nối tín hiệu
Bước tiếp theo là kết nối tính hiệu
Trong dòng được đánh dấu, bạn kết nối tín
hiệu Bây giờ bạn cần phải viết mã
Phương thức này sẽ cập nhật văn bản của đối tượng Dưới đây là cách menu con được tạo động của bạn hoạt động trong thực tế: Khi con trỏ chuột của bạn di chuột qua menu Open Recent, menu sẽ phát ra tín hiệu Định nghĩa phím tắt cho các tùy chọn menu và thanh công cụPhím tắt là một tính năng quan trọng trong ứng dụng GUI. Phím tắt là tổ hợp phím mà bạn có thể nhấn trên bàn phím để truy cập nhanh vào một số tùy chọn phổ biến nhất trong một ứng dụng. Dưới đây là một số ví dụ về phím tắt:
Trong phần bên dưới, bạn sẽ tìm hiểu cách thêm phím tắt vào ứng dụng của mình để cải thiện năng suất và trải nghiệm của người dùng. Sử dụng chuỗi khóaCho đến nay, bạn đã biết rằng
Hàm tạo đầu tiên nhận ra các chuỗi sau:
Bạn có thể tạo chuỗi dựa trên chuỗi khóa khóa bằng cách kết hợp những chuỗi này với các chữ cái, dấu chấm câu, chữ số, tên phím (
Hàm tạo thứ hai rất hữu ích nếu bạn đang phát triển một ứng dụng đa nền tảng và muốn tuân theo các phím tắt tiêu chuẩn cho từng nền
tảng. Ví dụ: Với nền tảng chung này về cách xác định phím tắt cho các tác vụ trong PyQt, bạn có thể quay lại ứng dụng mẫu của mình và thêm một số phím tắt. Để thực hiện việc này, bạn cần cập nhật
Trước tiên bạn cần import Nếu bạn chạy ứng dụng mẫu với những bổ sung này, thì các menu của bạn sẽ trông như thế này: Các tùy chọn menu của bạn hiện hiển thị một phím tắt ở phía bên phải của chúng. Nếu bạn nhấn bất kỳ tổ hợp phím nào trong số này, thì bạn sẽ thực hiện hành động tương ứng. Sử dụng trình tăng tốc bàn phímCó một giải pháp thay thế khác là bạn có thể sử dụng để thêm phím tắt hoặc trình tăng tốc bàn phím (keyboard accelerator), vào các tùy chọn menu của các ứng dụng của bạn. Bạn có thể nhận thấy rằng khi bạn đặt văn bản cho một menu hoặc một tùy chọn menu, bạn thường chèn một ký hiệu và (
Trong trường hợp thanh menu, việc sử dụng dấu & cho phép bạn gọi bất kỳ menu nào bằng cách nhấn Alt kết hợp với chữ cái được gạch dưới trong tiêu đề menu. Khi bạn đã khởi chạy menu, bạn có thể truy cập bất kỳ tùy chọn menu nào bằng cách nhấn vào chữ cái được gạch chân trong văn bản của tùy chọn. Ví dụ, trong File bạn có thể truy cập vào tùy chọn Exit bằng cách nhấn vào chữ E.
Tính năng này sẽ cho phép bạn cung cấp trình tăng tốc bàn phím nhanh cho những người dùng thích sử dụng bàn phím của họ để làm việc với các ứng dụng của bạn. Kỹ thuật này đặc biệt hữu ích cho các tùy chọn không cung cấp phím tắt rõ ràng. Tạo menu và thanh công cụ: Các phương pháp và mẹo hay nhấtKhi bạn đang tạo menu và thanh công cụ bằng Python và PyQt, bạn nên tuân theo một số tiêu chuẩn thường được coi là thực tiễn tốt nhất trong lập trình GUI:
Nếu bạn tuân theo các nguyên tắc này, thì các ứng dụng GUI của bạn sẽ cung cấp trải nghiệm quen thuộc và hấp dẫn cho người dùng của bạn. Xây dựng thanh trạng thái Python trong PyQtMột thanh trạng thái là một bảng điều khiển ngang mà thường được đặt ở dưới cùng của cửa sổ chính trong một ứng dụng GUI. Mục đích chính của nó là hiển thị thông tin về trạng thái hiện tại của ứng dụng. Thanh trạng thái cũng có thể được chia thành các phần để hiển thị các thông tin khác nhau trên mỗi phần. Theo tài liệu Qt, có ba loại chỉ báo trạng thái:
Bạn có thể thêm thanh trạng thái vào ứng dụng kiểu cửa sổ chính của mình bằng một trong các tùy chọn sau:
Tại đây, bạn có hai cách triển khai thay thế để thêm thanh trạng thái vào ứng dụng mẫu của mình:
Cả hai cách triển khai đều tạo ra cùng một kết quả. Tuy nhiên, hầu hết thời gian, bạn sẽ sử dụng triển khai đầu tiên để tạo các thanh trạng thái của mình. Lưu ý rằng để triển
khai thứ hai hoạt động, bạn cần phải import Thêm một trong các triển khai ở trên vào Ứng dụng của bạn bây giờ có một thanh trạng thái ở cuối cửa sổ chính. Thanh trạng thái gần như vô hình, nhưng nếu bạn nhìn kỹ, bạn sẽ nhận thấy một hình tam giác chấm nhỏ ở góc dưới bên phải của cửa sổ. Hiển thị Thông báo Trạng thái Tạm thờiMục đích chính của thanh trạng thái là hiển thị thông tin trạng thái cho người dùng ứng dụng của bạn. Để hiển thị thông báo trạng thái tạm thời trên thanh trạng thái, bạn cần sử dụng
Nếu Nếu có một thông báo đang hoạt động trên thanh trạng thái của bạn và bạn gọi Đi tới ứng dụng mẫu của bạn và thêm dòng
sau vào
Dòng cuối cùng được highlight trong Khi bạn chạy ứng dụng, thanh trạng thái sẽ hiển thị thông báo Hiển thị thông báo vĩnh viễn trong thanh trạng tháiBạn cũng có thể hiển thị thông báo vĩnh viễn trên thanh trạng thái của ứng dụng. Một thông báo vĩnh viễn giữ cho người dùng được thông báo về một số trạng thái chung của ứng dụng. Ví dụ: trong trình soạn thảo văn bản, bạn có thể muốn hiển thị một thông báo cố định với thông tin về mã hóa văn bản của tệp hiện đang mở. Để thêm thông báo cố định vào thanh
trạng thái của bạn, bạn sử dụng một đối tượng
Hãy nhớ rằng một tiện ích vĩnh viễn sẽ không bị che khuất hoặc bị thay thế bởi các tin nhắn tạm thời.
Giả sử bạn muốn biến ứng dụng mẫu của mình thành một trình soạn thảo văn bản và bạn muốn thêm thông báo vào thanh
trạng thái hiển thị thông tin về số từ của tệp hiện tại. Để làm điều đó, bạn có thể tạo một phương thức được gọi là
Phương thức này bổ sung logic để tính toán số lượng từ trong tài liệu hiện đang mở. Bây giờ, bạn có thể hiển thị thông tin này dưới dạng tin nhắn vĩnh viễn:
Trong hai dòng cuối cùng, đầu tiên bạn tạo
một đối tượng Trong trường hợp này, bạn tạo đối tượng Nếu bạn chạy ứng dụng với bản cập nhật này, thì bạn sẽ thấy thông báo đếm từ ở phía bên phải của thanh trạng thái: Thanh trạng thái hiển thị thông báo cho người dùng biết về số lượng từ trong tệp hiện tại giả định. Khả năng hiển thị cho người dùng thông tin cố định hoặc các tùy chọn khác trên thanh trạng thái khá hữu ích và có thể giúp bạn cải thiện đáng kể trải nghiệm người dùng cho các ứng dụng của mình. Thêm Mẹo trợ giúp vào Hành độngKhi nói đến việc tạo các ứng dụng GUI, điều quan trọng là phải cung cấp các mẹo trợ giúp cho người dùng của bạn về các chức năng cụ thể trên giao diện của ứng dụng. Mẹo trợ giúp là các thông báo ngắn cung cấp hướng dẫn nhanh cho người dùng về một số tùy chọn mà ứng dụng cung cấp. Hành động PyQt cho phép bạn xác định các loại mẹo trợ giúp sau:
Để tìm hiểu cách hoạt động của các mẹo trợ giúp, bạn có thể thêm một số mẹo trạng thái và chú giải công cụ vào đơn đăng ký mẫu của mình. Đi tới
Ba dòng được đánh dấu đặt thông báo Khi bạn nhấp vào menu File và giữ con trỏ chuột chạm vào New, bạn có thể thấy thông báo mẹo trợ giúp hiển thị ở bên trái của thanh trạng thái. Mặt khác, nếu bạn di chuyển con trỏ chuột qua nút Thanh công cụ New, thì bạn có thể thấy thông báo trên thanh trạng thái và cũng như một hộp nổi nhỏ bên cạnh con trỏ chuột. Nói chung, thêm các mẹo trợ giúp vào menu và thanh công cụ Python của bạn được coi là một phương pháp hay nhất. Nó sẽ giúp người dùng điều hướng và tìm hiểu các ứng dụng GUI của bạn dễ dàng hơn. Bài tập: Như một bài tập cuối cùng, bạn có thể tiếp tục thêm các mẹo trợ giúp vào phần còn lại của các hành động trong ứng dụng mẫu của mình và xem nó trông như thế nào sau khi bạn hoàn thành. Phần kết luậnMenu , thanh công cụ và thanh trạng thái là các thành phần đồ họa phổ biến và quan trọng của hầu hết các ứng dụng GUI. Bạn có thể sử dụng chúng để cung cấp cho người dùng của mình một cách nhanh chóng để truy cập các tùy chọn và chức năng của ứng dụng. Chúng cũng làm cho các ứng dụng của bạn trông bóng bẩy, chuyên nghiệp và cung cấp trải nghiệm tuyệt vời cho người dùng của bạn. Trong hướng dẫn này, bạn đã học cách:
Trong quá trình này, bạn đã học được một số phương pháp lập trình tốt nhất đáng xem xét khi thêm và sử dụng menu, thanh công cụ và thanh trạng thái trong các ứng dụng GUI của mình. |