一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語(yǔ)言編程技術(shù)及教程分享平臺(tái)!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Python - 為Python程序添加圖形化界面的教程

為Python程序添加圖形化界面的教程

2020-06-17 10:20廖雪峰 Python

這篇文章主要介紹了為Python程序添加圖形化界面的教程,圖形化界面編程是開(kāi)發(fā)Python本地應(yīng)用的必備,需要的朋友可以參考下

Python支持多種圖形界面的第三方庫(kù),包括:

  •     Tk
  •     wxWidgets
  •     Qt
  •     GTK

等等。

但是Python自帶的庫(kù)是支持Tk的Tkinter,使用Tkinter,無(wú)需安裝任何包,就可以直接使用。本章簡(jiǎn)單介紹如何使用Tkinter進(jìn)行GUI編程。
Tkinter

我們來(lái)梳理一下概念:

  • 我們編寫(xiě)的Python代碼會(huì)調(diào)用內(nèi)置的Tkinter,Tkinter封裝了訪問(wèn)Tk的接口;
  • Tk是一個(gè)圖形庫(kù),支持多個(gè)操作系統(tǒng),使用Tcl語(yǔ)言開(kāi)發(fā);
  • Tk會(huì)調(diào)用操作系統(tǒng)提供的本地GUI接口,完成最終的GUI。

所以,我們的代碼只需要調(diào)用Tkinter提供的接口就可以了。
第一個(gè)GUI程序

使用Tkinter十分簡(jiǎn)單,我們來(lái)編寫(xiě)一個(gè)GUI版本的“Hello, world!”。

第一步是導(dǎo)入Tkinter包的所有內(nèi)容:

?
1
from Tkinter import *

第二步是從Frame派生一個(gè)Application類,這是所有Widget的父容器:

?
1
2
3
4
5
6
7
8
9
10
11
class Application(Frame):
  def __init__(self, master=None):
    Frame.__init__(self, master)
    self.pack()
    self.createWidgets()
 
  def createWidgets(self):
    self.helloLabel = Label(self, text='Hello, world!')
    self.helloLabel.pack()
    self.quitButton = Button(self, text='Quit', command=self.quit)
    self.quitButton.pack()

在GUI中,每個(gè)Button、Label、輸入框等,都是一個(gè)Widget。Frame則是可以容納其他Widget的Widget,所有的Widget組合起來(lái)就是一棵樹(shù)。

pack()方法把Widget加入到父容器中,并實(shí)現(xiàn)布局。pack()是最簡(jiǎn)單的布局,grid()可以實(shí)現(xiàn)更復(fù)雜的布局。

在createWidgets()方法中,我們創(chuàng)建一個(gè)Label和一個(gè)Button,當(dāng)Button被點(diǎn)擊時(shí),觸發(fā)self.quit()使程序退出。

第三步,實(shí)例化Application,并啟動(dòng)消息循環(huán):

?
1
2
3
4
5
app = Application()
# 設(shè)置窗口標(biāo)題:
app.master.title('Hello World')
# 主消息循環(huán):
app.mainloop()

GUI程序的主線程負(fù)責(zé)監(jiān)聽(tīng)來(lái)自操作系統(tǒng)的消息,并依次處理每一條消息。因此,如果消息處理非常耗時(shí),就需要在新線程中處理。

運(yùn)行這個(gè)GUI程序,可以看到下面的窗口:

為Python程序添加圖形化界面的教程

點(diǎn)擊“Quit”按鈕或者窗口的“x”結(jié)束程序。
輸入文本

我們?cè)賹?duì)這個(gè)GUI程序改進(jìn)一下,加入一個(gè)文本框,讓用戶可以輸入文本,然后點(diǎn)按鈕后,彈出消息對(duì)話框。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from Tkinter import *
import tkMessageBox
 
class Application(Frame):
  def __init__(self, master=None):
    Frame.__init__(self, master)
    self.pack()
    self.createWidgets()
 
  def createWidgets(self):
    self.nameInput = Entry(self)
    self.nameInput.pack()
    self.alertButton = Button(self, text='Hello', command=self.hello)
    self.alertButton.pack()
 
  def hello(self):
    name = self.nameInput.get() or 'world'
    tkMessageBox.showinfo('Message', 'Hello, %s' % name)

當(dāng)用戶點(diǎn)擊按鈕時(shí),觸發(fā)hello(),通過(guò)self.nameInput.get()獲得用戶輸入的文本后,使用tkMessageBox.showinfo()可以彈出消息對(duì)話框。

程序運(yùn)行結(jié)果如下:

為Python程序添加圖形化界面的教程

小結(jié)

Python內(nèi)置的Tkinter可以滿足基本的GUI程序的要求,如果是非常復(fù)雜的GUI程序,建議用操作系統(tǒng)原生支持的語(yǔ)言和庫(kù)來(lái)編寫(xiě)。

源碼參考:https://github.com/michaelliao/learn-python/tree/master/gui

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 九九免费高清在线观看视频 | 欧美一级在线视频 | sao虎在线精品永久 s0e一923春菜花在线播放 | 国产精品欧美亚洲韩国日本 | 亚洲福利精品电影在线观看 | 日本加勒比在线精品视频 | 我将她侵犯1~6樱花动漫在线看 | 91中文字幕yellow字幕网 | 日韩国产欧美一区二区三区 | 成人福利免费在线观看 | 成人精品视频一区二区在线 | 国产香蕉一区二区精品视频 | 摸逼网| 日产免费自线一二区 | 女人肮脏的交易中文字幕未删减版 | bbbbbbaaaaaa毛片| 国产欧美另类久久精品91 | 性绞姿始动作动态图 | 婷婷精品 | 无套内谢大学生A片 | 男人晚上适合偷偷看的污污 | 九九精品99久久久香蕉 | 羞羞漫画免费漫画页面在线看漫画秋蝉 | 日日操天天射 | 羞羞视频麻豆 | 国产高清在线视频一区二区三区 | 91精品综合国产在线观看 | 日韩一区二区三区精品 | 女人和拘做受全过程免费 | 欧美18一19性高清hd4k | 91久久夜色精品国产九色 | 亚洲免费视频一区二区三区 | 成年人免费观看视频网站 | 日剧整部剧护妻狂魔免费观看全集 | 精品国产品香蕉在线观看 | 婷婷在线综合 | 香蕉eeww99国产精选播放 | 美女被吸乳老师羞羞漫画 | babes性欧美30| 四虎成人影院 | 国产精品午夜国产小视频 |