您好,登錄后才能下訂單哦!
本篇內容介紹了“Tkinter中怎么通過OptionDB控制控件屬性”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
我們基本上對Tkinter中的每一種基本控件都進行了簡單的說明。在這些的示例代碼中,用戶可以通過屬性控制每個控件的前景色,背景色,字體等各種屬性。這種方式的直觀易懂,但是存在幾個缺點:
即使希望同樣的設定,也需要每個控件單獨制定。
設定信息淹沒在代碼中,無論是增減還是調整屬性都需要修改代碼。麻煩不說還有可能破壞代碼的完整性。
這兩個問題都可以通過Tkinter提供的OptionDB解決。接下來我們以計算器小程序為例說明其用法。這個程序的初始狀態如下:
第一個問題,Tkinter提供了option_add方法用戶根據分類分類制定控件屬性的方式,例如對于表示計算結果和表達式的兩個標簽控件來講,可以使用下面的代碼指定它們的背景色:
root.option_add('*Label.background', "#a0ffa0")
代碼中‘*Label.background’的含義就是所有Label控件的背景色。
如果需要對每個控件進行單獨控制,首先要為控件指定名稱。下面的代碼通過name屬性分別為兩個標簽控件指定了各自的名稱。
# create a label to change state.
upper_display = Label(root,
name='upperDisplay',
foreground="#000000",
width=24, anchor=E)
upper_display.grid(row=1, column=0, columnspan=4, sticky=E + W)
# create a label to change state.
lower_display = Label(root,
name='lowerDisplay',
foreground="#000000",
width=12, anchor=E)
lower_display.grid(row=2, column=0, columnspan=4, sticky=E + W)
名稱指定完成之后就可以使用名稱為特定的控件指定屬性了。為了和分類指定想區別,控件的名稱必須小寫。
ftTimes1 = Font(family='Times', size=12, weight=BOLD)ftTimes2 = Font(family='Times', size=24, weight=BOLD)root.option_add('*upperDisplay.font', ftTimes1)root.option_add('*lowerDisplay.font', ftTimes2)root.option_add('*Button*font', ftTimes1)
除了兩個標簽之外,代碼還順便為所有的按鈕指定了字體,其結果如下:
通過上面的例子可以看到,通過使用OptionDB,只要使用很少的代碼,就可以實現同時為多個控件指定屬性的功能。除此之外,Tkinter還提供了通過配置文件修改控件屬性的功能。下面的代碼就是指定計算器中每個控件的字體和顏色的實例。
*Label.background:#a0ffa0*upperDisplay.font:times 12 bold*lowerDisplay.font:times 24 bold*Button*font: Meiryo 12 bold*Button*foreground:#007700*ckey*foreground:#ff0000*cekey*foreground:#ff0000*back*foreground:#ff0000*devkey*foreground:#0000ff*mulkey*foreground:#0000ff*minukey*foreground:#0000ff*pluskey*foreground:#0000ff*equalkey*foreground:#000000
配置文件完成之后,取一個適當的名字保存即可。本例中使用26 OpDb.txt。
最后一步就是在代碼中增加下面一行以讀入配置文件:
root.option_readfile('26 OpDb.txt')
程序執行結果如下:
“Tkinter中怎么通過OptionDB控制控件屬性”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。