圖形界面設計——猜數字遊戲

開發工具:Visual Studio Codepython

1.遊戲介紹canvas

在遊戲中,程序隨機生成1024之內的數字,再讓玩家去猜,若是猜的數字過大太小都會進行提示,程序還會統計玩家猜的次數。使用Tkinter開發猜數字遊戲小程序

2.python圖形界面設計框架

Python提供了多個圖形開發界面的庫,幾個經常使用Python GUI庫以下。dom

Tkinter: Tkinter模塊(TK接口)是Python的標準Tk GUI工具包的接口。Tkinter能夠在大多數的UNIX平臺下使用,一樣能夠應用在Windows和Macintosh系統裏。Tk 8.0的後續版本能夠實現本地窗口風格,並良好地運行在絕大多數平臺中。函數

vxPython: wxPython是一款開源軟件,是Python語言的一套優秀的GUI圖形庫,容許用戶方便地建立完整的、功能健全的GUI用戶界面。工具

Jython: Jython程序能夠與Java無縫集成。除了一些標準模塊外,Jython使用Java的模塊,Jython幾乎擁有標準的Python中不依賴於C語言的所有模塊。好比,Jython的用戶界面使用Swing、AWT或者SWT呈現。Jython能夠被動態或靜態地編譯成Java字節碼。oop

Tkinter是Python的標準GUI庫。因爲Tkinter內置在Python的安裝包中,所以,只要安裝好Python就能導入Tkinter庫,並且IDLE也是用Tkinter編寫而成。對於簡單的圖形界面Tkinter能應付自如,使用Tkinter能夠快速地建立GUI應用程序。佈局

建立Windows窗口開發工具

幾何佈局管理器

Tkinter幾何佈局管理器(Geometry Manager)用於組織和管理父組件(每每是窗口)釦子組件的佈局方式。Tkinter提供了三種風格的幾何佈局管理類:pack、grid和place。

pack幾何佈局管理器

pack幾何佈局管理器採用塊的方式組織組件。pack佈局可根據子組件建立生成的順序,將其放在快速生成界面的設計中,所以被普遍採用。調用子組件的方法pack(),則該子組件在其父組件中採用pack佈局:

pack(  option  = value,…  )

grid幾何佈局管理器

grid幾何佈局管理器採用表格結構組織組件。子組件的位置由行/列肯定的單元格決定,子組件能夠跨越多行/列。在每一列中,列寬由這一列中最寬的單元格肯定。採用grid佈局,適合於表格形式的佈局,能夠實現複雜的界面,於是被普遍採用。調用子組件的grid()方法,則該子組件在其父組件中採用grid佈局:

grid  (  option  =  value,…  )

grid()方法中兩個最爲重要的參數,一個是row,另外一個是column。它們可用來指定將子組件放置到什麼位置,若是不指定row,則會將子組件放置到第一個可用的行上;若是不指定column,則使用第0列(首列)。

place幾何佈局管理器

place幾何佈局管理器容許開發者指定組件的大小與位置。place的優勢是能夠精確控制組件的位置;缺點是改變窗口大小時,子組件不能隨之靈活改變大小。

調用子組件的方法place(),則該子組件在其父組件中採用place佈局:

place  (   option  =  value,…  )

Tkinter組件

Tkinter提供各類組件(控件),如按鈕、標籤和文本框,可在一個GUI應用程序中使,。這些組件一般被稱爲控件或者部件。

標籤( Label)組件

L曲el組件用於在窗口中顯示文本或位圖。Anchor屬性指定文本(text)或圖像( bitmap/image)在Label中的顯示位置

按鈕( Button)組件

Button組件(控件)是一個標準的Tkinter部件,用於實現各類按鈕功能。按鈕能夠包含文本或圖像,能夠經過command屬性將調用Python函數或方法關聯到按鈕上。當這些按鈕被按下時,就會自動調用該函數或方法。

單行文本框( Entry)組件和多行文本框(Text)組件

單行文本框組件主要用於輸入單行內容和顯示文本,能夠方便地向程序傳遞用戶參數。這裏經過一個轉換攝氏度和華氏度的小程序來演示該組件的使用方法。

建立和顯示Entry對象

建立Entry對象的基本方法以下:

Entry對象=Entry  (Windows窗口對象)

顯示Entry對象的方法以下:

Entry對象.pack()

獲取Entry組件的內容

其中,get()方法用於獲取單行文本框內輸入的內容。

設置或者獲取單行文本框組件的內容也可使用StringVar()對象來完成,把單行文本框組件的textvariable屬性設置爲StringVar()變量,再經過StringVar()變量的get()和set()函數能夠讀取和輸出相應文本內容。

單行文本框組件的經常使用屬性

show:若是設置爲字符*,則輸入文本框內顯示爲*,用於密碼輸入。

insertbackground:插入光標的顏色,默認爲黑色'black,。

selectbackground和selectforeground:選中文本的背景色與前景色。

width:組件的寬度(所佔字符個數)。

fg:字體前景顏色。

bg:背景顏色。

state:設置組件狀態,默認爲normal,可設置爲 disabled禁用組件,readonly只讀。

一樣地,Python提供輸入多行文本框組件,用於輸入多行內容和顯示文本。使用方法相似於單行文本框組件,

**列表框( Listbox)組件 **

列表框( Listbox)組件可用於顯示多個項目,而且容許用戶選擇一個或多個項目。

(1)建立和顯示Listbox對象

Listbox對象=  Listbox  (Tkinter Windows窗口對象)

顯示Listbox對象的方法以下:

Listbox對象.pack()

(2)插入文本項

可使用insert()方法向列表框組件中插入文本項,方法以下:

Listbox對象.insert (index,item)

其中: index是插入文本項的位置,若是在尾部插入文本項,則可使用END;若是在當前選中處插入文本項,則可使用ACTIVE。Item是要插入的文本項。

(3)返回選中項索引

Listbox對象.curselection()

返回當前選中項目的索引,結果爲元組。

注意:索引號從0開始,0表示第一項。

(4)刪除文本項

Listbox對象.delete( first,last)

刪除指定範圍(first,last)的項目,不指定last時,刪除一個項目。

(5)獲取項目內容

Listbox對象.get( first, last)

返回指定範圍(first,last)的項目,不指定last時,僅返回一個項目。

(6)獲取項目個數

Listbox對象.size()

(7)獲取Listbox內容

須要使用listvariable屬性爲Listbox對象指定一個對應的變量,

單選按鈕( Radiobutton)組件和複選框(Checkbutton)組件

單選按鈕和複選框分別用於實現選項的單選和複選功能。Radiobutton組件用於在同一組單選按鈕中選擇一個單選按鈕(不能同時選定多個)。Checkbutton組件用於選擇一項或多項。

(1)建立和顯示Radiobutton對象

建立Radiobutton對象的基本方法以下:

Radiobutton對象  =  Radiobutton(Windows窗口對象,text  =  Radiobutton組件顯示的文本)

顯示Radiobutton對象的方法以下:

Radiobutton對象.pack()

可使用variable屬性爲Radiobutton組件指定一個對應的變量。若是將多個Radiobutton組件綁定到同一個變量,則這些Radiobutton組件屬於同一個分組。分組後須要使用value設置每一個Radiobutton組件的值,以標識該項目是否被選中。

(2) Radiobutton組件經常使用屬性

variable:單選按鈕索引變量,經過變量的值肯定哪一個單選按鈕被選中。一組單選按鈕使用同一個索引變量。

value:單選按鈕選中時變量的值。

command:單選按鈕選中時執行的命令(函數)。

(3) Radiobutton組件的方法

deselect():取消選擇。

select():選擇。

invoke():調用單選按鈕command指定的回調函數。

(4)建立和顯示Checkbutton對象

建立Checkbutton對象的基本方法以下:

Checkbutton對象=Checkbutton(Tkinter Windows窗口對象,text= Checkbutton組件顯示的文本,command=單擊Checkbutton按鈕所調用的回調函數)

顯示Checkbutton對象的方法以下:

Checkbutton對象.pack()

(5)Checkbutton組件經常使用屬性

variable:複選框索引變量,經過變量的值肯定哪些複選框被選中。每一個複選框使用不一樣的變量,複選框之間相互獨立。

onvalue:複選框選中(有效)時變量的值。

offvalue:複選框未選中(無效)時變量的值。

command:複選框選中時執行的命令(函數)。

(6)獲取Checkbutton狀態

爲了弄清楚Checkbutton組件是否被選中,須要使用variable屬性爲Checkbutton組件指定一個對應變量,

6.菜單(Menu)組件

圖形用戶界面應用程序一般提供菜單,菜單包含各類按照主題分組的基本命令。圖形用戶界面應用程序包括以下兩種類型的菜單。

主菜單:提供窗體的菜單系統。經過單擊可顯示下拉子菜單,選擇其中的命令可執行相關的操做,經常使用的主菜單一般包括:文件、編輯、視圖、幫助等。

上下文菜單(也稱爲快捷菜單):經過右擊某對象而彈出的菜單,通常爲與該對象相關的經常使用菜單命令,例如,剪切、複製、粘貼等。

建立Menu對象的基本方法以下:

Menu對象- Menu(Windows窗口對象)

將Menu對象顯示在窗口中的方法以下:

Windows窗口對象[,menu’)  =Menu對象

Windows窗口對象.mainloop()

消息窗口( Messagebox)組件

消息窗口( Messagebox)用於彈出提示框向用戶進行告警,或讓用戶選擇下一步的做。消息框包括不少類型,經常使用的有info、warning、error、yesno、okcancel等,包含不一樣的圖標、按鈕以及彈出提示音。

框架( Frame)組件

Frame組件是框架組件,在進行分組組織其餘組件的過程當中很是重要,負責安排Frame組件是框架組件,在進行分組組織其餘組件的也程個很是亙妥,負貢安排容器。

(1)建立和顯示Frame對象

建立Frame對象的基本方法以下:

Frame對象- Frame  (窗口對象,  height=高度,width拿寬度,bg=背景色,  …)

例如,建立一個Frame對象,設置其高爲100、寬爲400,背景色爲綠色。方法以下:

 f1= Frame ( root,   height=  100,width=400,bg='green')

顯示frame對象的方法以下

Frame對象.pack()

(2)向Frame組件中添加組件

在建立組件時能夠指定其容器爲Frame組件便可  倆呦i

Label(Frame對象+text  =   'Hello,).pack()    靜向Frame組件添加一個Label組件

(3) LabelFrame組件

LabelFrame組件是有標題的Frame組件,可使用text屬性設置LabelFrame組件的標題,方法以下:

Labelframe(窗口對象,  height=高度,width=寬度,text=標題).pack()

(4)刷新Frame

用Py也on製做GUI圖形界面,可使用after()方法每隔幾秒刷新GUI圖形界面。

Tkinter字體

經過組件的font屬性,能夠設置其顯示文本的字體。設置組件字體前首先要能表示一個字體

經過元組表示字體

經過三個元素的元組,能夠表示字體:

(font  family, size,modifiers)

元素font family是字體名;size爲字體大小,單位爲point; modifiers爲包含粗體、斜體、下畫線的樣式修飾符。

經過Font對象表示字體

可使用tkFont.Font來建立字體。格式以下:

ft  =  tkFont.Font (family  = '字體名',size,weight  , slant,underline,overstrike)

其中:  size爲字體大小;weight='bold'或'normal','bold'爲粗體; slant='italic'或'normal’,italic爲斜體;underline=1或0,1爲下畫線;overstrike=1或0,1爲刪除線。

Python事件處理

事件( Event)就是程序中發生的事,例如,用戶敲擊鍵盤上的某一個鍵或單擊、移動鼠標。對於這些事件,程序須要作出反應。Tkinter提供的組件一般都有本身能夠識別的事件,例如,當按鈕被單擊時執行特定的操做或當一個輸入欄成爲焦點,而用戶又敲擊了鍵盤上的某些按鍵,用戶所輸入的內容就會顯示在輸入欄內。

程序可使用事件處理函數來指定當觸發某個事件時所作的反應(操做)。

1.事件類型

事件類型的通用格式:

< [modifier- ] ...type [ -detail] >

事件類型必須放置於尖括號◇內。type描述了類型,例如,鍵盤按鍵、鼠標單擊。

modifier用於組合鍵定義,如Control、Alt。detail用於明肯定義是哪個鍵或按鈕modifier用於組合鍵定義,如Control、Alt。detail用於明肯定義是哪個鍵或按鈕的事件,例如,1表示鼠標左鍵,2表示鼠標中鍵,3表示鼠標右鍵。

Python中事件主要有:鍵盤事件、鼠標事件、窗體事件

事件綁定

程序創建一個處理某一事件的事件處理函數,稱之爲綁定。

(1)建立組件對象時綁定

建立組件對象實例時,可經過其命名參數command綁定事件處理函數。例如:

(2)實例綁定

調用組件對象實例方法bind()可爲指定組件實例綁定事件,這是最經常使用的事件綁定方式。

組件對象實例名.bind,」<事件類型>」,事件處理函數)

假設聲明瞭一個名爲canvas的Canvas組件對象,若要在canvas上按下鼠標左鍵時繪製一條線,能夠這樣實現:

canvas.bind( "<Button-l>",drawline)

其中,bind()函數的第一個參數是事件描述符,指定不管何時在canvas上,當具甲,bind()函數的第一個參數是事件描述符,指定不管什麼時快隹canvas上,當按下鼠標左鍵時就調用事件處理函數drawline進行繪製線條的任務。特別須要注意的是: drawline後面的圓括號是省略的,Tkinter會將此函數填入相關參數後調用運行,在這裏只是聲明而已。

標識綁定

在Canvas畫布中繪製各類圖形,將圖形與事件綁定可使用標識綁定tag_bind()函數。預先爲圖形定義標識tag後,再經過標識tag來綁定事件。

事件處理函數

(1)定義事件處理函數

事件處理函數每每帶有一個event參數。觸發事件調用事件處理函數時,將傳遞Event對象實例。

(2) Event事件處理參數屬性

能夠獲取Event對象實例的各類相關參數,Event事件對象的主要參數屬性如表

3.程序設計步驟

在猜數字遊戲程序中導入相關模塊:

random.randint(0,1024)隨機產生玩家要猜的數字。

猜按鈕事件函數從單行文本框entry_a獲取猜的數字並轉換成數字val a,而後判斷是否正確,並根據要猜的數字number判斷數字是過大仍是太小。

HumGuess()函數修改提示標籤文字來顯示猜的次數。

關閉按鈕事件函數實現窗體關閉。

如下主程序實現遊戲的窗體界面。

4.參考代碼

5.運行結果

相關文章
相關標籤/搜索