[雪峰磁針石部落格]pythonGUI作業:tkinter控制元件改變背景色

書籍尋找發表於2018-12-03

要求

使用tkinter生成如下視窗:

圖片.png

圖片.png

在右上角文字框輸入名字,在旁邊的下拉框選擇數字,點選”Click Me!”, “Click Me!”的文字將改變成如下:

圖片.png

可以選擇”Unchecked”和”Enabled”的其中一個。

點選Blue、Gold、Red其中的一個,將會改變背景為對應的顏色。

最下面的文字框可以輸入文字,當列數超出範圍時,可以通過滾動條操作。

圖片.png

參考資料

參考程式碼

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 技術支援:https://www.jianshu.com/u/69f40328d4f0 
# 技術支援 https://china-testing.github.io/
# https://github.com/china-testing/python-api-tesing/blob/master/practices/tk/tk1.py
# 專案實戰討論QQ群630011153 144081101
# CreateDate: 2018-11-27

import tkinter as tk
from tkinter import ttk
from tkinter import scrolledtext

win = tk.Tk()   

# Add a title       
win.title("Python GUI")  

# Modify adding a Label
a_label = ttk.Label(win, text="A Label")
a_label.grid(column=0, row=0)

# Modified Button Click Function
def click_me(): 
    action.configure(text=`Hello ` + name.get() + ` ` + 
                     number_chosen.get())

# Changing our Label
ttk.Label(win, text="Enter a name:").grid(column=0, row=0)

# Adding a Textbox Entry widget
name = tk.StringVar()
name_entered = ttk.Entry(win, width=12, textvariable=name)
name_entered.grid(column=0, row=1)

# Adding a Button
action = ttk.Button(win, text="Click Me!", command=click_me)   
action.grid(column=2, row=1)                                 # <= change column to 2

# Creating three checkbuttons
ttk.Label(win, text="Choose a number:").grid(column=1, row=0)
number = tk.StringVar()
number_chosen = ttk.Combobox(win, width=12, textvariable=number, state=`readonly`)
number_chosen[`values`] = (1, 2, 4, 42, 100)
number_chosen.grid(column=1, row=1)
number_chosen.current(3)

chVarDis = tk.IntVar()
check1 = tk.Checkbutton(win, text="Disabled", variable=chVarDis, state=`disabled`)
check1.select()
check1.grid(column=0, row=4, sticky=tk.W)                   

chVarUn = tk.IntVar()
check2 = tk.Checkbutton(win, text="UnChecked", variable=chVarUn)
check2.deselect()
check2.grid(column=1, row=4, sticky=tk.W)                   

chVarEn = tk.IntVar()
check3 = tk.Checkbutton(win, text="Enabled", variable=chVarEn)
check3.deselect()
check3.grid(column=2, row=4, sticky=tk.W)                     

# GUI Callback function 
def checkCallback(*ignoredArgs):
    # only enable one checkbutton
    if chVarUn.get(): check3.configure(state=`disabled`)
    else:             check3.configure(state=`normal`)
    if chVarEn.get(): check2.configure(state=`disabled`)
    else:             check2.configure(state=`normal`) 

# trace the state of the two checkbuttons
chVarUn.trace(`w`, lambda unused0, unused1, unused2 : checkCallback())    
chVarEn.trace(`w`, lambda unused0, unused1, unused2 : checkCallback())   


# First, we change our Radiobutton global variables into a list
colors = ["Blue", "Gold",  "Red"]   

# We have also changed the callback function to be zero-based, using the list 
# instead of module-level global variables 
# Radiobutton Callback
def radCall():
    radSel=radVar.get()
    win.configure(background=colors[radSel])

# create three Radiobuttons using one variable
radVar = tk.IntVar()

# Next we are selecting a non-existing index value for radVar
radVar.set(99)                                 
 
# Now we are creating all three Radiobutton widgets within one loop
for col in range(3):                             
    curRad = tk.Radiobutton(win, text=colors[col], variable=radVar, 
                            value=col, command=radCall)          
    curRad.grid(column=col, row=5, sticky=tk.W) 

# Using a scrolled Text control    
scr = scrolledtext.ScrolledText(win, width=30, height=3, wrap=tk.WORD)
scr.grid(column=0, columnspan=3)

name_entered.focus()      # Place cursor into name Entry

#======================
# Start GUI
#======================
win.mainloop()


相關文章