1. 程式人生 > 其它 >tkinter為窗體設定屬性值及獲取屬性值

tkinter為窗體設定屬性值及獲取屬性值

  這篇文章,我來講講在tkinter程式設計中,如何為窗體的屬性賦值,以及獲取窗體屬性值的方法。

瞭解窗體有什麼屬性

  窗體有屬性可以設定,我們可以用 keys() 方法來檢視一下。

  以下程式碼中 print(root.keys()) 功能就是在終端輸出窗體root可以設定的屬性。完整程式碼如下:

1 from tkinter import *
2 root=Tk()
3 print(root.keys())   # 輸出窗體的屬性
4 root.mainloop()

  在我的電腦裡(windows 10 系統)輸出結果如下:

['bd', 'borderwidth', 'class', 'menu', 'relief', 'screen', 'use', 'background', 'bg', 'colormap', 'container', 'cursor', 'height', 'highlightbackground', 'highlightcolor', 'highlightthickness', 'padx', 'pady', 'takefocus', 'visual', 'width']

  看上去窗體有很多屬性,但是,我們平時常用的屬性值就那麼幾個,其它不太常用的屬性設定,我們可以暫時不用管它們。

用config()方法設定窗體屬性

  為窗體屬性以及元件(控制元件)屬性設定的方法有2種。第1種方法是用config() 或 configure()

1 root.config(bg='yellow',cursor='hand2',width=200,height=100) 
2 root.configure(bg='yellow',cursor='hand2',width=200,height=100)
  以上兩句程式碼,作用是一樣的,(以後就我就採用config()方法)上面程式碼作用就是讓視窗背景設定為黃色,視窗範圍內的滑鼠形態變成手形,寬度為200,高度為100。

全部程式碼,如下:

1 from tkinter import *
2 root=Tk()
3 root.config(bg='yellow',cursor='hand2',width=200,height=100) 
4 root.mainloop()
我們來執行一下看看結果:

用config()方法,可以一次為1個或多個屬性進行設定。

通過字典鍵設定窗體屬性

  這種方法只可為一個屬性單獨設定。如:

1 root['bg']='yellow'
2 root['cursor']='hand2'
3 root['width']=200
4 root['height']=100

這種方法,如果為一個不存在的屬性設定,就會被 系統報TclError 錯誤。

獲取窗體屬性之方法1

  將上面講解的用字典鍵來設定窗體方法改一下,去=號,不賦值,就可以得到屬性值。如:

root['height']    # 獲取窗體高度
root['bg']      # 獲取窗體背景顏色
root['cursor']   # 獲取窗體的滑鼠樣式

  我們可以把獲取的屬性性賦值給別的變數,或者直接打印出來。

1 from tkinter import *
2 root=Tk()
3 root['height']=300
4 root['bg']='red'
5 root['cursor']='hand2'
6 print(root['height'])
7 print(root['bg'])
8 print(root['cursor'])
9 root.mainloop()

  上面程式碼中,我們可以用print把窗體的屬性值打印出來。

注意,如果窗體沒有設定屬性值,用這種方法,無法得到正確的值。我們把3,4,5句程式碼去除,再執行一下,就會發現輸出結果提示錯誤。

獲取窗體屬性值之方法2

  第2種方法,是用cget() 方法來獲取窗體屬性值 。如:

root.cget('height')
root.cget('bg')
root.cget('cursor')

  同樣,我們也可以把獲取的屬性性賦值給別的變數,或者直接打印出來。

1 from tkinter import *
2 root=Tk()
3 root.config(height=100,bg='red',cursor='hand2')
4 print(root.cget('height'))
5 print(root.cget('bg'))
6 print(root.cget('cursor'))
7 root.mainloop()

  上面程式碼中,我們可以用print把窗體的屬性值打印出來。

  注意,這種方法跟第1種方法一樣,如果窗體沒有設定屬性值,就無法得到正確的屬性值。我們把第3句程式碼去除,再執行一下,就會發現,輸出結果提示錯誤。

  總結:上述的2種設定屬性方法和2種設定屬性方法對於後面要講解的元件(在其它的程式語言裡,元件也叫控制元件),也一樣管用。

其它方法獲取窗體的寬和高

root.winfo_width() #獲取窗體的寬

root.winfo_height() # 獲取窗體的高

我們用下面的程式碼輸出窗體寬和高

1 from tkinter import *
2 root=Tk()
3 root.geometry('300x150+888+444') # 設定窗體大小和位置
4 root.update()  # 重新整理窗體
5 print(root.winfo_width())  # 輸出窗體寬
6 print(root.winfo_height()) # 輸出窗體高
7 root.mainloop()

  注意第4行程式碼,這是重新整理窗體語句,缺少這句,輸出的結果不正確,一定要加上這行程式碼才行。

  去除第3行設定窗體大小的程式碼,一樣可以得到窗體的寬和高。圐丿丌

其它方法獲取窗體的位置

root.winfo_x() # 獲取窗體左邊距

root.winfo_y() # 獲取窗體上邊距

用下面的程式碼輸出窗體的位置:

1 from tkinter import *
2 root=Tk()
3 root.geometry('300x150+888+444') # 設定窗體大小和位置
4 root.update()  # 重新整理窗體
5 print(root.winfo_x())  # 輸出窗體左邊距
6 print(root.winfo_y()) # 輸出窗體上邊距
7 root.mainloop()

tkinter窗體居中顯示的程式碼

  上一篇文章,簡單講解了窗體的在螢幕位置的設定,這裡,稍詳細一下。設定窗體位置的程式碼如:

root.geometry('±100±200')

第1個引數為:+數值,表示視窗左邊離螢幕左邊的距離

    -數值,表示視窗右邊離螢幕右邊的距離

第2個引數為:+數值,表示視窗上邊離螢幕上邊的距離

    -數值,表示視窗下邊離螢幕下邊的距離

大家自行把上面程式碼的第三行程式碼改成下面的其中一條程式碼,檢視窗體在螢幕的不同位置。

root.geometry('+100+200')#窗體在螢幕左上角
root.geometry('-100-200')#窗體在螢幕右下角
root.geometry('+100-200')#窗體在螢幕左下角
root.geometry('-100+200')#窗體在螢幕右上角

  但在實際的程式編寫中,讓窗體居中顯示可能更有實用性。程式碼如下:

1 a,b=300,150       # a為窗體寬度,b為窗體的高度
2 c=(root.winfo_screenwidth()-a)/2    # (螢幕寬度-窗體寬度)/2
3 d=(root.winfo_screenheight()-b)/2   # (螢幕高度-窗體高度)/2
4 root.geometry('%dx%d+%d+%d' % (a,b,c,d)) # c為視窗左邊離螢幕左邊的距離,d為視窗上邊離螢幕上邊的距離

  以上tkinter視窗居中顯示程式碼你可以收藏起來,使用時,只要改一下a,b的數值設定就可以行了。

解釋:

  root.geometry('%dx%d+%d+%d' % (a,b,c,d)) 這一程式碼需要你懂得python的字串格式化知識,這裡是使用%操作符來格式化字串。

  root.winfo_screenwidth() 為獲取螢幕的寬度,括號不能省

  root.winfo_screenheight() 為獲取螢幕的高度,括號不能省。

  此文章來自:濟亨網,網址:www.wb98.com 網站還有相關的系列課程文章,感興趣的的可以前往。

  下一篇文章,講解tkinter的元件(元件英文為: widget),先講“標籤”元件。