[譯][Tkinter 教程06] Checkbox 控件

已獲原做者受權. 原系列地址: Python Tkinter

簡介

Checkbox 控件容許用戶在多個選項中選擇多項. Radiobutton 則只容許用戶選擇一項.
一般, Checkbox 會顯示爲一個空白的方框 (表示 false, 未被選中), 或者方框中有一個對號或X號 (表示 true, 被選中). 一個對該選項的簡短描述會和選擇框一同顯示. checkbox 的狀態會因點擊而改變, 這個點擊可能來自鼠標, 也可能來自鍵盤熱鍵, 好比空格鍵一般被設置爲 checkbox 的選擇鍵.
一個 checkbox 有兩種狀態: 開 或者 關.
Tkinter 中的 checkbox 能夠包含文字, 可多行顯示, 但只能使用預設字體; 也能夠包含圖片. 能夠綁定一個 Python 函數或方法. 當 checkbox 被點擊時, 該函數或方法會被調用.php

簡單例子

下例中展現了兩個 checkbox: 男和女 ("male" 和 "female"). 每一個 checkbox 都和一個不一樣的變量相關聯 (IntVar()).python

from tkinter import *
master = Tk()
var1 = IntVar()
Checkbutton(master, text="male", variable=var1).grid(row=0, sticky=W)
var2 = IntVar()
Checkbutton(master, text="female", variable=var2).grid(row=1, sticky=W)
mainloop()

上面的代碼會顯示以下窗口:
圖1編程

咱們能夠對上例進行改進. 首先咱們加入一個 Label 控件. 而後咱們加入兩個 Button 控件, 一個用來退出應用, 一個用來查看每一個 checkbox 所關聯的變量的值.segmentfault

from tkinter import *
master = Tk()

def var_states():
   print("male: %d,\nfemale: %d" % (var1.get(), var2.get()))

Label(master, text="Your sex:").grid(row=0, sticky=W)
var1 = IntVar()
Checkbutton(master, text="male", variable=var1).grid(row=1, sticky=W)
var2 = IntVar()
Checkbutton(master, text="female", variable=var2).grid(row=2, sticky=W)
Button(master, text='Quit', command=master.quit).grid(row=3, sticky=W, pady=4)
Button(master, text='Show', command=var_states).grid(row=4, sticky=W, pady=4)
mainloop()

上面的代碼顯示以下窗口:
圖2app

若是咱們勾選 "male" 選項, 而後點擊 "show" 按鈕, 咱們會獲得下面的輸出:編程語言

male: 1,
female: 0

另外一個例子

編寫一個應用, 用 checkbox 來描述一些編程語言, 好比 Python, Ruby, Perl, C++, 和一些天然語言, 好比 English, German. 這樣用戶就能夠在其中挑選出編程語言和天然語言. 而後再在其中加入兩個按鈕, 一個用來退出應用, 一個用來查看 checkbox 的取值狀態.ide

#!/usr/bin/python3

from tkinter import *
class Checkbar(Frame):
   def __init__(self, parent=None, picks=[], side=LEFT, anchor=W):
      Frame.__init__(self, parent)
      self.vars = []
      for pick in picks:
         var = IntVar()
         chk = Checkbutton(self, text=pick, variable=var)
         chk.pack(side=side, anchor=anchor, expand=YES)
         self.vars.append(var)
   def state(self):
      return map((lambda var: var.get()), self.vars)
if __name__ == '__main__':
   root = Tk()
   lng = Checkbar(root, ['Python', 'Ruby', 'Perl', 'C++'])
   tgl = Checkbar(root, ['English','German'])
   lng.pack(side=TOP,  fill=X)
   tgl.pack(side=LEFT)
   lng.config(relief=GROOVE, bd=2)

   def allstates(): 
      print(list(lng.state()), list(tgl.state()))
   Button(root, text='Quit', command=root.quit).pack(side=RIGHT)
   Button(root, text='Peek', command=allstates).pack(side=RIGHT)
   root.mainloop()

上面的代碼輸出以下窗口:
圖3函數


全系列:
[譯][Tkinter 教程01] 入門: Label 控件
[譯][Tkinter 教程02] Message 控件
[譯][Tkinter 教程03] Button 控件
[譯][Tkinter 教程04] Variable 類
[譯][Tinkter 教程05] Radiobutton 控件
[譯][Tkinter 教程06] Checkbox 控件
[譯][Tkinter 教程07] Entry 控件
[譯][Tkinter 教程08] Canvas 圖形繪製
[譯][Tkinter 教程09] Scale 控件
[譯][Tkinter 教程10] Text 控件
[譯][Tkinter 教程11] 對話框和消息框
[譯][Tkinter 教程12] 佈局管理 (Pack Place Grid)
[譯][Tkinter 教程13] Mastermind 遊戲
[譯][Tkinter 教程14] menu 菜單
[譯][Tkinter 教程15] event 事件綁定
譯者水平有限, 若有疏漏, 歡迎指正.
已得到原做者受權. 原文地址: Checkboxes
相關文章
相關標籤/搜索