python GUI作业:tkinter控件改变背景色

作者: python测试开发 | 来源:发表于2018-11-27 22:53 被阅读37次

    要求

    使用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/tk1.py
    # 讨论钉钉免费群21745728 qq群144081101 567351477
    # 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(0)
    
    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()
        if   radSel == 0: win.configure(background=colors[0])  # now zero-based
        elif radSel == 1: win.configure(background=colors[1])  # and using list
        elif radSel == 2: win.configure(background=colors[2])
    
    # 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    
    scrol_w  = 30
    scrol_h  =  3
    scr = scrolledtext.ScrolledText(win, width=scrol_w, height=scrol_h, wrap=tk.WORD)
    scr.grid(column=0, columnspan=3)
    
    name_entered.focus()      # Place cursor into name Entry
    
    #======================
    # Start GUI
    #======================
    win.mainloop()
    

    相关文章

      网友评论

        本文标题:python GUI作业:tkinter控件改变背景色

        本文链接:https://www.haomeiwen.com/subject/cyhoqqtx.html