10.2Python圖形使用者介面庫tkinter(2):認識常見控制元件
阿新 • • 發佈:2019-01-25
# 本類展示了Checkbutton、Radiobutton、Entry、Message、Label、Text的使用方式
# 並使用表格佈局將它們佈局在介面中
class WidgetDemo():
def __init__(self):
# 視窗和標題
window = Tk()
window.title("Widgets Demo")
# 使用面板並新增到視窗
frame1 = Frame(window)
frame2 = Frame(window)
frame1.pack()
frame2.pack()
# 構造Checkbutton並繫結資料和監聽
self.cbValue = IntVar()
cb = Checkbutton(
frame1, text="Bold",
# 將狀態儲存於cbValue,將勾選或取消事件交給onCheckbuttonChanged函式
variable=self.cbValue, command=self.onCheckbuttonChanged
)
# 構造Radiobutton並繫結資料和監聽
# 將兩個Radiobutton置為一個單選按鈕組
self.rbValue = IntVar()
rb1 = Radiobutton(
frame1, text="Red" , background="Red",
# 將單選按鈕組的當前選項儲存於rbValue,當前紅色單選框的值設定為1
# 單選按鈕組狀態發生變化時,由onRadioButtonChange函式進行處理
variable=self.rbValue, value=1,
command=self.onRadioButtonChange
)
rb2 = Radiobutton(
frame1, text="Yellow", background="Yellow" ,
variable=self.rbValue, value=2,
command=self.onRadioButtonChanged
)
rb3 = Radiobutton(
frame1, text="Blue", background="blue",
variable=self.rbValue, value=3,
command=self.onRadioButtonChanged
)
# 表格佈局控制元件,不必再pack
cb.grid(row=1, column=1)
rb1.grid(row=1, column=2)
rb2.grid(row=1, column=3)
rb3.grid(row=1, column=4)
# 標籤
lable = Label(frame2, text="Enter your name")
# 輸入框及資料繫結
self.entryValue = StringVar()
entry = Entry(frame2, textvariable=self.entryValue)
# Message
btnGet = Button(frame2, text="Get Name", command=self.onBtnGetnameClick)
msg = Message(frame2, text="its a msg")
# 將控制元件以行列形式佈局在介面中,不必再pack
lable.grid(row=1, column=1)
entry.grid(row=1, column=2)
btnGet.grid(row=1, column=3)
msg.grid(row=1, column=4)
# 文字域,插入文字內容
text = Text(window, width=50, height=10)
text.insert(END, "Abcdefg\n")
text.insert(END, "Hijklmn\n")
text.insert(END, "Okqrst\n")
text.pack()
window.mainloop()
# Checkbutton的事件監聽函式,從繫結的資料中獲取資料
def onCheckbuttonChanged(self):
print(self.cbValue.get())
print("onCheckbuttonChanged:" + ("checked" if self.cbValue.get() == 1 else"unchecked"))
pass
# RadioButton的單選事件監聽
def onRadioButtonChanged(self):
print("您當前選中的是%d號Radiobutton" % (self.rbValue.get()))
# print("onRadioButtonChanged:" + ("rb1" if self.rbValue.get() == 1 else"rb2"))
pass
# 按鈕的事件監聽,獲取Entry所繫結的資料
def onBtnGetnameClick(self):
print(self.entryValue.get())
pass
執行效果