Ví dụ hộp python

Thư viện lời nguyền cung cấp một phương tiện xử lý bàn phím và vẽ màn hình độc lập với thiết bị đầu cuối cho các thiết bị đầu cuối dựa trên văn bản; . Các thiết bị đầu cuối hiển thị hỗ trợ các mã điều khiển khác nhau để thực hiện các thao tác thông thường như di chuyển con trỏ, cuộn màn hình và xóa các vùng. Các thiết bị đầu cuối khác nhau sử dụng các mã rất khác nhau và thường có những điều kỳ quặc nhỏ của riêng chúng

Trong một thế giới hiển thị đồ họa, người ta có thể hỏi "tại sao phải bận tâm"? . Một thị trường ngách dành cho các Unix nhúng hoặc dấu chân nhỏ không chạy máy chủ X. Một thứ khác là các công cụ như trình cài đặt hệ điều hành và bộ cấu hình kernel có thể phải chạy trước khi có bất kỳ hỗ trợ đồ họa nào.

Thư viện lời nguyền cung cấp chức năng khá cơ bản, cung cấp cho người lập trình một bản tóm tắt của một màn hình chứa nhiều cửa sổ văn bản không chồng lên nhau. Nội dung của một cửa sổ có thể được thay đổi theo nhiều cách khác nhau—thêm văn bản, xóa nó, thay đổi hình thức của nó—và thư viện lời nguyền sẽ tìm ra mã điều khiển nào cần được gửi đến thiết bị đầu cuối để tạo ra đầu ra phù hợp. lời nguyền không cung cấp nhiều khái niệm giao diện người dùng như nút, hộp kiểm hoặc hộp thoại;

Thư viện lời nguyền ban đầu được viết cho BSD Unix; . Lời nguyền BSD không còn được duy trì, đã được thay thế bằng ncurses, đây là một triển khai mã nguồn mở của giao diện AT&T. Nếu bạn đang sử dụng Unix mã nguồn mở như Linux hoặc FreeBSD, hệ thống của bạn gần như chắc chắn sử dụng ncurses. Vì hầu hết các phiên bản Unix thương mại hiện tại đều dựa trên mã Hệ thống V, nên tất cả các chức năng được mô tả ở đây có thể sẽ khả dụng. Tuy nhiên, các phiên bản cũ hơn của lời nguyền do một số Unix độc quyền mang theo có thể không hỗ trợ mọi thứ

Phiên bản Windows của Python không bao gồm mô-đun

curses.noecho()
6. Đã có phiên bản được chuyển tên là UniCurses

Mô-đun nguyền rủa Python¶

Mô-đun Python là một trình bao bọc khá đơn giản đối với các hàm C được cung cấp bởi các lời nguyền; . Sự khác biệt lớn nhất là giao diện Python giúp mọi thứ trở nên đơn giản hơn bằng cách hợp nhất các hàm C khác nhau như

curses.noecho()
8,
curses.noecho()
9 và
curses.cbreak()
0 thành một phương thức
curses.noecho()
8 duy nhất. Bạn sẽ thấy điều này được đề cập chi tiết hơn sau

HOWTO này là phần giới thiệu về cách viết các chương trình ở chế độ văn bản với lời nguyền và Python. Nó không cố gắng trở thành một hướng dẫn đầy đủ về API nguyền rủa; . Tuy nhiên, nó sẽ cung cấp cho bạn những ý tưởng cơ bản

Bắt đầu và kết thúc ứng dụng nguyền rủa¶

Trước khi làm bất cứ điều gì, lời nguyền phải được khởi tạo. Điều này được thực hiện bằng cách gọi hàm

curses.cbreak()
2, hàm này sẽ xác định loại thiết bị đầu cuối, gửi bất kỳ mã thiết lập cần thiết nào đến thiết bị đầu cuối và tạo các cấu trúc dữ liệu nội bộ khác nhau. Nếu thành công,
curses.cbreak()
2 trả về một đối tượng cửa sổ đại diện cho toàn bộ màn hình;

________số 8

Thông thường các ứng dụng chửi sẽ tắt tính năng tự động phát âm của phím ra màn hình, để có thể đọc được phím và chỉ hiển thị chúng trong một số trường hợp nhất định. Điều này yêu cầu gọi hàm

curses.cbreak()
5

curses.noecho()

Các ứng dụng cũng thường cần phản ứng với các phím ngay lập tức mà không cần nhấn phím Enter;

curses.cbreak()

Các thiết bị đầu cuối thường trả về các phím đặc biệt, chẳng hạn như các phím con trỏ hoặc các phím điều hướng như Page Up và Home, dưới dạng chuỗi thoát nhiều byte. Mặc dù bạn có thể viết ứng dụng của mình để mong đợi các chuỗi như vậy và xử lý chúng theo đó, các lời nguyền có thể làm điều đó cho bạn, trả về một giá trị đặc biệt chẳng hạn như

curses.cbreak()
6. Để lời nguyền thực hiện công việc, bạn sẽ phải bật chế độ bàn phím

curses.noecho()
3

Chấm dứt một ứng dụng nguyền rủa dễ dàng hơn nhiều so với bắt đầu một ứng dụng. Bạn sẽ cần phải gọi

curses.noecho()
4

để đảo ngược cài đặt thiết bị đầu cuối thân thiện với lời nguyền. Sau đó gọi hàm

curses.cbreak()
7 để khôi phục thiết bị đầu cuối về chế độ hoạt động ban đầu

curses.noecho()
6

Một vấn đề phổ biến khi gỡ lỗi ứng dụng bị nguyền rủa là làm cho thiết bị đầu cuối của bạn bị rối khi ứng dụng chết mà không khôi phục thiết bị đầu cuối về trạng thái trước đó. Trong Python, điều này thường xảy ra khi mã của bạn bị lỗi và phát sinh một ngoại lệ chưa được phát hiện. Chẳng hạn, các phím không còn được lặp lại trên màn hình khi bạn nhập chúng, điều này gây khó khăn cho việc sử dụng trình bao

Trong Python, bạn có thể tránh những sự phức tạp này và giúp việc gỡ lỗi dễ dàng hơn nhiều bằng cách nhập hàm

curses.cbreak()
8 và sử dụng nó như thế này

curses.noecho()
8

Hàm

curses.cbreak()
9 nhận một đối tượng có thể gọi được và thực hiện các thao tác khởi tạo được mô tả ở trên, đồng thời khởi tạo màu nếu có hỗ trợ màu.
curses.cbreak()
9 sau đó chạy khả năng gọi được cung cấp của bạn. Sau khi có thể gọi trở lại,
curses.cbreak()
9 sẽ khôi phục trạng thái ban đầu của thiết bị đầu cuối. Có thể gọi được gọi bên trong một
curses.noecho()
32…______133 bắt ngoại lệ, khôi phục trạng thái của thiết bị đầu cuối, sau đó tăng lại ngoại lệ. Do đó, thiết bị đầu cuối của bạn sẽ không bị bỏ lại ở trạng thái buồn cười khi có ngoại lệ và bạn sẽ có thể đọc thông báo của ngoại lệ và theo dõi lại

Windows và Pads¶

Windows là sự trừu tượng cơ bản trong lời nguyền. Đối tượng cửa sổ đại diện cho một vùng hình chữ nhật của màn hình và hỗ trợ các phương thức hiển thị văn bản, xóa văn bản, cho phép người dùng nhập chuỗi, v.v.

Đối tượng

curses.cbreak()
4 được trả về bởi hàm
curses.cbreak()
2 là đối tượng cửa sổ bao phủ toàn bộ màn hình. Nhiều chương trình có thể chỉ cần một cửa sổ duy nhất này, nhưng bạn có thể muốn chia màn hình thành các cửa sổ nhỏ hơn để vẽ lại hoặc xóa chúng một cách riêng biệt. Hàm
curses.noecho()
36 tạo một cửa sổ mới có kích thước nhất định, trả về đối tượng cửa sổ mới

curses.noecho()
7

Lưu ý rằng hệ tọa độ được sử dụng trong các lời nguyền là bất thường. Các tọa độ luôn được chuyển theo thứ tự y, x và góc trên cùng bên trái của cửa sổ là tọa độ (0,0). Điều này phá vỡ quy ước thông thường để xử lý tọa độ trong đó tọa độ x xuất hiện trước. Đây là một sự khác biệt đáng tiếc so với hầu hết các ứng dụng máy tính khác, nhưng nó đã là một phần của lời nguyền kể từ lần đầu tiên nó được viết và bây giờ đã quá muộn để thay đổi mọi thứ.

Ứng dụng của bạn có thể xác định kích thước của màn hình bằng cách sử dụng các biến

curses.noecho()
37 và
curses.noecho()
38 để có được kích thước y và x. Các tọa độ pháp lý sau đó sẽ mở rộng từ
curses.noecho()
39 đến
curses.noecho()
40

Khi bạn gọi một phương thức để hiển thị hoặc xóa văn bản, hiệu ứng không hiển thị ngay lập tức trên màn hình. Thay vào đó, bạn phải gọi phương thức

curses.noecho()
41 của các đối tượng cửa sổ để cập nhật màn hình

Điều này là do lời nguyền ban đầu được viết với mục đích kết nối thiết bị đầu cuối 300 baud chậm; . Thay vào đó, lời nguyền tích lũy các thay đổi trên màn hình và hiển thị chúng theo cách hiệu quả nhất khi bạn gọi

curses.noecho()
41. Ví dụ: nếu chương trình của bạn hiển thị một số văn bản trong một cửa sổ và sau đó xóa cửa sổ đó, thì không cần gửi văn bản gốc vì chúng không bao giờ hiển thị

Trong thực tế, nói một cách rõ ràng các lời nguyền để vẽ lại một cửa sổ không thực sự phức tạp lắm với việc lập trình với các lời nguyền. Hầu hết các chương trình đi vào một loạt hoạt động, sau đó tạm dừng chờ nhấn phím hoặc một số hành động khác từ phía người dùng. Tất cả những gì bạn phải làm là đảm bảo rằng màn hình đã được vẽ lại trước khi tạm dừng để đợi người dùng nhập liệu, trước tiên bằng cách gọi

curses.noecho()
43 hoặc phương thức
curses.noecho()
41 của một số cửa sổ có liên quan khác

Một miếng đệm là một trường hợp đặc biệt của một cửa sổ; . Tạo một bảng yêu cầu chiều cao và chiều rộng của bảng, trong khi làm mới một bảng yêu cầu cung cấp tọa độ của khu vực trên màn hình nơi một phần phụ của bảng sẽ được hiển thị

curses.cbreak()
6

Cuộc gọi

curses.noecho()
41 hiển thị một phần của bảng trong hình chữ nhật kéo dài từ tọa độ (5,5) đến tọa độ (20,75) trên màn hình; . Ngoài sự khác biệt đó, các miếng đệm hoàn toàn giống như các cửa sổ thông thường và hỗ trợ các phương pháp tương tự

Nếu bạn có nhiều cửa sổ và miếng đệm trên màn hình, có một cách hiệu quả hơn để cập nhật màn hình và ngăn màn hình nhấp nháy gây phiền nhiễu khi mỗi phần của màn hình được cập nhật.

curses.noecho()
41 thực sự làm được hai việc

  1. Gọi phương thức

    curses.noecho()
    
    47 của mỗi cửa sổ để cập nhật cấu trúc dữ liệu cơ bản biểu thị trạng thái mong muốn của màn hình

  2. Gọi hàm

    curses.noecho()
    
    48 để thay đổi màn hình vật lý cho phù hợp với trạng thái mong muốn được ghi trong cấu trúc dữ liệu

Thay vào đó, bạn có thể gọi

curses.noecho()
47 trên một số cửa sổ để cập nhật cấu trúc dữ liệu, sau đó gọi
curses.noecho()
48 để cập nhật màn hình

Hiển thị văn bản¶

Từ quan điểm của một lập trình viên C, các lời nguyền đôi khi có thể trông giống như một mê cung phức tạp của các chức năng, tất cả đều khác nhau một cách tinh tế. Ví dụ:

curses.noecho()
8 hiển thị một chuỗi ở vị trí con trỏ hiện tại trong cửa sổ
curses.cbreak()
4, trong khi
curses.noecho()
9 di chuyển đến tọa độ y, x đã cho trước khi hiển thị chuỗi.
curses.noecho()
64 giống như
curses.noecho()
8, nhưng cho phép chỉ định một cửa sổ để sử dụng thay vì sử dụng
curses.cbreak()
4 theo mặc định.
curses.cbreak()
0 cho phép chỉ định cả cửa sổ và tọa độ

May mắn thay, giao diện Python ẩn tất cả các chi tiết này.

curses.cbreak()
4 là một đối tượng cửa sổ giống như bất kỳ đối tượng nào khác và các phương thức như
curses.noecho()
8 chấp nhận nhiều dạng đối số. Thông thường có bốn hình thức khác nhau

Hình thức

Sự mô tả

str hoặc ch

Hiển thị chuỗi str hoặc ký tự ch tại vị trí hiện tại

str hoặc ch, attr

Hiển thị chuỗi str hoặc ký tự ch, sử dụng thuộc tính attr tại vị trí hiện tại

y, x, str hoặc ch

Di chuyển đến vị trí y,x trong cửa sổ và hiển thị str hoặc ch

y, x, str hoặc ch, attr

Di chuyển đến vị trí y,x trong cửa sổ và hiển thị str hoặc ch, sử dụng thuộc tính attr

Các thuộc tính cho phép hiển thị văn bản dưới dạng bôi đậm như in đậm, gạch chân, đảo mã hoặc có màu. Chúng sẽ được giải thích chi tiết hơn trong tiểu mục tiếp theo

Phương thức

curses.noecho()
8 lấy một chuỗi Python hoặc chuỗi byte làm giá trị được hiển thị. Nội dung của chuỗi phụ được gửi đến thiết bị đầu cuối nguyên trạng. Các chuỗi được mã hóa thành byte sử dụng giá trị của thuộc tính
curses.noecho()
81 của cửa sổ;

Các phương thức

curses.noecho()
83 lấy một ký tự, có thể là một chuỗi có độ dài 1, một chuỗi byte có độ dài 1 hoặc một số nguyên

Các hằng số được cung cấp cho các ký tự mở rộng; . Ví dụ:

curses.noecho()
84 là ký hiệu +/- và
curses.noecho()
85 là góc trên bên trái của hộp (tiện cho việc vẽ đường viền). Bạn cũng có thể sử dụng ký tự Unicode thích hợp

Windows ghi nhớ vị trí con trỏ còn lại sau thao tác cuối cùng, vì vậy nếu bạn bỏ qua tọa độ y, x, chuỗi hoặc ký tự sẽ được hiển thị ở bất kỳ nơi nào thao tác cuối cùng còn lại. Bạn cũng có thể di chuyển con trỏ bằng phương pháp

curses.noecho()
86. Vì một số thiết bị đầu cuối luôn hiển thị con trỏ nhấp nháy, nên bạn có thể muốn đảm bảo rằng con trỏ được định vị ở một số vị trí không gây mất tập trung;

Nếu ứng dụng của bạn hoàn toàn không cần con trỏ nhấp nháy, bạn có thể gọi

curses.noecho()
87 để ẩn nó đi. Để tương thích với các phiên bản nguyền rủa cũ hơn, có chức năng
curses.noecho()
88 đồng nghĩa với
curses.noecho()
89. Khi bool là true, thư viện lời nguyền sẽ cố gắng chặn con trỏ đang nhấp nháy và bạn sẽ không cần phải lo lắng về việc để nó ở những vị trí kỳ lạ

Thuộc tính và Màu sắc¶

Các ký tự có thể được hiển thị theo nhiều cách khác nhau. Các dòng trạng thái trong ứng dụng dựa trên văn bản thường được hiển thị trong video đảo ngược hoặc trình xem văn bản có thể cần đánh dấu một số từ nhất định. lời nguyền hỗ trợ điều này bằng cách cho phép bạn chỉ định một thuộc tính cho mỗi ô trên màn hình

Một thuộc tính là một số nguyên, mỗi bit đại diện cho một thuộc tính khác nhau. Bạn có thể cố gắng hiển thị văn bản với nhiều bit thuộc tính được đặt, nhưng lời nguyền không đảm bảo rằng tất cả các kết hợp có thể đều khả dụng hoặc tất cả chúng đều khác biệt về mặt hình ảnh. Điều đó phụ thuộc vào khả năng của thiết bị đầu cuối đang được sử dụng, vì vậy, cách an toàn nhất là sử dụng các thuộc tính phổ biến nhất hiện có, được liệt kê tại đây

Thuộc tính

Sự mô tả

curses.noecho()
70

văn bản nhấp nháy

curses.noecho()
71

Văn bản sáng hoặc đậm

curses.noecho()
72

Văn bản nửa sáng

curses.noecho()
73

Văn bản đảo ngược video

curses.noecho()
74

Chế độ đánh dấu tốt nhất hiện có

curses.noecho()
75

văn bản được gạch chân

Vì vậy, để hiển thị dòng trạng thái video đảo ngược ở dòng trên cùng của màn hình, bạn có thể viết mã

curses.cbreak()
8

Thư viện lời nguyền cũng hỗ trợ màu trên các thiết bị đầu cuối cung cấp nó. Thiết bị đầu cuối phổ biến nhất như vậy có lẽ là bảng điều khiển Linux, tiếp theo là xterms màu

Để sử dụng màu, bạn phải gọi hàm

curses.noecho()
76 ngay sau khi gọi hàm
curses.cbreak()
2, để khởi tạo bộ màu mặc định (hàm
curses.cbreak()
8 tự động thực hiện việc này). Khi đã xong, hàm
curses.noecho()
79 trả về TRUE nếu thiết bị đầu cuối đang sử dụng thực sự có thể hiển thị màu. (Ghi chú. lời nguyền sử dụng cách đánh vần 'màu' của người Mỹ, thay vì cách đánh vần 'màu' của người Canada/Anh. Nếu bạn đã quen với cách đánh vần của tiếng Anh, bạn sẽ phải cam chịu viết sai chính tả vì lợi ích của các chức năng này. )

Thư viện lời nguyền duy trì một số cặp màu hữu hạn, chứa màu nền trước (hoặc văn bản) và màu nền. Bạn có thể lấy giá trị thuộc tính tương ứng với một cặp màu bằng hàm

curses.cbreak()
60;

Một ví dụ hiển thị một dòng văn bản sử dụng cặp màu 1

curses.noecho()
0

Như tôi đã nói trước đây, một cặp màu bao gồm màu nền trước và màu nền sau. Hàm

curses.cbreak()
62 thay đổi định nghĩa của cặp màu n thành màu nền trước f và màu nền b. Cặp màu 0 cố định thành màu trắng trên nền đen và không thể thay đổi

Các màu được đánh số và

curses.noecho()
76 khởi tạo 8 màu cơ bản khi nó kích hoạt chế độ màu. họ đang. 0. đen, 1. Đỏ 2. màu xanh lá cây, 3. màu vàng, 4. màu xanh, 5. đỏ tươi, 6. lục lam và 7. trắng. Mô-đun
curses.noecho()
6 xác định các hằng số được đặt tên cho từng màu này.
curses.cbreak()
65,
curses.cbreak()
66, v.v.

Hãy tập hợp tất cả những thứ này lại với nhau. Để thay đổi màu 1 thành văn bản màu đỏ trên nền trắng, bạn sẽ gọi

curses.noecho()
1

Khi bạn thay đổi một cặp màu, bất kỳ văn bản nào đã được hiển thị bằng cặp màu đó sẽ chuyển sang màu mới. Bạn cũng có thể hiển thị văn bản mới bằng màu này với

curses.noecho()
2

Các thiết bị đầu cuối rất lạ mắt có thể thay đổi định nghĩa của màu thực tế thành một giá trị RGB nhất định. Điều này cho phép bạn thay đổi màu 1, thường là màu đỏ, thành màu tím hoặc xanh dương hoặc bất kỳ màu nào khác mà bạn thích. Thật không may, bảng điều khiển Linux không hỗ trợ điều này, vì vậy tôi không thể dùng thử và không thể cung cấp bất kỳ ví dụ nào. Bạn có thể kiểm tra xem thiết bị đầu cuối của mình có thể thực hiện việc này hay không bằng cách gọi

curses.cbreak()
67, trả về
curses.cbreak()
68 nếu có khả năng. Nếu bạn đủ may mắn để có một thiết bị đầu cuối tài năng như vậy, hãy tham khảo các trang hướng dẫn của hệ thống để biết thêm thông tin

Đầu vào của người dùng¶

Thư viện lời nguyền C chỉ cung cấp các cơ chế nhập liệu rất đơn giản. Mô-đun

curses.noecho()
6 của Python thêm tiện ích nhập văn bản cơ bản. (Các thư viện khác như Urwid có nhiều bộ sưu tập vật dụng phong phú hơn. )

Có hai phương pháp để nhận đầu vào từ một cửa sổ

  • curses.cbreak()
    
    80 làm mới màn hình và sau đó đợi người dùng nhấn một phím, hiển thị phím đó nếu
    curses.cbreak()
    
    81 đã được gọi trước đó. Bạn có thể tùy chọn chỉ định tọa độ mà con trỏ sẽ được di chuyển trước khi tạm dừng

  • curses.cbreak()
    
    82 làm điều tương tự nhưng chuyển đổi số nguyên thành chuỗi. Các ký tự riêng lẻ được trả về dưới dạng chuỗi 1 ký tự và các phím đặc biệt như phím chức năng trả về các chuỗi dài hơn chứa tên khóa, chẳng hạn như
    curses.cbreak()
    
    83 hoặc
    curses.cbreak()
    
    84

Có thể không đợi người dùng bằng cách sử dụng phương pháp cửa sổ

curses.cbreak()
85. Sau
curses.cbreak()
86,
curses.cbreak()
80 và
curses.cbreak()
82 cho cửa sổ trở thành không chặn. Để báo hiệu rằng không có đầu vào nào sẵn sàng, ________ 680 trả về ________ 000 (giá trị -1) và ________ 682 đưa ra một ngoại lệ. Ngoài ra còn có chức năng
curses.noecho()
02, có thể được sử dụng để (thực tế) đặt hẹn giờ trên mỗi
curses.cbreak()
80;

Phương thức

curses.cbreak()
80 trả về một số nguyên; . Các giá trị lớn hơn 255 là các phím đặc biệt như Page Up, Home hoặc phím con trỏ. Bạn có thể so sánh giá trị được trả về với các hằng số như
curses.noecho()
05,
curses.noecho()
06 hoặc
curses.cbreak()
6. Vòng lặp chính của chương trình của bạn có thể trông giống như thế này

curses.noecho()
3

Mô-đun

curses.noecho()
08 cung cấp các hàm thuộc lớp ASCII lấy đối số là số nguyên hoặc chuỗi 1 ký tự; . Nó cũng cung cấp các hàm chuyển đổi lấy đối số là số nguyên hoặc chuỗi 1 ký tự và trả về cùng loại. Ví dụ:
curses.noecho()
09 trả về ký tự điều khiển tương ứng với đối số của nó

Ngoài ra còn có một phương thức để truy xuất toàn bộ chuỗi,

curses.noecho()
10. Nó không được sử dụng thường xuyên vì chức năng của nó khá hạn chế; . Nó có thể tùy chọn được giới hạn ở một số ký tự cố định

curses.noecho()
4

Mô-đun

curses.noecho()
11 cung cấp hộp văn bản hỗ trợ bộ tổ hợp phím giống như Emacs. Các phương pháp khác nhau của lớp
curses.noecho()
12 hỗ trợ chỉnh sửa với xác thực đầu vào và thu thập kết quả chỉnh sửa có hoặc không có dấu cách. Đây là một ví dụ

curses.noecho()
5

Xem tài liệu thư viện trên

curses.noecho()
11 để biết thêm chi tiết

Để biết thêm thông tin¶

HOWTO này không đề cập đến một số chủ đề nâng cao, chẳng hạn như đọc nội dung của màn hình hoặc ghi lại các sự kiện chuột từ phiên bản xterm, nhưng trang thư viện Python cho mô-đun

curses.noecho()
6 hiện đã hoàn tất một cách hợp lý. Bạn nên duyệt nó tiếp theo

Nếu bạn nghi ngờ về hành vi chi tiết của các chức năng nguyền rủa, hãy tham khảo các trang hướng dẫn để triển khai các lời nguyền của bạn, cho dù đó là ncurses hay của nhà cung cấp Unix độc quyền. Các trang hướng dẫn sẽ ghi lại bất kỳ điều kỳ quặc nào và cung cấp danh sách đầy đủ tất cả các chức năng, thuộc tính và ký tự

curses.noecho()
15 có sẵn cho bạn

Vì API nguyền rủa quá lớn nên một số chức năng không được hỗ trợ trong giao diện Python. Thường thì điều này không phải vì chúng khó thực hiện mà vì chưa có ai cần đến chúng. Ngoài ra, Python chưa hỗ trợ thư viện menu liên quan đến ncurses. Các bản vá bổ sung hỗ trợ cho những thứ này sẽ được hoan nghênh;

  • Viết chương trình với NCURSES. một hướng dẫn dài cho các lập trình viên C

  • Trang người đàn ông ncurses

  • Câu hỏi thường gặp về ncurses

  • “Hãy nguyền rủa… đừng chửi thề”. video về cuộc nói chuyện của PyCon 2013 về việc điều khiển thiết bị đầu cuối bằng cách sử dụng lời nguyền hoặc Urwid

  • “Ứng dụng bảng điều khiển với Urwid”. video về cuộc nói chuyện về PyCon CA 2012 minh họa một số ứng dụng được viết bằng Urwid