第一章代码重构

代码重构方便之后扩展(主要是循环生成Radiobuttion那里)

# -*- coding: utf-8 -*-

# import
import tkinter as tk  # 1 imports
from tkinter import ttk

from tkinter import scrolledtext as st

win = tk.Tk()  # 2 Create instance
win.title("Python GUI")  # 3 Add a title
# win.resizable(0, 0)           # 4 Disable resizing the GUI

# add a label                   #4
aLabel = ttk.Label(win, text="输入文本:")
aLabel.grid(column=0, row=0)  # 5

ttk.Label(win, text="choose a number").grid(column=1, row=0)
number = tk.StringVar()

# only be able to select the values we have programmed into the Combobox:state="readonly"
numberChosen = ttk.Combobox(win, width=12, textvariable=number, state="readonly")
numberChosen.grid(column=1, row=1)
numberChosen["values"] = (1, 2, 3, 4, 5, 6, 12)
numberChosen.current(3)

def clickMe():
    action.configure(text="hello " + name.get() + "-" + number.get())
    # aLabel.configure(foreground="red")

# add a button                   #4
action = ttk.Button(win, text="点我", command=clickMe)
action.grid(column=3, row=1)
# action.configure(state="disabled")  # Disable the Button Widget

# Adding a Textbox Entry widget    # 5
name = tk.StringVar()
nameEntered = ttk.Entry(win, width=12, textvariable=name)
nameEntered.grid(column=0, row=1)
nameEntered.focus()  # Place cursor into name Entry

# Creating three checkbuttons    # 1
# 0 (unchecked) or 1 (checked) so the type of the variable is a tkinter integer.
chVarDis = tk.IntVar()  # 2
check1 = tk.Checkbutton(win, text="Disabled", variable=chVarDis, state='disabled')  # 3
check1.select()  # 4
check1.grid(column=0, row=4, sticky=tk.W)  # 5

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

chVarEn = tk.IntVar()  # 10
check3 = tk.Checkbutton(win, text="Enabled", variable=chVarEn)
check3.select()  # 12
check3.grid(column=2, row=4, sticky=tk.W)  # 13

# Radiobutton Globals #1
# COLOR1 = "DarkSalmon" #2
# COLOR2 = "honeydew" #3
# COLOR3 = "AliceBlue" #4
# Radiobutton Callback # 5
# create three Radiobuttons using one variable(绑定到一个变量上可以在单选按钮中只选中一个)
# radVar = tk.IntVar()
# def radCall(): #6
#       radSel=radVar.get()
#       if   radSel == 1: win.configure(background=COLOR1)
#       elif radSel == 2: win.configure(background=COLOR2)
#       elif radSel == 3: win.configure(background=COLOR3)
#
# rad1 = tk.Radiobutton(win, text=COLOR1, variable=radVar, value=1, command=radCall)              # 9
# rad1.grid(column=0, row=5, sticky=tk.W)  # 10
# rad2 = tk.Radiobutton(win, text=COLOR2, variable=radVar, value=2, command=radCall)                             # 11
# rad2.grid(column=1, row=5, sticky=tk.W)  # 12
# rad3 = tk.Radiobutton(win, text=COLOR3, variable=radVar, value=3, command=radCall)                             # 13
# rad3.grid(column=2, row=5, sticky=tk.W)  # 14

# 代码重构(refactor our code)
# First, we change our Radiobutton global variables into a list.
colors = ["DarkSalmon", "honeydew", "AliceBlue"]
# create three Radiobuttons using one variable
radVar = tk.IntVar()
# Next we are selecting a non-existing index value for radVar.
# (如果不设置为range范围外的值,初始化页面默认会选中第一个并且不会触发变更背景色的回调函数)
radVar.set(99)
# We have also changed the callback function to be zero-based, using the list instead of module-level global variables.
# Radiobutton callback function
def radCall():
    radSel = radVar.get()
    if radSel == 0:
        win.configure(background=colors[0])
    elif radSel == 1:
        win.configure(background=colors[1])
    elif radSel == 2:
        win.configure(background=colors[2])
# Now we are creating all three Radiobutton widgets within one loop.
for col in range(3):
    curRad = 'rad' + str(col)
    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
scrollW = 30
scrollH = 3
scroll = st.ScrolledText(win, width=scrollW, height=scrollH, wrap=tk.WORD)
scroll.grid(column=0, columnspan=3)
scroll.focus()

win.mainloop()  # 5 Start GUI

运行效果图

Paste_Image.png

更多颜色参考:http://www.tcl.tk/man/tcl8.5/TkCmd/colors.htm

时间: 2024-10-08 22:15:32

第一章代码重构的相关文章

代码重构(二):类重构规则

在上篇博客<代码重构(一):函数重构规则(Swift版)>中,详细的介绍了函数的重构规则,其中主要包括:Extract Method, Inline Method, Inline Temp, Replace Temp with Query, Introduce Explaining Variable, Split Temporary Variable, Remove Assignments to Parameters, Replace Method with Method Object等.关于

代码重构(六):代码重构完整案例

无论做什么事情呢,都要善始善终呢.前边连续发表了5篇关于重构的博客,其中分门别类的介绍了一些重构手法.今天的这篇博客就使用一个完整的示例来总结一下之前的重构规则,也算给之前的关于重构的博客画一个句号.今天的示例借鉴于<重构,改善既有代码的设计>这本书中的第一章的示例,在其基础上做了一些修改.今天博客从头到尾就是一个完整的重构过程.首先会给出需要重构的代码,然后对其进行分析,然后对症下药,使用之前我们分享的重构规则对其进行一步步的重构. 先来聊一下该示例的使用场景(如果你有重构这本书的话,可以参

代码重构(四):条件表达式重构规则

继续更新有关重构的博客,前三篇是关于类.函数和数据的重构的博客,内容还算比较充实吧.今天继续更新,本篇博客的主题是关于条件表达式的重构规则.有时候在实现比较复杂的业务逻辑时,各种条件各种嵌套.如果处理不好的话,代码看上去会非常的糟糕,而且业务逻辑看上去会非常混乱.今天就通过一些重构规则来对条件表达式进行重构,让业务逻辑更为清晰,代码更以维护和扩展. 今天博客中的代码示例依然是Swift班,在对条件表达式重构时也会提现出Swift的优雅之处,会用上Swift特有的语法及其特点,比如使用guard来

《重构HTML:改善Web应用的设计(修订版)》——第1章 重构1.1 为何重构

第1章 重构 重构.什么是重构?为何要重构? 简明扼要地说,重构是在不改变程序行为的基础上进行小的改动,是代码基逐渐改善的过程,通常也需依赖于一些自动化工具的帮助.重构的目标是移除长年积聚下来的烂码①,以得到更清晰和更容易维护.除错以及添加新功能的代码. 严格地说,重构实际上并不涉及除错,也不增加新功能.但在实践中,重构的过程总是会碰到需要修正的错误,也会有需要加入新功能的时候.重构通常会化繁为简,化难为易.改善代码的第一步是重组代码. 举个例子,无论是为了开始新的学期,还是从事新项目或新工作而

第一章 andriod studio 安装与环境搭建

原文 http://blog.csdn.net/zhanghefu/article/details/9286123 第一章   andriod studio 安装与环境搭建   一.Android Studio简介 Android Studio是Google新发布的Android应用程序开发环境,Android Studio是基于IntelliJ IDEA开发而成的.在Android Studio开发环境中,Android开发者可以非常方便地调试Android应用程序,Android Studi

经典中的品味:第一章 C++的Hello,World!

1.1 程序 何为程序?简单的说,就是为了使计算机能够做事,你需要在繁琐的细节中告诉它怎么做.对于怎么做的描述就是程序. 编程是书写和测试怎么做的过程.维基百科上说,一个程序就像一个用汉语(程序设计语言)写下的红烧肉菜谱(程序),用于指导懂汉语和烹饪手法的人(体系结 构)来做这个菜.做一个形象的比喻,在生活中某种意义上,你都见到程序.石器时代,"我们用石头打它".就是个程序. 图1.1 "我们用石头打它"  摘自 <数学之美> 其中,他用怪叫和动作告诉小

第一章 容错机制 &amp;gt;

容错 第一章 容错机制 以国内最流行ASP为例,我不知道有多少人会在写代码时想到"容错"这个概念,实际上当我遇到这种事时,也是不了了之.为什么呢,想想最初的意思是认为写如下代码就能容错了,见示例1-1. <%@ Language=VBScript %> <%option explicit%> <% '出错过滤 on error resume next -----(代码略) %> 示例1-1 常见代码一瞥 以上代码就经常出现在各位同仁的手中,不用说出个

第一章 C#简介(rainbow 翻译) (转自重粒子空间)

<展现 C#> 第一章 C#简介(rainbow 翻译)   出处:http://www.informit.com/matter/ser0000001/chapter1/ch01.shtml 正文: 展现   C#  第一章                      C#    简介 欢迎您加入C#的世界! 这一章将把您引进C#的天地,并回答一些相关的问题,如:您为什么要使用C#,C++和C#的主要有什么不同点,以及为什么C#使开发更容易而且还使您感到很有趣.为什么是另外一种编程语言?必须回答

《.net编程先锋C#》第一章 C#简介(转)

编程 第一章 C# 简介 欢迎您加入C#的世界! 这一章将把您引进C#的天地,并回答一些相关的问题,如:您为什么要使用C#,C++和C#的主要有什么不同点,以及为什么C#使开发更容易而且还使您感到很有趣.为什么是另外一种编程语言? 必须回答的一个问题:当您已经使用C++或VB从事企业开发时,为什么还要学习另一种语言? 市场式的回答就是:"在企业计算领域,C#将会变成为用于编写"下一代窗口服务"(Next Generation Windows Services,简写为NGWS