最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python GUI實(shí)例學(xué)習(xí)

 更新時(shí)間:2017年11月21日 10:55:10   投稿:laozhang  
給大家介紹一下python GUI實(shí)例學(xué)習(xí)的心得以及實(shí)現(xiàn)的方式,希望能幫助到你。

在學(xué)習(xí)本篇之前,如果你對(duì)Python下進(jìn)行GUI編程基礎(chǔ)內(nèi)容還有不明白,推薦一篇相關(guān)文章:簡(jiǎn)單介紹利用TK在Python下進(jìn)行GUI編程的教程

寫(xiě)一個(gè)簡(jiǎn)單的界面很容易,即使是什么都不了解的情況下,這個(gè)文本轉(zhuǎn)載了最簡(jiǎn)單的界面編寫(xiě),下個(gè)文本介紹了TK的簡(jiǎn)單但具體的應(yīng)用

在python中創(chuàng)建一個(gè)窗口,然后顯示出來(lái)。

from Tkinter import * 
root = Tk() 
root.mainloop() 

就3行就能夠把主窗口顯示出來(lái)了。root是一個(gè)變量名稱(chēng),其代表了這個(gè)主窗口。以后創(chuàng)建控件的時(shí)候指定控件創(chuàng)建在什么窗口之中,就要用這個(gè)root來(lái)表示了。而Tk()是一個(gè)Tkinter庫(kù)之中的函數(shù)(其實(shí)是類(lèi)的構(gòu)造函數(shù),構(gòu)造了一個(gè)對(duì)象)。而mainloop則是主窗口的成員函數(shù),也就是表示讓這個(gè)root工作起來(lái),開(kāi)始接收鼠標(biāo)的和鍵盤(pán)的操作。你現(xiàn)在就能夠通過(guò)鼠標(biāo)縮放以及關(guān)閉這個(gè)窗口了。注意到窗口的標(biāo)題是tk,我們可以進(jìn)行一些修改

root= Tk(className='bitunion') 

然后窗口的標(biāo)題就變成了bitunion了。下面要作的是把這個(gè)窗口的內(nèi)容填充一下,讓其有一些東西。先加入一個(gè)標(biāo)簽,所謂標(biāo)簽就是一行字。

from Tkinter import * 
root = Tk(className='bitunion') 
label = Label(root) 
label['text'] = 'be on your own' 
label.pack() 
root.mainloop() 

我們很驚訝的發(fā)現(xiàn)窗口變小了,但是其中多了一行字。變小了是因?yàn)榇翱谥幸呀?jīng)放了東西了,python的Tkinter非常智能,能夠根據(jù)內(nèi)容自動(dòng)縮放,而不用和傳統(tǒng)的windows程序一樣,手工的指定絕對(duì)坐標(biāo)了。對(duì)于label,它還是一個(gè)變量而已。不過(guò)這個(gè)變量代表了一個(gè)標(biāo)簽,也就是那一行字。而這個(gè)label的創(chuàng)建是用Label,而Label的參數(shù)是root表明了這個(gè)控件是root主窗口的成員控件,或者說(shuō)是子窗口。label['text']表示設(shè)置這個(gè)標(biāo)簽的text屬性為'be on your own',也就是文字內(nèi)容了。label.pack和root.mainloop一樣費(fèi)解,但是內(nèi)涵一樣深刻。你現(xiàn)在可以簡(jiǎn)單理解為把label顯示出來(lái)的功能,因?yàn)槟惆裵ack去掉,那你就看不到東西了。其實(shí)pack是和控件的布局排版有關(guān)西的。

再添加一個(gè)按鈕就能夠有更加豐富的內(nèi)容了,方法是很類(lèi)似的??粗桑?/p>

from Tkinter import * 
root = Tk(className='bitunion') 
label = Label(root) 
label['text'] = 'be on your own' 
label.pack() 
button = Button(root) 
button['text'] = 'change it' 
button.pack() 
root.mainloop() 

只不過(guò)把button替換了label而B(niǎo)utton替換了Label。注意一下Button和Label這些都是Tkinter這些庫(kù)提供的,而button和Button這樣大小寫(xiě)之間的差別僅僅是巧合,你能夠隨便的給變量取名字,但是Button和Label這些則是需要記住的東西,寫(xiě)代碼的時(shí)候要經(jīng)常用到的名字。但是點(diǎn)擊按鈕你會(huì)比較失望,因?yàn)椴](méi)有什么反應(yīng)。不過(guò)也是當(dāng)然的事情,你并沒(méi)有告訴計(jì)算機(jī)對(duì)于這樣一個(gè)按鈕的點(diǎn)擊操作需要作出一個(gè)什么樣的反應(yīng)來(lái)反饋給用戶(hù)。而這個(gè)指定作出什么反應(yīng)的工作只需要一個(gè)行,但是作出具體什么樣反應(yīng)的描述則需要新建一個(gè)函數(shù)來(lái)進(jìn)行處理。

from Tkinter import * 
def on_click(): 
  label['text'] = 'no way out' 
root = Tk(className='bitunion') 
label = Label(root) 
label['text'] = 'be on your own' 
label.pack() 
button = Button(root) 
button['text'] = 'change it' 
button['command'] = on_click 
button.pack() 
root.mainloop() 

button['command'] = on_click表示對(duì)于button(按鈕)的點(diǎn)擊屬性用on_click這個(gè)函數(shù)來(lái)處理。而on_click函數(shù)也很簡(jiǎn)潔,只是把label的文本重新設(shè)置一下。這個(gè)完成了一個(gè)事件消息的處理,如果用C來(lái)寫(xiě),需要比這個(gè)長(zhǎng)更加不好懂的寫(xiě)法。另外你是否會(huì)對(duì)on_click中出現(xiàn)label這個(gè)變量比較奇怪呢?明明在on_click前面沒(méi)有定義label這個(gè)變量啊。如果我在C中這么寫(xiě)程序,編譯器一定會(huì)告訴我出錯(cuò)的。而python是怎么知道label這個(gè)變量存在,然后沒(méi)有報(bào)錯(cuò)的呢?其實(shí)python在你寫(xiě)的時(shí)候根本就不用知道其是否存在,只是要在運(yùn)行的時(shí)候找得到label就可以了。而運(yùn)行的前后關(guān)系,是通過(guò)時(shí)間來(lái)關(guān)聯(lián)的而不是代碼上前后行的關(guān)系。這里由于label = Label(root)先于on_click執(zhí)行,所以當(dāng)on_click執(zhí)行的時(shí)候,label就是一個(gè)已經(jīng)定義的變量。如果沒(méi)有定義呢?那就報(bào)告出錯(cuò)嘍。

最后一個(gè)例子:

from Tkinter import * 
def on_click(): 
  label['text'] = text.get() 
 
root = Tk(className='bitunion') 
label = Label(root) 
label['text'] = 'be on your own' 
label.pack() 
text = StringVar() 
text.set('change to what?') 
entry = Entry(root) 
entry['textvariable'] = text 
entry.pack() 
button = Button(root) 
button['text'] = 'change it' 
button['command'] = on_click 
button.pack() 
root.mainloop() 

這個(gè)就比較復(fù)雜了。里面有一個(gè)StringVar。這個(gè)代表一個(gè)字符串,但是跟一般字符串不一樣。一般的這樣'dfsdf'的字符串是不可變的,你只能把變量指定為不同的字符串,但是字符串本身的內(nèi)容是不可改變的。而StringVar則是可變的字符串。所以了set和get來(lái)設(shè)置和取得其內(nèi)容。主要是entry(單行輸入框)要求一個(gè)這樣的屬性來(lái)設(shè)置和接收其輸入框的內(nèi)容。

用Tkinter實(shí)現(xiàn)一個(gè)簡(jiǎn)單的GUI程序,單擊click按鈕時(shí)會(huì)在終端打印出'hello world':

__author__ = 'fyby'  
from Tkinter import *   #引入Tkinter工具包 
def hello(): 
print('hello world!') 
win = Tk()  #定義一個(gè)窗體 
win.title('Hello World')    #定義窗體標(biāo)題 
win.geometry('400x200')     #定義窗體的大小,是400X200像素 
btn = Button(win, text='Click me', command=hello) 
#注意這個(gè)地方,不要寫(xiě)成hello(),如果是hello()的話, 
#會(huì)在mainloop中調(diào)用hello函數(shù), 
# 而不是單擊button按鈕時(shí)出發(fā)事件 
btn.pack(expand=YES, fill=BOTH) #將按鈕pack,充滿(mǎn)整個(gè)窗體(只有pack的組件實(shí)例才能顯示)   
mainloop() #進(jìn)入主循環(huán),程序運(yùn)行 

當(dāng)我們寫(xiě)一個(gè)較大的程序時(shí),最好將代碼分成一個(gè)或者是幾個(gè)類(lèi),再看一下Hello World例子

#-*- encoding=UTF-8 -*-
__author__ = 'fyby'
from Tkinter import *
class App:
def __init__(self, master): 
#構(gòu)造函數(shù)里傳入一個(gè)父組件(master),創(chuàng)建一個(gè)Frame組件并顯示 
frame = Frame(master)
frame.pack()
#創(chuàng)建兩個(gè)button,并作為frame的一部分
self.button = Button(frame, text="QUIT", fg="red", command=frame.quit) 
self.button.pack(side=LEFT) #此處side為L(zhǎng)EFT表示將其放置 到frame剩余空間的最左方
self.hi_there = Button(frame, text="Hello", command=self.say_hi)
self.hi_there.pack(side=LEFT)

def say_hi(self):
print "hi there, this is a class example!"

win = Tk()
app = App(win)
win.mainloop()

看完了上面兩個(gè)無(wú)聊的Hello World例子,再來(lái)看一個(gè)稍微Perfect點(diǎn)的東西吧。Menu組件,自己畫(huà)一個(gè)像樣點(diǎn)的程序外殼。

#-*-encoding=UTF-8-*-
__author__='fyby'
fromTkinterimport*
classApp:
def__init__(self,master):
#構(gòu)造函數(shù)里傳入一個(gè)父組件(master),創(chuàng)建一個(gè)Frame組件并顯示
frame=Frame(master)
frame.pack()
#創(chuàng)建兩個(gè)button,并作為frame的一部分
self.button=Button(frame,text="QUIT",fg="red",command=frame.quit)
self.button.pack(side=LEFT)#此處side為L(zhǎng)EFT表示將其放置到frame剩余空間的最左方
self.hi_there=Button(frame,text="Hello",command=self.say_hi)
self.hi_there.pack(side=LEFT)

defsay_hi(self):
print"hithere,thisisaclassexample!"

win=Tk()
app=App(win)
win.mainloop()

這個(gè)程序還是有點(diǎn)無(wú)趣,因?yàn)槲覀冎皇莿?chuàng)建了一個(gè)頂級(jí)的導(dǎo)航菜單,點(diǎn)擊后只是在終端中輸出hello而已,下面來(lái)創(chuàng)建一個(gè)下拉菜單,這樣才像一個(gè)正兒八經(jīng)的應(yīng)用大笑在下面的這個(gè)例子中,會(huì)創(chuàng)建三個(gè)頂級(jí)菜單,每個(gè)頂級(jí)菜單中都有下拉菜單(用add_command方法創(chuàng)建,最后用add_cascade方法加入到上級(jí)菜單中去),為每個(gè)下拉選項(xiàng)都綁定一個(gè)hello函數(shù),在終端中打印出hello.

root.quit是退出這個(gè)Tk的實(shí)例。

#-*- encoding=UTF-8 -*-
__author__ = 'fyby'
from Tkinter import *
root = Tk()
def hello():
print('hello')
def about():
print('我是開(kāi)發(fā)者')
menubar = Menu(root)
#創(chuàng)建下拉菜單File,然后將其加入到頂級(jí)的菜單欄中
filemenu = Menu(menubar,tearoff=0)
filemenu.add_command(label="Open", command=hello)
filemenu.add_command(label="Save", command=hello)
filemenu.add_separator()
filemenu.add_command(label="Exit", command=root.quit)
menubar.add_cascade(label="File", menu=filemenu)
#創(chuàng)建另一個(gè)下拉菜單Edit
editmenu = Menu(menubar, tearoff=0)
editmenu.add_command(label="Cut", command=hello)
editmenu.add_command(label="Copy", command=hello)
editmenu.add_command(label="Paste", command=hello)
menubar.add_cascade(label="Edit",menu=editmenu)
#創(chuàng)建下拉菜單Help
helpmenu = Menu(menubar, tearoff=0)
helpmenu.add_command(label="About", command=about)
menubar.add_cascade(label="Help", menu=helpmenu)
#顯示菜單
root.config(menu=menubar)
mainloop()

寫(xiě)了這一些,差不多對(duì)Tkinter有了一個(gè)大體的印象了。在Python中用Tkinter繪制GUI界面還是蠻簡(jiǎn)單的。再把上面的例子擴(kuò)展一下,和Label標(biāo)簽結(jié)合,當(dāng)單擊about的時(shí)候,在窗體上打印About的內(nèi)容,而不是在終端輸出。將about函數(shù)稍微修改一下。單擊about以后將會(huì)調(diào)用about函數(shù)渲染frame繪制一個(gè)標(biāo)簽并顯示其內(nèi)容。

def about():
w = Label(root,text="開(kāi)發(fā)者感謝名單\nfuyunbiyi\nfyby尚未出現(xiàn)的女朋友\nhttp://www.programup.com網(wǎng)站")
w.pack(side=TOP)

kinter的提供各種控件,如按鈕,標(biāo)簽和文本框,一個(gè)GUI應(yīng)用程序中使用。這些控件通常被稱(chēng)為控件或者部件。

目前有15種Tkinter的部件。我們提出這些部件以及一個(gè)簡(jiǎn)短的介紹,在下面的表:

標(biāo)準(zhǔn)屬性:

標(biāo)準(zhǔn)屬性也就是所有控件的共同屬性,如大小,字體和顏色等等。

幾何管理:

Tkinter控件有特定的幾何狀態(tài)管理方法,管理整個(gè)控件區(qū)域組織,一下是Tkinter公開(kāi)的幾何管理類(lèi):包、網(wǎng)格、位置

相關(guān)文章

  • Python 中的 typing 模塊常見(jiàn)用法

    Python 中的 typing 模塊常見(jiàn)用法

    Python的typing模塊提供類(lèi)型提示功能,增強(qiáng)代碼可讀性和類(lèi)型安全性,通過(guò)定義變量、參數(shù)、返回值的類(lèi)型,可以幫助IDE和靜態(tài)分析工具提高代碼質(zhì)量,支持List、Dict、Tuple等類(lèi)型定義,以及Optional、Union、Any等高級(jí)用法,還可以使用mypy等工具進(jìn)行類(lèi)型檢查
    2024-09-09
  • python迭代器模塊itertools常用的方法

    python迭代器模塊itertools常用的方法

    這篇文章主要介紹了python迭代器模塊itertools常用的方法,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • Python操作PDF實(shí)現(xiàn)制作數(shù)據(jù)報(bào)告

    Python操作PDF實(shí)現(xiàn)制作數(shù)據(jù)報(bào)告

    Python操作PDF的庫(kù)有很多,比如PyPDF2、pdfplumber、PyMuPDF等等。本文將利用FPDF模塊操作PDF實(shí)現(xiàn)制作數(shù)據(jù)報(bào)告,感興趣的小伙伴可以嘗試一下
    2022-12-12
  • Python下載手機(jī)小視頻的操作方法

    Python下載手機(jī)小視頻的操作方法

    這篇文章主要介紹了Python 下載手機(jī)小視頻,主要為大家介紹使用 mitmproxy 這個(gè)抓包工具如何監(jiān)控手機(jī)上網(wǎng),并且通過(guò)抓包,把我們想要的數(shù)據(jù)下載下來(lái),需要的朋友可以參考下
    2022-04-04
  • 利用PyInstaller將python程序.py轉(zhuǎn)為.exe的方法詳解

    利用PyInstaller將python程序.py轉(zhuǎn)為.exe的方法詳解

    這篇文章主要給大家介紹了利用PyInstaller將python程序.py轉(zhuǎn)為.exe的方法,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-05-05
  • 教你怎么用Python selenium操作瀏覽器對(duì)象的基礎(chǔ)API

    教你怎么用Python selenium操作瀏覽器對(duì)象的基礎(chǔ)API

    今天給大家?guī)?lái)的是關(guān)于Python的相關(guān)知識(shí),文章圍繞著怎么用Python selenium操作瀏覽器對(duì)象的基礎(chǔ)API展開(kāi),文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • 詳解python校驗(yàn)SQL腳本命名規(guī)則

    詳解python校驗(yàn)SQL腳本命名規(guī)則

    這篇文章主要介紹了python校驗(yàn)SQL腳本命名規(guī)則,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Python天氣預(yù)報(bào)采集器實(shí)現(xiàn)代碼(網(wǎng)頁(yè)爬蟲(chóng))

    Python天氣預(yù)報(bào)采集器實(shí)現(xiàn)代碼(網(wǎng)頁(yè)爬蟲(chóng))

    這個(gè)天氣預(yù)報(bào)采集是從中國(guó)天氣網(wǎng)提取廣東省內(nèi)主要城市的天氣并回顯。本來(lái)是打算采集騰訊天氣的,但是貌似它的數(shù)據(jù)是用js寫(xiě)上去還是什么的,得到的html文本中不包含數(shù)據(jù),所以就算了
    2012-10-10
  • python生成圓形圖片的方法

    python生成圓形圖片的方法

    這篇文章主要為大家詳細(xì)介紹了python生成圓形圖片的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Python數(shù)據(jù)處理pandas讀寫(xiě)操作IO工具CSV解析

    Python數(shù)據(jù)處理pandas讀寫(xiě)操作IO工具CSV解析

    這篇文章主要為大家介紹了Python?pandas數(shù)據(jù)讀寫(xiě)操作IO工具之CSV使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06

最新評(píng)論

丹江口市| 肃宁县| 台南县| 和龙市| 潞城市| 沙洋县| 隆德县| 湘阴县| 南川市| 溧阳市| 曲水县| 华安县| 富源县| 云浮市| 抚顺市| 华坪县| 胶南市| 阿拉善右旗| 新宁县| 嘉兴市| 延川县| 龙陵县| 南投市| 车险| 临沭县| 洪泽县| 田林县| 江山市| 和政县| 隆子县| 峡江县| 渭源县| 东海县| 瑞丽市| 鹤峰县| 桃园市| 元朗区| 武穴市| 分宜县| 高碑店市| 莒南县|