Hướng dẫn dùng pyqt resize python
Mục lục bài viết:
Show
Trình quản lý bố cục của PyQt cung cấp một cách thức thân thiện và hiệu quả để sắp xếp các thành phần đồ họa hoặc tiện ích con trên GUI. Bố trí các widget đúng cách sẽ làm cho các ứng dụng GUI của bạn trông bóng bẩy và chuyên nghiệp. Học cách làm như vậy một cách hiệu quả và hiệu quả là kỹ năng cơ bản để bạn bắt đầu và chạy với phát triển ứng dụng GUI bằng Python và PyQt. Trong hướng dẫn này, bạn sẽ học:
Với kiến thức và kỹ năng này, bạn sẽ có thể sử dụng Python và PyQt để tạo các ứng dụng GUI có giao diện chuyên nghiệp. Để hiểu rõ hơn về cách sử dụng trình quản lý bố cục, một số kiến thức trước đây về cách tạo ứng dụng PyQt GUI và cách làm việc với các tiện ích PyQt sẽ hữu ích. Bố cục các thành phần đồ họa trên GUIKhi bạn đang tạo các ứng dụng giao diện người dùng đồ họa (Graphical User Interface - GUI), một vấn đề thường gặp là làm thế nào để có được các thành phần đồ họa của bạn - các nút, menu, thanh công cụ, nhãn, v.v. - được bố trí mạch lạc trên biểu mẫu và cửa sổ của bạn. Quá trình này được gọi là bố cục GUI và đây là một bước quan trọng trong việc tạo các ứng dụng GUI. Trước đây, nếu bạn muốn bố trí các thành phần đồ họa hoặc tiện ích con (widget) trên một cửa sổ, thì bạn sẽ làm theo một trong các cách tiếp cận sau:
Cách tiếp cận đầu tiên khá trực tiếp, nhưng nó có những nhược điểm cơ bản sau:
Cách tiếp cận thứ hai linh hoạt hơn. Tuy nhiên, nó cũng có nhược điểm:
Mặc dù bạn vẫn có thể sử dụng một trong hai cách tiếp cận này để bố trí GUI của mình, nhưng hầu hết thời gian bạn sẽ muốn sử dụng cách tiếp cận thứ ba và thuận tiện hơn được thực hiện bởi hầu hết các khung hoặc bộ công cụ GUI hiện đại: trình quản lý bố cục (layout manager).
Trình quản lý bố cục tự động sắp xếp các widget trên GUI theo nhu cầu cụ thể của bạn. Chúng tránh được những nhược điểm về khả năng tương thích của cách tiếp cận đầu tiên cũng như những tính toán phức tạp và khó chịu của cách tiếp cận thứ hai. Trong các phần tiếp theo, bạn sẽ tìm hiểu về các trình quản lý bố cục tích hợp của PyQt và cách sử dụng chúng để bố trí hiệu quả các thành phần đồ họa của các ứng dụng GUI của bạn. Thư viện bố cục PyQtTrong PyQt, widget là các thành phần đồ họa mà bạn sử dụng làm khối xây dựng cho các ứng dụng GUI của mình. Khi bạn đặt một loạt các widget trên một cửa sổ để tạo GUI, bạn cần sắp xếp thứ tự cho chúng. Bạn cần đặt kích thước và vị trí của các tiện ích trên cửa sổ, đồng thời bạn cũng cần xác định hành vi của chúng khi người dùng thay đổi kích thước cửa sổ bên dưới.
Để sắp xếp các tiện ích con trên các cửa sổ hoặc biểu mẫu trong PyQt, bạn có thể sử dụng các kỹ thuật sau:
Các kỹ thuật này thường tương ứng với ba cách tiếp cận khác nhau để tạo ra một GUI mà bạn đã thấy trong phần trên. Một lần nữa, tính toán kích thước và vị trí động có thể là một cách tiếp cận tốt, nhưng hầu hết thời gian, bạn sẽ tốt hơn khi sử dụng trình quản lý bố cục. Trong PyQt, trình quản lý bố cục là các lớp cung cấp chức năng cần thiết để tự động quản lý kích thước, vị trí và hành vi thay đổi kích thước của các tiện ích con trong bố cục. Với trình quản lý bố cục, bạn có thể tự động sắp xếp các widget con trong bất kỳ widget cha hoặc vùng chứa, widget nào. Sử dụng trình quản lý bố cục sẽ đảm bảo rằng bạn tận dụng tốt không gian có sẵn trên GUI và ứng dụng của bạn vẫn có thể sử dụng được khi người dùng thay đổi kích thước cửa sổ. Trình quản lý bố cục hoạt động như các vùng chứa cho cả tiện ích con và các bố cục khác. Để thêm tiện ích con vào trình quản lý bố cục, bạn gọi .addWidget(). Để thêm một bố cục vào một bố cục khác, bạn gọi Khi bạn đã thêm tất cả các tiện ích cần thiết vào trình quản lý bố cục, bạn đặt trình quản lý bố cục trên một tiện ích cụ thể bằng cách sử dụng .setLayout(). Bạn có thể đặt trình quản lý bố cục trên bất kỳ
lớp con nào của Tất cả các tiện ích con trong một bố cục được tự động đặt làm con của tiện ích con mà bạn cài đặt bố cục, không phải của chính bố cục đó. Đó là bởi vì các widget chỉ có thể có các widget khác, không phải bố cục, làm cha của chúng. Trình quản lý bố cục của PyQt cung cấp một số tính năng thú vị giúp bạn dễ dàng hơn rất nhiều khi tạo các ứng dụng GUI đẹp mắt:
Sử dụng trình quản lý bố cục cũng sẽ làm tăng đáng kể năng suất của bạn và cải thiện khả năng bảo trì mã của bạn trong thời gian dài. PyQt cung cấp bốn lớp trình quản lý bố cục có mục đích chung:
Trong một vài phần tiếp theo, bạn sẽ tìm hiểu những kiến thức cơ bản về cách sử dụng các trình quản lý bố cục có mục đích chung này. Sử dụng trình quản lý bố cục có mục đích chungKhi tạo các ứng dụng GUI với PyQt, bạn sẽ thường sử dụng một hoặc nhiều trong số bốn bố cục có mục đích chung mà bạn đã thấy ở cuối phần trên để bố trí tiện ích con trên các cửa sổ và biểu mẫu của bạn. Trong một vài phần tiếp theo, bạn sẽ học cách tạo và sử dụng bốn trình quản lý bố cục có mục đích chung với sự trợ giúp của một số ví dụ. Xây dựng bố cục ngang: QHBoxLayoutTrình quản lý bố cục hộp lấy không gian nó nhận được từ bố cục hoặc tiện ích con, chia nó thành một số box hoặc ô và làm cho mỗi tiện ích con trong bố cục lấp đầy một box.
Để thêm widget vào một đối tượng
Dưới đây là một ứng dụng nhỏ hướng dẫn cách tạo bố cục ngang bằng cách sử dụng
Giải thích: Trong đoạn code trên, dòng 15 bạn tạo một đối tượng Nếu bạn chạy ứng dụng này, thì bạn sẽ thấy cửa sổ sau trên màn hình của mình: Cửa sổ này chứa ba nút được sắp xếp theo chiều ngang. Lưu ý rằng nút Ngoài cùng bên trái tương ứng với nút đầu tiên bạn thêm vào mã của mình. Vì vậy, các nút được hiển thị theo cùng thứ tự (từ trái sang phải) mà bạn thêm chúng vào mã của mình (từ trên xuống dưới). Các nút Center và Right-Mode có yếu tố giãn khác nhau, do đó chúng mở rộng tương ứng với những yếu tố này khi bạn thay đổi kích thước cửa sổ. Ngoài ra, tất cả các nút trong Xây dựng bố cục dọc: QVBoxLayout
Dưới đây là một ứng dụng PyQt chỉ ra cách
tạo và sử dụng một đối tượng
Giải thích: Trong ví dụ trên, dòng 16 bạn tạo một phiên bản của Nếu bạn chạy ứng dụng này, thì bạn sẽ nhận được cửa sổ dạng như sau: Cửa sổ của bạn hiển thị ba nút theo chiều dọc, nút này bên dưới nút kia. Các nút xuất hiện theo cùng một thứ tự (từ trên xuống dưới) khi bạn thêm chúng vào mã của mình (từ trên xuống dưới). Sắp xếp các widget trong một lưới: QGridLayoutBạn có thể sử dụng
Để thêm các widget vào bố cục lưới, bạn gọi
Việc triển khai đầu tiên có các đối số sau:
Dưới đây là một ví dụ về cách sử dụng
Giải thích: Trong ví dụ trên, dòng 15 bạn tạo đối tượng Nếu bạn chạy mã này từ dòng lệnh của mình, thì bạn sẽ nhận được một cửa sổ dạng như sau: Mỗi tiện ích con trong đối tượng Trong
lần triển khai thứ hai của
Đây là một ứng dụng hiển thị cách
Giải thích: Trong đoạn code trên, dòng 19 bạn sử dụng cách triển khai thứ hai của
Dưới đây là cửa sổ mà bạn sẽ thấy trên màn hình của mình nếu bạn chạy ứng dụng này: Trong kiểu bố trí này, bạn có thể tạo một widget chiếm nhiều ô, giống như cách bạn đã làm với nút Button Spans two Cols. Tạo biểu mẫu nhanh chóng: QFormLayoutNếu bạn liên tục tạo biểu mẫu để thực hiện các hành động như nhập dữ liệu vào cơ sở dữ liệu, thì ta sẽ sử dụng Để thêm tiện ích con vào bố cục biểu mẫu, bạn sử dụng
Dưới đây là một ứng dụng mẫu sử dụng một đối tượng
Giải thích: Trong đoạn code trên, dòng 17 bạn tạo một đối tượng Kết quả bạn sẽ thấy cửa sổ sau trên màn hình của mình: Với mỗi Lồng bố cục để xây dựng GUI phức tạpBạn có thể sử dụng các bố cục lồng nhau để tạo các GUI phức tạp mà khó tạo bằng một trong các trình quản lý bố cục của PyQt có mục đích chung. Để làm điều đó, bạn cần phải gọi Giả sử bạn cần tạo hộp thoại hiển thị nhãn và chỉnh sửa dòng trong bố cục biểu mẫu và bên dưới các tiện ích con đó, bạn muốn đặt một số hộp kiểm trong bố cục dọc. Đây là bản mô phỏng hộp thoại của bạn: Hình chữ nhật màu xanh lam đại diện cho bố cục bên ngoài của bạn. Hình chữ nhật màu xanh lá cây là bố cục biểu mẫu sẽ chứa nhãn và chỉnh sửa dòng. Hình chữ nhật màu đỏ là bố cục dọc để chứa các hộp kiểm tùy chọn. Cả bố cục màu xanh lá cây và bố cục màu đỏ đều được lồng vào bố cục màu xanh lam, đó là bố cục dọc. Dưới đây là một ví dụ về cách tạo bố cục này bằng PyQt:
Trong đoạn code trên:
Kết quả bạn sẽ thấy một cửa sổ như sau: Trong ứng dụng này, bạn lồng hai bố cục khác nhau dưới một bố cục bên ngoài để tạo bố cục chung cho cửa sổ của bạn. Ở đầu cửa sổ, bạn sử dụng bố cục ngang để đặt nhãn và chỉnh sửa dòng. Sau đó, bạn đặt một số hộp kiểm bên dưới bằng cách sử dụng bố cục dọc. Sử dụng Bố cục và Tiện ích Đa trangCho đến nay, bạn đã thấy cách sử dụng trình quản lý bố cục truyền thống hoặc mục đích chung để sắp xếp các widget trong cửa sổ ứng dụng của mình. Các trình quản lý bố cục này sẽ sắp xếp các widget trên bố cục một trang. Nói cách khác, GUI của bạn sẽ luôn hiển thị cùng một bộ tiện ích cho người dùng. Đôi khi bạn cần tạo một bố cục hiển thị một tập hợp các tiện ích con khác nhau để đáp ứng các hành động nhất định của người dùng trên GUI. Ví dụ: nếu bạn đang tạo hộp thoại tùy chọn cho một ứng dụng nhất định, thì bạn có thể muốn giới thiệu cho người dùng bố cục dựa trên tab hoặc nhiều trang, trong đó mỗi tab hoặc trang chứa một tập hợp các tùy chọn có liên quan chặt chẽ khác nhau. Mỗi khi người dùng nhấp vào một tab hoặc trang, ứng dụng sẽ hiển thị một tập hợp các tiện ích con khác nhau. PyQt cung cấp một bố cục dựng sẵn gọi là QStackedLayout và một số tiện ích con tiện lợi như QTabWidget sẽ cho phép bạn tạo loại bố cục nhiều trang này. Một số phần tiếp theo sẽ hướng dẫn bạn một số công cụ này. Tạo một ngăng xếp các widget
Để điền một bố cục xếp chồng lên nhau bằng các widget, bạn cần gọi Mỗi widget trong danh sách widget được hiển thị như một trang độc lập. Nếu bạn muốn hiển thị một số tiện ích con trên một trang, thì hãy sử dụng một đối tượng Một điểm quan trọng cần ghi nhớ khi làm việc với các đối tượng Dưới đây
là một ví dụ cho thấy cách sử dụng bố cục xếp chồng với hộp tổ hợp để chuyển đổi giữa các trang:
Giải thích: Trên các dòng từ 21 đến 23, bạn tạo một đối tượng Bên trong Trên dòng 25, bạn tạo đối tượng Bước cuối cùng để mọi thứ hoạt động là thêm hộp tổ hợp và bố cục vào bố cục chính của ứng dụng. Kết quả: Trong trường hợp này, bạn có hai trang trong bố cục ứng dụng của mình. Mỗi trang được đại diện bởi một đối tượng
Bên cạnh bố cục xếp chồng và tiện ích con xếp chồng lên nhau, bạn có thể sử dụng QTabWidget để tạo giao diện người dùng nhiều trang. Bạn sẽ tìm hiểu cách thực hiện trong phần tiếp theo. Sử dụng các tiện ích tab của PyQtMột cách phổ biến khác để tạo sắp xếp nhiều trang trong PyQt là sử dụng một lớp được gọi là Theo mặc định, thanh tab nằm ở đầu khu vực trang. Tuy nhiên, bạn có thể thay đổi hành vi này bằng cách sử dụng .setTabPosition() và một trong bốn vị trí tab có thể có là:
Để thêm các tab vào một tiện ích tab, bạn sử dụng
Trong cả hai trường hợp thì phương thức đều thêm một tab mới, với Trong biến thể thứ hai của phương thức, Một thực tế phổ biến khi tạo tiện ích tab là sử dụng một đối tượng Trong đa số tình huống, bạn sẽ sử dụng các tiện ích tab để tạo hộp thoại cho các ứng dụng GUI của mình. Kiểu bố trí này cho phép bạn trình bày cho người dùng một số tùy chọn trong một không gian tương đối nhỏ. Bạn cũng có thể tận dụng hệ thống tab để sắp xếp các tùy chọn của mình theo một số tiêu chí phân loại. Đây là một ứng dụng mẫu hiển thị những điều cơ bản về cách
tạo và sử dụng một đối tượng
Giải thích: Trong ví dụ này, bạn sử dụng tiện ích tab để giới thiệu cho người dùng hộp thoại ngắn gọn hiển thị các tùy chọn liên quan đến phần General và Network của menu tùy chọn giả định. Trên dòng 20, bạn tạo đối tượng Trong Kết quả là bạn sẽ nhận được hộp thoại sau trên màn hình của mình: Như vậy là bạn đã có một GUI dựa trên tab đầy đủ chức năng. Lưu ý rằng để chuyển đổi giữa các trang, bạn chỉ cần nhấp vào tab tương ứng. Bố cục cửa sổ chính của ứng dụngNếu bạn đang sử dụng PyQt để tạo các ứng dụng GUI, thì phần lớn thời gian bạn sẽ sử dụng QMainWindow để tạo GUI trên đó. Lớp này cho phép bạn tạo các ứng dụng kiểu cửa sổ
chính.
Đối với hầu hết các ứng dụng, tất cả các thành phần đồ họa này là tùy chọn ngoại trừ widget trung tâm, được yêu cầu để ứng dụng của bạn hoạt động.
Một số ứng dụng sử dụng một widget duy nhất và đầy đủ chức năng làm widget trung tâm của chúng. Ví dụ: nếu bạn đang viết code một trình soạn thảo văn bản, thì bạn có thể sẽ sử dụng một đối tượng QTextEdit làm widget trung tâm của trình soạn thảo của mình. Các loại ứng dụng GUI khác có thể yêu cầu một widget trung tâm phức tạp hơn. Trong trường hợp đó, bạn có thể sử dụng một
đối tượng Trong hầu hết các tình huống thì bố cục Bố cục hộp thoại (dialog) của ứng dụngCác ứng dụng GUI thường được xây dựng bằng cách sử dụng một cửa sổ chính và một hoặc nhiều hộp thoại. Hộp thoại là các cửa sổ nhỏ cho phép bạn giao tiếp với người dùng của mình. PyQt cung cấp QDialog để xử lý việc tạo các hộp thoại. Không giống như Khi bạn đặt tất cả các tiện ích con trên GUI của hộp thoại, bạn cần đặt bố cục cấp cao nhất trên hộp thoại đó. Để làm điều này, bạn phải gọi Dưới đây là một ứng dụng kiểu hộp thoại hiển thị cách đặt bố cục cấp cao nhất cho một đối tượng
Giải thích: Cửa sổ của ứng dụng kế thừa từ Trên dòng 24, bạn thêm một đối tượng QDialogButtonBox. Bạn sẽ thường sử dụng Khi bạn đã có tất cả các tiện ích và bố cục, bạn có thể thêm chúng vào bố cục cấp cao nhất. Đó là
những gì bạn làm trên dòng 28 và 29. Bước cuối cùng, trên dòng 30, là đặt bố cục cấp cao nhất làm bố cục hộp thoại của bạn bằng cách sử dụng Kết quả là bạn sẽ thấy cửa sổ sau trên màn hình của mình: Cách tốt nhất là đặt bố cục cấp cao nhất cho tất cả các hộp thoại của bạn. Điều này đảm bảo rằng GUI của hộp thoại sẽ hoạt động mạch lạc khi người dùng thay đổi kích thước cửa sổ bên dưới. Nếu không, hộp thoại của bạn có thể trông vô tổ chức và không được đẹp trong mắt người dùng. Quản lý không gian trong một bố cục PyQtKhi nói đến việc sử dụng trình quản lý bố cục của PyQt để sắp xếp các widget trên một cửa sổ hoặc biểu mẫu, thì việc quản lý không gian — không gian trống, không gian giữa các widget, v.v. — là một vấn đề phổ biến. Có thể quản lý không gian này là một kỹ năng quan trọng cần có. Bố cục quản lý không gian có sẵn trên cửa sổ bằng cách sử dụng một số thuộc tính tiện ích con sau:
Bố cục sử dụng các thuộc tính này để tự động định vị và thay đổi kích thước tiện ích con, gán một lượng không gian nhất định cho mỗi tiện ích con theo không gian có sẵn. Điều này đảm bảo rằng các widget được sắp xếp nhất quán và vẫn có thể sử dụng được. Trong ba phần tiếp theo, bạn sẽ tìm hiểu cách các loại bố cục khác nhau quản lý không gian trong PyQt. Quản lý không gian trong bố cục hộp (box)Bố cục hộp thực hiện một công việc tuyệt vời khi phân phối không gian có sẵn giữa các vật dụng. Tuy nhiên, đôi khi hành vi mặc định của chúng là không đủ và bạn cần phải xử lý thủ công không gian có sẵn. Để giúp bạn trong tình huống này, PyQt cung cấp QSpacerItem. Lớp này cho phép bạn thêm không gian trống (hoặc các hộp trống) vào bố cục hộp. Thông thường, bạn không cần phải sử dụng
Các phần đệm có thể co giãn sẽ mở rộng hoặc thu nhỏ để lấp đầy không gian trống khi người dùng thay đổi kích thước cửa sổ bên dưới. Các phần đệm không thể co giãn sẽ vẫn giữ nguyên kích thước bất kể thay đổi về kích thước của cửa sổ bên dưới. Quay lại ví dụ về cách sử dụng bố cục dọc và chạy lại ứng dụng đó. Nếu bạn kéo đường viền của cửa sổ xuống, thì bạn sẽ nhận thấy rằng càng có nhiều khoảng trống xuất hiện giữa các nút khi bạn kéo càng kéo xuống: Điều này xảy ra vì bố cục xử lý không gian mới có sẵn bằng cách tự động mở rộng các hộp của nó. Bạn có thể thay đổi hành vi này bằng cách thêm một đối tượng Vậy giờ ta sẽ cập nhật trình khởi tạo
Trong dòng được đánh dấu vàng ở trên, bạn thêm một đối tượng Giờ đây, tất cả không gian thừa sẽ được tự động gán cho đối tượng Quản lý không gian trong bố cục lưới và biểu mẫuBố cục dạng lưới và biểu mẫu xử lý không gian có sẵn theo một cách khác. Trong các loại bố cục này, bạn chỉ có thể xử lý không gian dọc và ngang giữa các tiện ích con. Các bố cục này cung cấp ba phương thức để quản lý các không gian này:
Trong mọi trường hợp,
Trong dòng được đánh dấu, bạn đặt không gian dọc giữa các tiện ích thành Bây giờ có nhiều không gian hơn giữa các hàng widget. Bạn cũng có thể thử sửa đổi ví dụ về cách sử dụng bố cục lưới bằng cách thêm một số không gian dọc hoặc ngang chỉ để xem tất cả các cơ chế co giãn này hoạt động như thế nào nhé. Phần kết luậnTạo các ứng dụng GUI chất lượng cao đòi hỏi phải bố trí tất cả các thành phần đồ họa theo một cách sắp xếp chặt chẽ và bóng bẩy. Trong PyQt, một cách hiệu quả để làm điều đó là sử dụng trình quản lý bố cục của PyQt, cung cấp cách tiếp cận hiệu quả và thân thiện với người dùng. Trong hướng dẫn này, bạn đã học được:
Với kiến thức này, bạn sẽ có thể tạo các ứng dụng GUI đẹp mắt và chuyên nghiệp bằng cách sử dụng các bố cục có sẵn của PyQt. Copied !!! |