日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

python Tkinter的簡單入門教程

瀏覽:30日期:2022-06-22 17:07:15

我們將編寫一個英尺和米的轉(zhuǎn)換程序,通過這個程序,我們將會了解一個真正的實用程序該怎么設(shè)計和編寫,我們也將會了解到 Tk 程序內(nèi)部的基本樣子。不必完全掌握里面的所有知識,更多細節(jié)將會在之后的章節(jié)中講到。本節(jié)僅要求了解即可,使讀者明白如何設(shè)計和編寫一個 Tk GUI 程序。

設(shè)計

我們將要寫一個簡單的將英尺(feet)轉(zhuǎn)換為米(me­ters)的 GUI 工具,按照我們的經(jīng)驗,它應(yīng)該長成下面那個樣子:

python Tkinter的簡單入門教程

這個程序會有一個輸入框用來輸入英尺數(shù),還將會有一個顯示框用來顯示被轉(zhuǎn)換之后的數(shù)字,幾個用于顯示提示字符的文本區(qū)域,同樣重要的是,必須有一個轉(zhuǎn)換觸發(fā)按鈕。

不難發(fā)現(xiàn),這個程序大致被分為了三行三列,這很重要,關(guān)乎之后的 幾何管理(用于控制組件的大小和位置),我們將在之后章節(jié)中講到。

代碼

from tkinter import *from tkinter import ttkdef calculate(*args): try:value = float(feet.get())meters.set((0.3048 * value * 10000.0 + 0.5)/10000.0) except ValueError:passroot = Tk()root.title('Feet to Meters')mainframe = ttk.Frame(root, padding='3 3 15 15')mainframe.grid(column=0, row=0, sticky=(N, W, E, S))mainframe.columnconfigure(0, weight=1)mainframe.rowconfigure(0, weight=1)feet = StringVar()meters = StringVar()feet_entry = ttk.Entry(mainframe, width=7, textvariable=feet)feet_entry.grid(column=2, row=1, sticky=(W, E))ttk.Label(mainframe, textvariable=meters).grid(column=2, row=2, sticky=(W, E))ttk.Button(mainframe, text='轉(zhuǎn)換', command=calculate).grid(column=3, row=3, sticky=W)ttk.Label(mainframe, text='英尺').grid(column=3, row=1, sticky=W)ttk.Label(mainframe, text='等于').grid(column=1, row=2, sticky=E)ttk.Label(mainframe, text='米').grid(column=3, row=2, sticky=W)for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5)feet_entry.focus()root.bind(’<Return>’, calculate)root.mainloop()

最終會是這個樣子

python Tkinter的簡單入門教程

逐步解釋

我們要編寫 Tk 程序,首先要引入 Tk­in­ter 的模塊。

from tkinter import *from tkinter import ttk

這兩行告訴 Python 我們的程序需要這兩個模塊。首先,tkinter 是 Tk 的標準包,當它加載的時候,也會導(dǎo)致 Tk 函數(shù)庫在你的系統(tǒng)中被加載。其次,ttk 是 在 Tk 8.5 中新添加的,提供對 Tk 8.5 中引入的 Tk 主題小部件集的訪問,其基本思想是將實現(xiàn)小部件行為的代碼與實現(xiàn)其外觀的代碼盡可能地分開,在這里我們不去深究。

值得注意的是,我們已經(jīng)從 tk­in­ter 模塊中導(dǎo)入了所有函數(shù),因此我們可以直接調(diào)用 tk­in­ter 的所有函數(shù)而不需要添加前綴。但是我們只導(dǎo)入了 ttk 模塊,所以在使用 ttk 模塊中的函數(shù)時應(yīng)該增加 ttk 前綴。

如果你要將舊代碼修改為新代碼,你會發(fā)現(xiàn) Tk­in­ter 的名字從大寫變成了小寫 tkinter,這個改變從 Python 3.0 開始。

root = Tk()root.title('Feet to Meters')mainframe = ttk.Frame(root, padding='3 3 15 15')mainframe.grid(column=0, row=0, sticky=(N, W, E, S))mainframe.columnconfigure(0, weight=1)mainframe.rowconfigure(0, weight=1)

cal­cu­late 函數(shù)將會在后面講解,之所以放到前面,是因為后面的許多語句需要調(diào)用它。

root = Tk() 語句構(gòu)建了一個 main 窗口,也被稱為 root 窗口。使用 root.title('title') 為窗口賦予一個名字。ttk.Frame(root, padding='3 3 15 15') 建立一個框架,這個框架分為三行三列,像素為 15。我們將這個框架放置到到 root 窗口中,不同的是,我們的所有組件都被放到了這個框架中而不是 root 窗口。

一般來說,我們可以將所有的組件(Wid­get)都放到 root 窗口中,但是主窗口的背景可能與我們添加的組件不匹配,這時候,我們添加一個中間框架(Frame),將組件放到這個中間框架上來保證內(nèi)容與背景的匹配。

columncoonfigure 和 rowconfigure 告訴 Tk, 當主窗口重新改變了大小,那么在這之上的 Frame 框架也應(yīng)該變化,以占用多余的空間。

feet = StringVar()meters = StringVar()feet_entry = ttk.Entry(mainframe, width=7, textvariable=feet)feet_entry.grid(column=2, row=1, sticky=(W, E))ttk.Label(mainframe, textvariable=meters).grid(column=2, row=2, sticky=(W, E))ttk.Button(mainframe, text='轉(zhuǎn)換', command=calculate).grid(column=3, row=3, sticky=W)

上面的幾條語句在框架上 (main­frame) 創(chuàng)建了三個組件,輸入框、輸出區(qū)域(La­bel,用于放置轉(zhuǎn)換的結(jié)果)、轉(zhuǎn)換按鈕。

對于每一個組件(Wid­get),我們需要做兩件事:

創(chuàng)建放置

他們都是 ttk 模塊中的類。創(chuàng)建時,我們指定傳入的參數(shù):放置的框架,大小,按鈕中的字符等。至于 textvariable 的意思,它指這個輸入框或者輸出框中的值所關(guān)聯(lián)的變量,而這個變量的類型是 StringVar 的對象。

我們使用 grid(網(wǎng)格) 進行幾何管理,意思就是這個組件將放在哪一個地方(哪一行,哪一列),sticky 指明組件在分配給它的網(wǎng)格單元(grid cell)中的排列(line up)方式,E、W、S、N 就是東西南北的意思,類似于文本編輯器中的 居中、靠左、靠右等。

ttk.Label(mainframe, text='英尺').grid(column=3, row=1, sticky=W)ttk.Label(mainframe, text='等于').grid(column=1, row=2, sticky=E)ttk.Label(mainframe, text='米').grid(column=3, row=2, sticky=W)

上述三行創(chuàng)建了三個指定內(nèi)容的 文本標簽(La­bel),并放到了指定的位置。

for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5)feet_entry.focus()root.bind(’<Return>’, calculate)

這四行代碼為我們的圖形化做了一個漂亮的收尾工作。

前兩行代碼遍歷所有的放置在 main­frame 中的組件,并在它們周圍增加了一些邊框,使它們不至于都擠在一起。當然也可以單獨遍歷這些組件,然后逐個進行設(shè)置,但這不是方便的做法。

第三行代碼告訴 Tk,在程序運行時,將光標聚焦在輸入框中,使用戶不必再點擊一下輸入框。

第四行代碼告訴 Tk,當用戶在按下 Return(Win­dows 中是 En­ter)時,調(diào)用 cal­cu­late 函數(shù)。這與按下按鈕調(diào)用 cal­cu­late 函數(shù)是一樣的。

def calculate(*args): try:value = float(feet.get())meters.set((0.3048 * value * 10000.0 + 0.5)/10000.0) except ValueError:pass

這里我們定義了一個 cal­cu­late 函數(shù)調(diào)用,當按下 Return、Enter(Win­dows),或者轉(zhuǎn)換按鈕時它將會被調(diào)用。它從輸入框中獲取用戶輸入的數(shù)值,然后將其轉(zhuǎn)換為單位為米的數(shù)值之后,將輸入框中的數(shù)值設(shè)置為正確的結(jié)果。

顯然看到,cal­cu­late 函數(shù)通過獲取 feet 和設(shè)置 meters 來改變在它們各自對應(yīng)的輸入框(Entry)和輸出框(Label)中的數(shù)值顯示。當用戶的輸入改變時,對應(yīng)的 feet 的值就會被修改為對應(yīng)的輸入值;當 meters 被被修改時,對應(yīng)的輸出框(La­bel)顯示的值也會改變。這就是在定義 feet_entry(輸入框)和 label(輸出框)時,還要指定 textvariable 的值的原因,而它的值應(yīng)該是一個 StringVar 的對象。如以下示例:

feet = StringVar()meters = StringVar()feet_entry = ttk.Entry(mainframe, width=7, textvariable=feet)ttk.Label(mainframe, textvariable=meters).grid(column=2, row=2, sticky=(W, E))

root.mainloop()

最后一句告訴 Tk 進入事件循環(huán)(event loop),這是使一些運行起來所必須的。

以上就是python Tkinter的簡單入門教程的詳細內(nèi)容,更多關(guān)于python Tkinter入門教程的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品久久久久久久免费观看| 91九色综合| 精品三区视频| 成人午夜网址| 久久av中文| 欧美交a欧美精品喷水| 欧美国产中文高清| 久久久久久久久成人| 精品视频一二| 欧美freesex黑人又粗又大| 久久久久久黄| 亚洲国产一区二区三区在线播放| 欧美日韩国产欧| 亚洲精品看片| 国产精品密蕾丝视频下载| 国产精品成人a在线观看| 精品三级久久| 亚洲精品电影| 亚洲精品黄色| 在线观看亚洲精品福利片| 天堂久久av| 国产精品va| 日韩久久视频| 国产精品美女久久久浪潮软件| 免费人成在线不卡| 国产欧美自拍| 日韩欧美少妇| 天堂av在线一区| 日韩国产欧美一区二区三区| 欧美激情福利| 亚洲综合在线电影| 美女国产一区| 国产乱码精品一区二区亚洲| 国产在视频一区二区三区吞精| 午夜影院一区| 国产一区91| 国产欧美日韩一级| 日韩欧美综合| 亚洲精品乱码久久久久久蜜桃麻豆 | 伊人成人网在线看| 日本一区福利在线| 精品三级久久久| 亚洲二区视频| 欧美亚洲一级| 欧美日韩一区二区综合| 一本综合精品| 国产成人精品免费视| 红桃视频亚洲| 国产精品日本一区二区三区在线 | 亚洲一区二区日韩| 国产精品久久久久久久久久齐齐| 亚洲四虎影院| 蜜桃久久久久久| 国内揄拍国内精品久久| 亚洲欧美日韩视频二区| 国产精品一国产精品| 久久五月天小说| 国产日产精品_国产精品毛片 | 欧美在线首页| 国精品一区二区三区| 日韩**一区毛片| yellow在线观看网址| 一区二区精品| 日韩啪啪电影网| 日韩国产在线一| 亚洲a在线视频| 欧美成a人片免费观看久久五月天| 影院欧美亚洲| 国产日韩电影| 欧美日韩一区二区三区四区在线观看 | 亚洲v天堂v手机在线| av资源中文在线天堂| 伊人久久婷婷| 国产一区二区三区四区| 伊人久久一区| 99久久亚洲精品| 欧美1区二区| 蜜桃视频第一区免费观看| 日韩一区二区三区免费| 国产乱人伦丫前精品视频| 麻豆亚洲精品| 日本美女一区| 国产精品网站在线看| 免费观看久久久4p| 久久精品国产大片免费观看| 国产精品大片免费观看| 中文亚洲免费| 亚洲欧洲美洲av| 国产精品免费99久久久| 亚洲欧洲国产精品一区| 欧美日韩国产传媒| 免费一级欧美在线观看视频| 亚欧成人精品| 黄色欧美日韩| 99视频精品全国免费| 国产一区二区三区免费在线| 国产乱码精品一区二区三区四区| 亚洲精品三级| 婷婷亚洲五月色综合| 91看片一区| 成人欧美一区二区三区的电影| 国产精品v日韩精品v欧美精品网站 | 久久成人av| 日韩av影院| 亚洲免费成人av在线| 国产农村妇女精品一区二区| 国产综合亚洲精品一区二| 久久久天天操| 日本国产精品| 欧美香蕉视频| 日韩一区二区在线免费| 国产伊人久久| 国产毛片一区二区三区| 人人精品久久| 日韩精品高清不卡| 日韩国产精品久久久| 日韩精品久久理论片| 亚洲精品系列| 日韩中文字幕一区二区高清99| 亚洲我射av| 中文字幕一区二区精品区| 首页国产欧美久久| 亚洲区欧美区| 亚州精品视频| 日韩高清不卡一区| 欧美一级二级三级视频| 青青草伊人久久| 国产调教精品| 国产九一精品| 老色鬼精品视频在线观看播放| 久久精品亚洲| 久久电影tv| 久久久精品日韩| 免费观看不卡av| 亚洲资源av| 三级久久三级久久久| 日本不卡的三区四区五区| 日本a级不卡| 国产精品s色| 国产专区精品| 久久人人97超碰国产公开结果| 亚洲天堂久久| 免费在线成人网| 亚洲精品在线a| 国产欧美日韩精品一区二区三区 | 四虎4545www国产精品 | 樱桃视频成人在线观看| 久久精品青草| 在线综合亚洲| 日韩亚洲精品在线观看| 国产精品115| 裤袜国产欧美精品一区| 久久伦理在线| 在线看片日韩| 国产精品videossex久久发布 | 国产96在线亚洲| 亚洲天堂久久| 亚洲资源网站| 久久av日韩| 91精品一区二区三区综合| 蜜臀精品久久久久久蜜臀| 国产精品一线| 99精品综合| 在线免费观看亚洲| 国产激情欧美| 在线中文字幕播放| 亚洲视频www| 日本午夜精品一区二区三区电影 | 欧美91在线|欧美| 久久国产亚洲精品| 亚洲精品中文字幕99999| 精品国产中文字幕第一页| 九一成人免费视频| 日本不卡一二三区黄网| 欧美国产一级| 男人的天堂亚洲一区| 国产精品成人一区二区网站软件| 亚洲天堂免费电影| 欧美精品中文| 日韩精品一级中文字幕精品视频免费观看 | 少妇精品久久久一区二区三区| 精品资源在线| 亚洲免费中文| 美女在线视频一区| 视频一区中文| 国产精品黄色片| 亚洲一区二区免费看| 精品少妇一区| 亚洲另类av| 日韩国产网站| 国产一区 二区| 91精品二区| 久久中文字幕一区二区三区| 久久高清国产| 福利一区在线| 日本亚州欧洲精品不卡| 久久久久中文| 国产日韩欧美高清免费| 亚洲性视频h| 欧美精品二区|