中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

簡單的Python的curses庫使用教程
來源:易賢網(wǎng) 閱讀:1613 次 日期:2015-04-14 15:07:19
溫馨提示:易賢網(wǎng)小編為您整理了“簡單的Python的curses庫使用教程”,方便廣大網(wǎng)友查閱!

curses 庫 ( ncurses ) 提供了控制字符屏幕的獨立于終端的方法。curses 是大多數(shù)類似于 UNIX 的系統(tǒng)(包括 Linux)的標(biāo)準(zhǔn)部分,而且它已經(jīng)移植到 Windows 和其它系統(tǒng)。curses 程序?qū)⒃诩兾谋鞠到y(tǒng)上、xterm 和其它窗口化控制臺會話中運行,這使這些應(yīng)用程序具有良好的可移植性。

介紹 curses

Python 的標(biāo)準(zhǔn) curses 提供了“玻璃電傳”(glass teletype)(在 20 世紀(jì) 70 年代,原始 curses 庫剛創(chuàng)建時,它叫做 CRT)的公共特性的基本接口。有許多方法可以讓用 Python 編寫的交互式文本模式程序變得更巧妙。這些方法分成兩類。

一方面,有些Python 模塊支持 ncurses (curses 的超集)或 slang (相似卻獨立的控制臺庫)的全部功能集合。最值得注意的是,這當(dāng)中有一個增強(qiáng)庫(由適當(dāng)?shù)?Python 模塊封裝)可以讓您將顏色添加到界面上。

另一方面,許多構(gòu)建在curses(或 ncurses / slang )上的高級窗口小部件庫添加了諸如按鈕、菜單、滾動欄和各種公共界面設(shè)備之類的特性。如果您看到過用諸如 Borland's TurboWindows(DOS 版)之類的庫開發(fā)的應(yīng)用程序,您就知道在文本模式控制臺中,這些特性是多么吸引人。窗口小部件庫中的功能單單使用 curses 都可以達(dá)到,但是還可以利用其它程序員在高級界面上取得的成果。請參閱 參考資料,以尋找所提到的模塊的鏈接。

本文只涉及 curses 自身的特性。由于 curses 模塊是標(biāo)準(zhǔn)發(fā)行版的一部分,您不必下載支持庫或其它 Python 模塊就可以找到并使用它(至少在 Linux 或 UNIX 系統(tǒng)中是這樣)。理解 curses 提供的基本支持很有用,即使只是作為理解高級模塊的基礎(chǔ)。即使不使用其它模塊,單獨使用 curses 構(gòu)建漂亮且實用的 Python 文本模式應(yīng)用程序也很簡單。預(yù)先發(fā)行的說明提到 Python 2.0 將包括 curses 的增強(qiáng)版本,但不管怎樣,它應(yīng)該兼容此處說明的版本。

應(yīng)用程序

我將討論為 Txt2Html(在 “可愛的 Python:我的第一個基于 Web 的過濾代理” 中介紹的文本到 HTML 轉(zhuǎn)換程序)編寫的封裝器,作為本文的測試應(yīng)用程序。Txt2Html 有幾種運行方式。但為了與本文的目的保持一致,我們將研究從命令行運行的 Txt2Html。操作 Txt2Html 的一種方式是向它提供一組命令行變量(它們說明要執(zhí)行的轉(zhuǎn)換的各方面),然后將應(yīng)用程序當(dāng)作批處理運行。對于偶爾使用的用戶,一個更友好的用戶界面提供了一個交互式選擇屏幕,它可以在執(zhí)行實際轉(zhuǎn)換之前,引導(dǎo)用戶遍歷轉(zhuǎn)換選項(提供選中選項的視覺反饋)。

curses_txt2html 的界面基于常見的頂欄菜單,它帶有下拉和嵌套子菜單。所有菜單相關(guān)的功能都在 curses 上“從頭”開始設(shè)計。雖然這些菜單缺少更復(fù)雜的 curses 封裝器的一些特性,但它們的基本功能是由幾行只使用 curses 的代碼實現(xiàn)的。這個界面還帶有一個簡單的卷動幫助框和幾個用戶輸入字段。以下是顯示常規(guī)布局和樣式的應(yīng)用程序的屏幕快照。

X終端上的應(yīng)用程序

名單

2015411164836286.gif (486×262)

Linux終端上的應(yīng)用程序

名單1

2015411164913129.gif (667×430)

封裝 curses 應(yīng)用程序

curses 編程的基本元素是窗口對象。窗口是帶有一個可尋址光標(biāo)的實際物理屏幕的區(qū)域,光標(biāo)的坐標(biāo)與窗口相關(guān)。可以到處移動窗口,并且可以創(chuàng)建和刪除窗口而不影響其它窗口。在窗口對象中,輸入或輸出操作發(fā)生在光標(biāo)上,這通常由輸入或輸出方法明確設(shè)置,但也可以分別修改。

在初始化 curses 之后,可以用各種方式修改或完全禁用面向流的控制臺輸入和輸出。這基本上就是使用 curses 的全部重點。可是一旦更改了流式控制臺交互,如果程序出錯,將不會以正常方式顯示 Python 追溯事件。Andrew Kuchling 使用一個很好的 curses 程序頂級框架解決了這個問題(請參閱 參考資料中他的教程)。

以下模板(基本上與 Kuchling 的相同)保留在正常命令行 Python 的錯誤報告功能:

Python [curses] 程序的頂層設(shè)置代碼

?123456789101112131415161718192021222324252627282930313233343536373839 import curses, traceback if __name__== '__main__': try : # Initialize curses stdscr=curses.initscr() # Turn off echoing of keys, and enter cbreak mode, # where no buffering is performed on keyboard input curses.noecho() curses.cbreak() # In keypad mode, escape sequences for special keys # (like the cursor keys) will be interpreted and # a special value like curses.KEY_LEFT will be returned stdscr.keypad(1) main(stdscr) # Enter the main loop # Set everything back to normal stdscr.keypad(0) curses.echo() curses.nocbreak() curses.endwin() # Terminate curses except : # In event of error, restore terminal to sane state. stdscr.keypad(0) curses.echo() curses.nocbreak() curses.endwin() traceback.print_exc() # Print the exception

try 代碼塊執(zhí)行一些初始化,調(diào)用 main() 函數(shù)來執(zhí)行實際工作,然后執(zhí)行最后的清除。如果出錯, except 代碼塊會將控制臺恢復(fù)成缺省狀態(tài),然后報告遇到的異常。

main() 事件循環(huán)

現(xiàn)在,我們研究 main() 函數(shù),看看 curses_txt2html 做些什么:

curses_txt2html.py main() 函數(shù)和事件循環(huán)

?123456789101112131415161718192021222324252627282930313233 defmain (stdscr): # Frame the interface area at fixed VT100 size global screen screen = stdscr.subwin(23, 79, 0, 0) screen.box() screen.hline(2, 1, curses.ACS_HLINE, 77) screen.refresh() # Define the topbar menus file_menu = ( "File", "file_func()") proxy_menu = ( "Proxy Mode", "proxy_func()") doit_menu = ( "Do It!", "doit_func()") help_menu = ( "Help", "help_func()") exit_menu = ( "Exit", "EXIT") # Add the topbar menus to screen object topbar_menu((file_menu, proxy_menu, doit_menu, help_menu, exit_menu)) # Enter the topbar menu loop while topbar_key_handler(): draw_dict()

根據(jù)由空行隔開的三部分,很容易理解 main() 函數(shù)。

第一部分執(zhí)行應(yīng)用程序外觀的常規(guī)設(shè)置。為了建立應(yīng)用程序元素之間的可預(yù)期間隔,交互式區(qū)域限制在 80 x 25 VT100/PC 屏幕大小(即使實際的終端窗口更大)。程序圍繞這個子窗口繪制一個框,并使用水平線畫出頂欄菜單的視覺偏移量。

第二部分建立應(yīng)用程序所使用的菜單。函數(shù) topbar_menu() 使用一些技巧將熱鍵綁定到應(yīng)用程序操作并用期望的視覺屬性來顯示菜單。請獲取源碼檔案(請參閱 參考資料 )以查看所有代碼。 topbar_menu() 應(yīng)該是非常普通的。(歡迎將它合并到您自己的應(yīng)用程序中。)非常重要的是一旦綁定了熱鍵,它們就 eval() 與菜單相關(guān)的字節(jié)組第二個元素中包含的字符串。例如,激活以上設(shè)置中的 "File" 菜單將調(diào)用 "eval("file_func()")"。所以就要求應(yīng)用程序定義叫做 file_func() 的函數(shù),要求它返回一個布爾 (Boolean) 值以表示是否達(dá)到應(yīng)用程序終止?fàn)顟B(tài)。

第三部分只有兩行,但這正是整個應(yīng)用程序?qū)嶋H運行的部分。函數(shù) topbar_key_handler() 就像它的名稱所暗示的:它等待擊鍵,然后處理它們。擊鍵處理程序可以會返回 Boolean false 值。(如果是這樣,則應(yīng)用程序終止。)該應(yīng)用程序中,鍵處理程序主要是檢查第二段中綁定的鍵。但即使您的 curses 應(yīng)用程序綁定鍵的方式與該應(yīng)用程序不同,您仍要使用類似的事件循環(huán)。處理程序的關(guān)鍵部分很可能使用以下這行代碼:

c = screen.getch()# read a keypress

對 draw_dict() 的調(diào)用只是事件循環(huán)中唯一的代碼。此函數(shù)繪制了 screen 窗口中幾處位置中的值。但在應(yīng)用程序中,您可能想要將以下這行代碼:

screen.refresh() # redraw the screen w/ any new output

加到繪制/刷新函數(shù)中(或只加到事件循環(huán)本身中)。

獲取用戶輸入

curses 應(yīng)用程序以擊鍵事件的形式獲取所有用戶輸入。我們已經(jīng)看過了 .getch() 方法,現(xiàn)在讓我們看一下將 .getch() 與其它輸入方法組合在一起的例子 .getstr() 。以下就是我們以前提到的 file_func() 函數(shù)的縮寫版本(它由 "File" 菜單激活)。

curses_txt2html.py file_func() 函數(shù)

?123456789101112131415161718192021222324252627282930313233343536373839404142 deffile_func (): s = curses.newwin(5,10,2,1) s.box() s.addstr(1,2, "I", hotkey_attr) s.addstr(1,3, "nput", menu_attr) s.addstr(2,2, "O", hotkey_attr) s.addstr(2,3, "utput", menu_attr) s.addstr(3,2, "T", hotkey_attr) s.addstr(3,3, "ype", menu_attr) s.addstr(1,2, "", hotkey_attr) s.refresh() c = s.getch() if c in (ord( 'I'), ord( 'i'), curses.KEY_ENTER, 10): curses.echo() s.erase() screen.addstr(5,33, " "*43, curses.A_UNDERLINE) cfg_dict[ 'source'] = screen.getstr(5,33) curses.noecho() else : curses.beep() s.erase() return CONTINUE

此函數(shù)組合了幾個 curses 特性。它做的第一件事就是創(chuàng)建另一個窗口對象。由于這個新窗口對象是 "File" 選擇項的實際下拉菜單,所以程序使用 .box() 方法圍著它繪制了一個框架。在窗口 s 中,程序繪制了幾個下拉菜單選項。使用了一種稍微費力的方法突出顯示了每個選項的熱鍵,這樣就與選項描述的其余部分形成了對比。(請查看完整源碼(請參閱 參考資料 )中的 topbar_menu() 以學(xué)習(xí)一種能稍微自動處理突出顯示的方法。)最后的 .addstr() 調(diào)用將光標(biāo)移到缺省菜單選項。如同主屏幕一樣, s.refresh() 實際上顯示了畫到窗口對象上的元素。

繪制了下拉菜單后,程序使用簡單的 s.getch() 調(diào)用來獲取用戶的選擇項。在演示應(yīng)用程序中,菜單只響應(yīng)熱鍵,但不響應(yīng)箭頭鍵或可移動突出顯示欄。可以通過捕捉附加鍵操作并在下拉菜單中設(shè)置事件循環(huán)來構(gòu)建這些更復(fù)雜的菜單功能。但這個例子已經(jīng)足夠說明這種概念了。

接著,程序?qū)傋x取的擊鍵與各種熱鍵值做比較。在本例中,熱鍵的大小寫都可以激活下拉菜單選項,并且可以使用 ENTER 鍵激活缺省選項。(curses 特殊鍵常量看上去并不完全可靠,我發(fā)現(xiàn)必須添加實際的 ASCII 值 "10" 來捕捉 ENTER 鍵。)請注意,如果要執(zhí)行字符值比較,那么要將字符串封裝到 ord() 內(nèi)置 Python 函數(shù)中。

當(dāng)選中 "Input" 選項時,程序會使用 .getstr() 方法,該方法提供帶有原始編輯能力的字段輸入(可以使用退格鍵)。由 ENTER 鍵終止輸入,然后方法返回輸入的值。通常會像上例中一樣,將這個值分配給一個變量。

為了在視覺上區(qū)別輸入字段,我使用了一點小技巧,預(yù)先向?qū)⒁l(fā)生數(shù)據(jù)輸入的區(qū)域添加了下劃線。無論如何,這都是必要的,但它添加了一種視覺效果。由以下這行代碼畫出下劃線:

?1 screen.addstr(5,33, " "*43, curses.A_UNDERLINE)

當(dāng)然,程序還必須除去下劃線,這項工作在 draw_dict() 刷新函數(shù)中由以下這行代碼執(zhí)行:

?1 screen.addstr(5,33, " "*43, curses.A_NORMAL)

結(jié)束語

這里概述的技術(shù)以及在完整應(yīng)用程序源代碼(請參閱 參考資料 )中使用的那些技術(shù)應(yīng)該可以讓您初步了解 curses 編程。請使用它來編寫您的應(yīng)用程序。它并不難使用。告訴您一個好消息,除了 Python 以外,有許多語言可以訪問 curses 庫,因此您學(xué)到的使用 Python curses 模塊的知識同樣適用于其它語言。

如果經(jīng)檢驗,基本 curses 模塊不能滿足您的要求,“參考資料”節(jié)中提供了許多模塊的鏈接,他們增添了 curses 的功能并提供了非常好的發(fā)展方向。

更多信息請查看IT技術(shù)專欄

更多信息請查看腳本欄目
易賢網(wǎng)手機(jī)網(wǎng)站地址:簡單的Python的curses庫使用教程
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2026上岸·考公考編培訓(xùn)報班

  • 報班類型
  • 姓名
  • 手機(jī)號
  • 驗證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機(jī)站點 | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報警專用圖標(biāo)
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
久久婷婷丁香| 亚洲女性裸体视频| 国产精品国产三级国产普通话蜜臀| 欧美国产一区二区在线观看| 欧美女同视频| 国产在线精品自拍| 亚洲国产专区校园欧美| 亚洲欧美日韩精品| 美女精品在线| 国产欧美日韩在线| 亚洲美女网站| 久久女同精品一区二区| 欧美性大战久久久久久久| 亚洲大胆av| 久久久久久久97| 国产精品一区二区欧美| 一区二区三区四区蜜桃| 美国成人直播| 国产一区二区三区四区五区美女| 在线精品亚洲| 久久精品国产第一区二区三区最新章节| 欧美伊人久久大香线蕉综合69| 美女脱光内衣内裤视频久久影院 | 亚洲欧美国产精品va在线观看| 免费不卡欧美自拍视频| 国产亚洲欧美一区| 午夜在线精品偷拍| 国产精品―色哟哟| 亚洲欧美日韩成人| 国产精品女主播| 亚洲综合电影一区二区三区| 欧美色大人视频| 在线一区日本视频| 欧美成人免费播放| 亚洲成色精品| 欧美成人精品福利| 国内自拍一区| 性色一区二区三区| 国产精品久久久久久久久久尿| 亚洲免费观看在线视频| 欧美激情一区二区三区全黄 | 在线观看91精品国产入口| 久久国产精品黑丝| 国产欧美午夜| 久久精品国产亚洲5555| 欧美视频不卡中文| 亚洲一二三区精品| 国产精品电影网站| 欧美影院成人| 国产深夜精品福利| 性欧美videos另类喷潮| 国产伦精品一区二区三区免费| 一本色道久久综合| 国产精品久久婷婷六月丁香| 亚洲欧美日韩国产成人| 国产精品专区第二| 欧美一区二区在线视频| 国产一区视频在线观看免费| 久久精品国产欧美亚洲人人爽| 激情综合色综合久久| 免费永久网站黄欧美| 亚洲精品一区二区网址| 美玉足脚交一区二区三区图片| 亚洲国产成人精品久久久国产成人一区| 久久久久亚洲综合| 韩日成人av| 国产精品网站在线观看| 亚洲欧美日韩视频一区| 国产在线拍揄自揄视频不卡99 | 亚洲精品婷婷| 国产精品乱子久久久久| 久久久久一本一区二区青青蜜月| 亚洲高清视频的网址| 国产精品网红福利| 欧美国产日本韩| 欧美影院成人| 中文网丁香综合网| 在线观看国产日韩| 国产精品丝袜91| 欧美高清在线一区二区| 亚洲调教视频在线观看| 国产亚洲一区精品| 国产精品99一区二区| 蜜桃久久av一区| 久久精品国产亚洲5555| 一区二区三区精品在线| 亚洲日本欧美| 黄色亚洲精品| 国产伦精品一区二区三区四区免费 | 国产欧美婷婷中文| 久久视频在线视频| 亚洲欧美另类久久久精品2019| 亚洲人成小说网站色在线| 国产午夜精品理论片a级大结局| 欧美女同视频| 另类专区欧美制服同性| 欧美一级专区| 亚洲午夜免费视频| 9国产精品视频| 亚洲欧洲日本专区| 亚洲国产精品激情在线观看| 国产视频一区在线观看一区免费| 国产精品乱码一区二区三区| 欧美午夜www高清视频| 欧美精品色一区二区三区| 久久免费视频网| 久久国产综合精品| 久久精品日韩欧美| 久久久亚洲高清| 裸体女人亚洲精品一区| 美国成人直播| 欧美成人资源| 欧美黄色网络| 国产精品高潮久久| 国产精品美女久久久免费| 欧美日韩综合一区| 欧美视频一区二区三区…| 欧美精品在线免费观看| 欧美精品一区二区视频| 欧美二区乱c少妇| 欧美激情bt| 欧美日韩一区在线观看| 一区二区在线视频观看| 伊人婷婷久久| 亚洲第一天堂无码专区| 9色精品在线| 午夜精品亚洲| 美国三级日本三级久久99| 欧美黑人国产人伦爽爽爽| 欧美日韩人人澡狠狠躁视频| 国产精品萝li| 国产欧美丝祙| 亚洲国产精品久久人人爱蜜臀| 99精品福利视频| 午夜一区二区三区在线观看| 久久一区二区三区国产精品 | 亚洲免费视频一区二区| 欧美在线播放视频| 欧美国产91| 国产精品嫩草影院一区二区| 激情久久一区| 中国女人久久久| 久久久久久高潮国产精品视| 欧美日韩成人综合| 国语自产精品视频在线看抢先版结局 | 国产精品永久免费观看| 国产精品视频最多的网站| 国产美女一区| 1024国产精品| 中文国产一区| 久久蜜桃av一区精品变态类天堂| 欧美jizzhd精品欧美喷水| 欧美日韩一区二区三区在线看| 国产色综合久久| 99热这里只有精品8| 亚洲欧美日韩一区在线观看| 久久综合国产精品台湾中文娱乐网| 欧美国产一区视频在线观看| 国内精品模特av私拍在线观看| 鲁大师影院一区二区三区| 一二美女精品欧洲| 老牛嫩草一区二区三区日本| 国产精品国产三级国产专播精品人| 国外成人网址| 欧美一级在线播放| 亚洲欧洲在线看| 国产视频一区二区在线观看| 亚洲国产成人久久综合一区| 久久精品av麻豆的观看方式| 国产精品成人v| 亚洲免费激情| 欧美激情精品久久久久久大尺度| 国产一区二区精品丝袜| 亚洲欧美日韩一区在线观看| 欧美日韩三级| 中文国产成人精品| 国产日韩欧美| 亚洲欧美在线网| 国产精品嫩草久久久久| 亚洲综合第一| 国产精品女人网站| 亚洲激情网址| 午夜一区在线| 欧美日韩在线视频一区| 亚洲第一精品久久忘忧草社区| 欧美一区二区三区喷汁尤物| 国产精品福利片| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 欧美诱惑福利视频| 国产美女扒开尿口久久久| 亚洲欧美精品一区| 国产欧美91| 久久精品国产99国产精品| 在线观看欧美日韩| 久久久久久久综合| 亚洲经典自拍| 欧美日产国产成人免费图片| 国产一区二区久久精品| 午夜精品美女久久久久av福利| 欧美另类69精品久久久久9999|