国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

簡(jiǎn)單介紹利用TK在Python下進(jìn)行GUI編程的教程

來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 14:32:32
文檔

簡(jiǎn)單介紹利用TK在Python下進(jìn)行GUI編程的教程

簡(jiǎn)單介紹利用TK在Python下進(jìn)行GUI編程的教程:我想要向您介紹能想像到的開始 GUI 編程的最簡(jiǎn)單方法,就是使用 Scriptics 的 TK 和 Tkinter 封裝器。我們將與 developerWorks 中的 Python 中的 curses 編程 提到的 curses 庫(kù)進(jìn)行很多比較。除了 curses 實(shí)現(xiàn)文本控制臺(tái)而 TK 實(shí)現(xiàn) GUI
推薦度:
導(dǎo)讀簡(jiǎn)單介紹利用TK在Python下進(jìn)行GUI編程的教程:我想要向您介紹能想像到的開始 GUI 編程的最簡(jiǎn)單方法,就是使用 Scriptics 的 TK 和 Tkinter 封裝器。我們將與 developerWorks 中的 Python 中的 curses 編程 提到的 curses 庫(kù)進(jìn)行很多比較。除了 curses 實(shí)現(xiàn)文本控制臺(tái)而 TK 實(shí)現(xiàn) GUI
我想要向您介紹能想像到的開始 GUI 編程的最簡(jiǎn)單方法,就是使用 Scriptics 的 TK 和 Tkinter 封裝器。我們將與 developerWorks 中的 “Python 中的 curses 編程” 提到的 curses 庫(kù)進(jìn)行很多比較。除了 curses 實(shí)現(xiàn)文本控制臺(tái)而 TK 實(shí)現(xiàn) GUI 這一差別之外,這兩個(gè)庫(kù)有著驚人相似的接口。在使用任何一個(gè)庫(kù)之前,需要基本了解窗口和事件循環(huán),并參考可用的窗口小部件。(好,好的參考和適量的練習(xí)。)

如同關(guān)于 curses 的文章,本文僅討論 Tkinter 本身的特性。既然很多 Python 發(fā)行版都帶有 Tkinter,因此可能無(wú)需下載支持庫(kù)或其它 Python 模塊。本文后面的 參考資料 指向幾個(gè)更高級(jí)別的用戶接口窗口小部件的集合,但是您可以用 Tkinter 本身做許多事,包括構(gòu)造自己的高級(jí)窗口小部件。學(xué)習(xí)基本 Tkinter 模塊將為您引入 TK 的思維方式,即使您繼續(xù)使用更高級(jí)的窗口小部件集合,這種思維方式仍十分重要。
TK 簡(jiǎn)要描述

TK 是與 TCL 語(yǔ)言關(guān)系最密切、且被廣泛使用的圖形庫(kù),TCL 語(yǔ)言和 TK 都由 John Ousterhout 開發(fā)。雖然 TK 于 1991 年作為 X11 庫(kù)出現(xiàn),但實(shí)際上它從那時(shí)起就被移植到每一種流行的 GUI。(它與 Python 逐漸擁有“標(biāo)準(zhǔn)”GUI 的情形相似。)現(xiàn)在,大多數(shù)流行語(yǔ)言和很多小型語(yǔ)言都有 TK 綁定(Tkinter 模塊)。

在開始之前,我必須承認(rèn):我不是瘦小枯干的 TK 編程專家。事實(shí)上,我的大部分 TK 編程經(jīng)驗(yàn)大約從我寫這篇文章三天前才開始。那三天并非沒有挑戰(zhàn),但是最后我覺得很好地掌握了 Tkinter。我在這里要說(shuō)的是:TK 和 Tkinter 封裝器設(shè)計(jì)得都非常好,便于用戶操作,并且只是關(guān)于 GUI 編程最簡(jiǎn)單的介紹。

從測(cè)試應(yīng)用程序開始

我們將使用 Txt2Html,這個(gè)在以前很多專欄(請(qǐng)參閱 參考資料 )中使用的文件格式轉(zhuǎn)換程序,的封裝器作為測(cè)試應(yīng)用程序。雖然可以用幾種方式運(yùn)行 Txt2Html,但這里的封裝器卻要從命令行運(yùn)行 Txt2Html。該應(yīng)用程序以批處理進(jìn)程的形式運(yùn)行,并帶有指出要執(zhí)行的轉(zhuǎn)換各方面特性的命令行自變量。(以后,最好為用戶提供交互式選擇屏幕選項(xiàng),以在執(zhí)行實(shí)際轉(zhuǎn)換之前引導(dǎo)用戶逐步選擇不同的轉(zhuǎn)換選項(xiàng)并提供所選選項(xiàng)的可視反饋。)

tk_txt2html 基于帶有下拉菜單和嵌套子菜單的頂部菜單。旁邊有詳細(xì)的實(shí)現(xiàn)說(shuō)明,它看起來(lái)與在 “Python 中的 Curses 編程” 中討論的 curses 版本很相象。雖然 TK 用較少的代碼可以實(shí)現(xiàn)更多的功能,但很明顯,tk_txt2html 和 curses_txt2html 很相似。例如,在 TK 中,象菜單這樣的特性可以依靠?jī)?nèi)置的 Tkinter 類實(shí)現(xiàn),而無(wú)需從頭編寫。

除了設(shè)置配置選項(xiàng)之外,TK 封裝器還包括一個(gè)與 TK Text 窗口小部件一起構(gòu)建的滾動(dòng)幫助框(一個(gè)帶有 Message 窗口小部件的“關(guān)于”框)和一個(gè)進(jìn)行 TK 動(dòng)態(tài)幾何管理的歷史窗口。與大多數(shù)交互式應(yīng)用程序一樣,封裝器用 TK 的 Entry 窗口小部件接受某些用戶輸入。

在進(jìn)一步討論代碼之前,讓我們看一下實(shí)際運(yùn)行中的應(yīng)用程序。

201541390858446.gif (565×236)

學(xué)習(xí)基本知識(shí)

實(shí)際上,Tkinter 程序只需做三件事:
最小的 [Tkinter] 程序

import Tkinter # import the Tkinter module
root = Tkinter.Tk() # create a root window
root.mainloop() # create an event loop

這是一個(gè)完全有效的 Tkinter 程序(不要介意它沒有實(shí)際用處,因?yàn)樗踔敛还芾?"hello world")。該程序唯一需要做的是創(chuàng)建一些容納其根窗口的窗口小部件。這樣增強(qiáng)之后,無(wú)需程序員進(jìn)一步干涉,該程序的 root .mainloop() 方法調(diào)用就可以處理所有用戶交互。

main() 函數(shù)

現(xiàn)在,我們看一下 tk_txt2html.py 更現(xiàn)實(shí)的 main() 函數(shù)。請(qǐng)注意,我更喜歡使用 John Grayson 的 import Tkinter 語(yǔ)句,而不是 from Tkinter import (請(qǐng)參閱 參考資料 中所列的他的書籍)。這不是因?yàn)槲覔?dān)心名稱空間的干擾( from ... import 語(yǔ)句的通常警告),而是因?yàn)槲蚁朊鞔_使用 Tkinter 類;我不想冒險(xiǎn)將它們與我自己的函數(shù)和類相混淆)。建議您也這樣做,至少在開始時(shí)這樣做。
tk_txt2html main() 函數(shù)

def main():
 global root, history_frame, info_line
 root = Tkinter.Tk()
 root.title('Txt2Html TK Shell')
 init_vars()
 #-- Create the menu frame, and menus to the menu frame
 menu_frame = Tkinter.Frame(root)
 menu_frame.pack(fill=Tkinter.X, side=Tkinter.TOP)
 menu_frame.tk_menuBar(file_menu(), action_menu(), help_menu())
 #-- Create the history frame (to be filled in during runtime)
 history_frame = Tkinter.Frame(root)
 history_frame.pack(fill=Tkinter.X, side=Tkinter.BOTTOM, pady=2)
 #-- Create the info frame and fill with initial contents
 info_frame = Tkinter.Frame(root)
 info_frame.pack(fill=Tkinter.X, side=Tkinter.BOTTOM)
 # first put the column labels in a sub-frame
 LEFT, Label = Tkinter.LEFT, Tkinter.Label # shortcut names
 label_line = Tkinter.Frame(info_frame, relief=Tkinter.RAISED, borderwidth=1)
 label_line.pack(side=Tkinter.TOP, padx=2, pady=1)
 Label(label_line, text="Run #", width=5).pack(side=LEFT)
 Label(label_line, text="Source:", width=20).pack(side=LEFT)
 Label(label_line, text="Target:", width=20).pack(side=LEFT)
 Label(label_line, text="Type:", width=20).pack(side=LEFT)
 Label(label_line, text="Proxy Mode:", width=20).pack(side=LEFT)
 # then put the "next run" information in a sub-frame
 info_line = Tkinter.Frame(info_frame)
 info_line.pack(side=Tkinter.TOP, padx=2, pady=1)
 update_specs()
 #-- Finally, let's actually do all that stuff created above
 root.mainloop()

在這個(gè)簡(jiǎn)單的 main() 函數(shù)中有幾件事要注意:

每一個(gè)窗口小部件都有一個(gè)父代。每當(dāng)創(chuàng)建窗口小部件時(shí),傳遞給實(shí)例創(chuàng)建的第一個(gè)自變量是新的窗口小部件的父代。
如果有其它窗口小部件創(chuàng)建自變量,將通過(guò)名稱傳遞它們。Python 的這一特性給我們以指定選項(xiàng)或允許它們?nèi)∪笔≈档臉O大靈活性。
有幾個(gè)窗口小部件實(shí)例 (Frame) 是全局變量。可以通過(guò)在函數(shù)間傳遞變量來(lái)使它們成為本地變量,以便維護(hù)代碼范圍的理論純潔性,但是與它的實(shí)際用處相比過(guò)于麻煩。另外,使這些基本的 UI 元素全局化強(qiáng)調(diào)了這樣一個(gè)事實(shí):它們可以在整個(gè)函數(shù)中使用。但是,要確保對(duì)自己的全局變量使用良好的命名規(guī)范。(事先給您一個(gè)警告,Python 人員看起來(lái)討厭匈牙利符號(hào)。)
創(chuàng)建完窗口小部件之后,我們調(diào)用一個(gè)幾何圖形管理器來(lái)讓 TK 知道在哪里放置窗口小部件。TK 在計(jì)算細(xì)節(jié)信息時(shí)有許多魔力,特別是當(dāng)調(diào)整窗口大小或動(dòng)態(tài)添加窗口小部件時(shí)更是如此。但是在任何情況下,都需要讓 TK 知道使用哪套咒語(yǔ)。

應(yīng)用幾何圖形管理器

TK 提供三個(gè)幾何圖形管理器: .pack() 、 .grid() 和 .place() 。雖然 .place() 可用于精細(xì)(換句話說(shuō),非常復(fù)雜)的控制,但 tk_txt2html 只使用頭兩個(gè)。大多數(shù)時(shí)候,您將使用 .pack() 。

當(dāng)然,可以不帶自變量來(lái)調(diào)用 .pack() 方法。但是如果那樣做,窗口小部件可能會(huì)在顯示屏幕的某處結(jié)束,您可能也想為 .pack() 提供一些提示。這些提示中最重要的是 side 自變量。可能的值是 LEFT、RIGHT、TOP 和 BOTTOM(請(qǐng)注意這些是 Tkinter 名稱空間中的變量)。

.pack() 的許多魔力來(lái)自可以將窗口小部件嵌套這一事實(shí)。特別的,除了作為其它窗口小部件的容器(它有時(shí)顯示不同類型的邊界)之外,F(xiàn)rame 窗口小部件幾乎不作什么。這樣,就可以很方便地在所希望的方向排列幾個(gè)框架,然后在每個(gè)框架中添加其它窗口小部件。按照調(diào)用框架(以及其它窗口小部件)的 .pack() 方法的順序來(lái)排列它們。因此,如果兩個(gè)窗口小部件都請(qǐng)求 side=TOP ,則滿足先進(jìn)入的請(qǐng)求。

tk_txt2html 還偶爾使用 .grid() 。grid 幾何圖形管理器用可視的坐標(biāo)線覆蓋父代窗口小部件。當(dāng)窗口小部件調(diào)用 .grid(row=3, column=4) 時(shí),它請(qǐng)求其父代將它放在第三行第四列上。通過(guò)查看父代的所有子代的請(qǐng)求來(lái)計(jì)算父代的總行數(shù)和總列數(shù)。

別忘了對(duì)自己的窗口小部件應(yīng)用幾何圖形管理器,以免在顯示屏幕上看不到它們時(shí)后悔莫及。


菜單

Tkinter 能輕易生成菜單。雖然我們?cè)谶@里使用十分簡(jiǎn)單的示例,但是如果愿意,還可以用不同的字體、圖形、復(fù)選框和各種別致的子代窗口小部件來(lái)填充菜單。在我們的示例中,tk_txt2html 的菜單全部用我們?cè)谏厦嫠姷男袆?chuàng)建。

menu_frame.tk_menuBar(file_menu(), action_menu(), help_menu())

這行本身可能有些神秘。大多數(shù)必須完成的工作位于名為 *_menu() 的函數(shù)中。讓我們看一下最簡(jiǎn)單的示例。
創(chuàng)建下拉菜單

def help_menu():
 help_btn = Tkinter.Menubutton(menu_frame, text='Help', underline=0)
 help_btn.pack(side=Tkinter.LEFT, padx="2m")
 help_btn.menu = Tkinter.Menu(help_btn)
 help_btn.menu.add_command(label="How To", underline=0, command=HowTo)
 help_btn.menu.add_command(label="About", underline=0, command=About)
 help_btn['menu'] = help_btn.menu
 return help_btn

下拉菜單是將 Menu 小窗口部件作為子代的 Menubutton 小窗口部件。 .pack() (或 .grid() 等)將 Menubutton 排列在適當(dāng)?shù)奈恢谩enu 小窗口部件用 .add_command() 方法添加項(xiàng)。(請(qǐng)注意上面為 Menubutton 的目錄所作的奇怪分配。不要問為什么,跟著我這樣做并在您自己的代碼中也這樣做即可。)


獲得用戶輸入

下面將看到的示例演示 Label 小窗口部件 widget 如何顯示輸入(有關(guān) Text 和 Message 小窗口部件的某些示例的完整資源,請(qǐng)參閱 參考資料 )。字段輸入的基本小窗口部件是 Entry。它易于使用,但是如果以前曾使用過(guò) Python 的 raw_input() 或 curses 的 .getstr() ,您將發(fā)現(xiàn)技巧略有不同。TK 的 Entry 小窗口部件不返回可分配的值。相反,它獲取自變量來(lái)填充字段對(duì)象。例如,下面的函數(shù)允許用戶指定輸入文件。
接受用戶字段輸入

def GetSource():
 get_window = Tkinter.Toplevel(root)
 get_window.title('Source File?')
 Tkinter.Entry(get_window, width=30,
 textvariable=source).pack()
 Tkinter.Button(get_window, text="Change",
 command=lambda: update_specs()).pack()

這里有幾件事要注意。我們?yōu)檫@個(gè)輸入創(chuàng)建了一個(gè)新的 Toplevel 小窗口部件和對(duì)話框,并且通過(guò)創(chuàng)建一個(gè)帶有 textvariable 自變量的 Entry 小窗口部件指定了輸入字段。但是等一下,還有件事!

textvariable 自變量沒有指定簡(jiǎn)單的字符串變量。相反,它引用一個(gè) StringVar 對(duì)象。在我們的示例中,從 main() 調(diào)用的 init_vars() 函數(shù)包含三行。

source = Tkinter.StringVar()
source.set('txt2html.txt')

這創(chuàng)建了一個(gè)適用于用戶輸入的對(duì)象并為其分配了初始值。每次在與之相鏈接的 Entry 小窗口部件中進(jìn)行更改時(shí)都立即修改該對(duì)象。每次在 Entry 小窗口部件中擊鍵、而不是讀取終止時(shí),都進(jìn)行 raw_input() 樣式的更改。

要想獲得戶輸入的值,我們使用 StringVar 實(shí)例的 .get() 方法。例如:

source_string = source.get()

結(jié)束語(yǔ)

此處所略述的技巧以及我們?cè)谕暾膽?yīng)用程序源代碼中使用的技巧應(yīng)該足以使您開始進(jìn)行 Tkinter 編程了。略微實(shí)踐之后您就會(huì)發(fā)現(xiàn)它不難掌握。有一個(gè)好處是:可以通過(guò) Python 以外的很多語(yǔ)言訪問 TK 庫(kù),因此您使用 Python 的 Tkinter 模塊學(xué)到的大多數(shù)知識(shí)可以應(yīng)用到其它語(yǔ)言。

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

簡(jiǎn)單介紹利用TK在Python下進(jìn)行GUI編程的教程

簡(jiǎn)單介紹利用TK在Python下進(jìn)行GUI編程的教程:我想要向您介紹能想像到的開始 GUI 編程的最簡(jiǎn)單方法,就是使用 Scriptics 的 TK 和 Tkinter 封裝器。我們將與 developerWorks 中的 Python 中的 curses 編程 提到的 curses 庫(kù)進(jìn)行很多比較。除了 curses 實(shí)現(xiàn)文本控制臺(tái)而 TK 實(shí)現(xiàn) GUI
推薦度:
標(biāo)簽: 教程 程序 tk
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 国产黄色小视频在线观看 | 欧美人与禽x0x0牲伦交 | 日韩va亚洲va欧美va浪潮 | 欧美在线播放视频 | 欧美极品在线播放 | 一区二区三区中文字幕 | 亚洲国产综合久久精品 | 欧美亚洲免费 | 日韩午夜免费电影 | 国模吧双双大尺度炮交gogo | 国模冰冰双人炮gogo | 欧美一区二区三区免费高 | 一区二区视频 | 亚洲精品高清视频 | 美国美女一级毛片免费全 | 免费看真人a一级毛片 | 国产精品香蕉一区二区三区 | 91视频一区二区三区 | 中文字幕久久亚洲一区 | 黑人群性xxx| 欧美中文一区 | 中文国产成人精品久久久 | 在线看精品 | 欧美第一夜 | 久久久久无码国产精品一区 | 91精品欧美一区二区三区 | 在线免费观看国产视频 | 免费的一级毛片 | 国产精品成人一区二区 | 日韩欧美一区二区三区四区 | 亚洲乱码中文论理电影 | 91精品日本久久久久久牛牛 | 中文字幕日本一本二本三区 | 亚洲自拍偷拍区 | 在线免费观看国产 | 手机在线国产视频 | 国产成人久久精品二区三区牛 | 日韩第七页 | 国产精品一区二区午夜嘿嘿嘿小说 | 亚洲欧美日韩三级 | 欧美国产日韩一区二区三区 |