美文网首页
九、与数字有关的Widget

九、与数字有关的Widget

作者: 蝉时雨丶 | 来源:发表于2020-07-15 15:26 被阅读0次

    Scale的基本概念

    Scale可以翻译为尺度。Python的tkinter模块中有Widget控件Scale,这是一种图形输入功能,
    我们可以移动尺度条产生某一范围的数字。

    建立尺度条的方法是Scale(),它的构造方法如下。
    Scale(父对象,options,···)
    Scale()方法的第一个参数是父对象,表示这个尺度条将建立在哪一个父对象内。下列是Scale方法内
    其他常用的options参数。
    (1)activebackground:鼠标光标在尺度条上时的背景颜色。
    (2)bg:背景颜色。
    (3)borderwidth或bd:3D边界宽度默认是两个像素。
    (4)command:当使用者更改数值时,会自动执行此函数。
    (5)cursor:当鼠标光标在尺度上时的光标形状。
    (6)digits:尺度数值,读取时需使用IntVar、DoubleVar或StringVar变量类型读取。
    (7)fg:文字前景颜色
    (8)font:字形
    (9)from_:尺度条范围值的初值。
    (10)hightlightbackground:当尺度条取得焦点时的背景颜色。
    (11)hightlightcolor:当尺度条获得焦点时的颜色。
    (12)label:默认是没有标签文字,如果尺度条是水平的则此标签出现在左上角,如果尺度条是
    垂直的则此标签出现在右上角。
    (13)length:默认是100像素。
    (14)orient:默认是水平,可以设置水平HORIZONTAL或垂直VERTICAL。
    (15)relief:默认是FLAT,可由此更改边界外观。
    (16)repeatdelay:可设置需要按住尺度条多久后才可移动此尺度条,单位是ms,默认是300。
    (17)resolution:每次更改的数值,例如,from_=2.0,to=4.0,如果将resolution设为0.5,
    则尺度可能数值是2.0、2.5、3.0、3.5、4.0。
    (18)showvalue:正常会显示尺度条的目前值,如果设为0则无法取得焦点。
    (19)state:如果设为DISABLE则暂时无法使用此Scale。
    (20)takefocus:正常时此尺度条可以循环取得焦点,如果设为0则无法取得焦点。
    (21)tickinterval:尺度条的标记刻度,例如,from_=2.0,to=3.0,tickinterval=0.25,此
    刻度是2.0、2.25、2.50、2.75和3.0。
    (22)to:尺度条范围值的末端值。
    (23)troughcolor:槽(trough)的颜色。
    (24)variable:设置或取得目前选取的尺度值,它的值类型通常是IntVar或StringVar。
    (25)width:对于垂直尺度条这是槽的宽度,对于水平尺度条这是槽的高度。

    样例:一个水平尺度条与垂直尺度条的应用。尺度值的范围为010,垂直的范围为010,
    垂直尺度条使用默认长度,水平尺度条则设为300。

    from tkinter import *
    
    window=Tk()
    window.title("ch9_1")
    
    slider1=Scale(window,from_=0,to=10).pack()
    slider2=Scale(window,from_=0,to=10,
                  length=300,orient=HORIZONTAL).pack()
    window.mainloop()
    

    示例二:设置Scale()构造方法中的多个参数。

    from tkinter import *
    
    root=Tk()
    root.title("ch9_2")
    
    slider=Scale(root,
                 from_=0,
                 to=10,
                 troughcolor="yellow",
                 width="30",
                 tickinterval=2,
                 label="My Scale",
                 length=300,
                 orient=HORIZONTAL)
    
    slider.pack()
    root.mainloop()
    

    取得与设置Scale的尺度值

    设计GUI程序时可以使用set()方法设置尺度的值,可以使用get()方法取得尺度的值。

    实例:使用set()设置尺度初值,使用get()获得尺度值。当单击Print按钮时可以在Python Shell窗口中
    列出垂直和水平的尺度值。

    from tkinter import *
    
    def printInfo():
        print("垂直尺度值=%d,水平尺度值=%d" % (sV.get(),sH.get()))
    
    root=Tk()
    root.title("ch9_3")
    
    sV=Scale(root,label="垂直",from_=0,to=10)
    sV.set(5)
    sV.pack()
    
    sH=Scale(root,label="水平",from_=0,to=10,
             length=300,orient=HORIZONTAL)
    sH.set(3)
    sH.pack()
    
    Button(root,text="Print",command=printInfo).pack()
    
    root.mainloop()
    

    使用Scale设置窗口背景颜色

    Scale控件有一个特点是在移动时可以自动触发事件。我们可以在使用Scale()时增加command
    参数设置移动时所要执行的callback方法。

    def callback():
    ·
    ·
    ·sliderObj=Scale(···,command=callback)

    从上述可知,当有尺度条时会调用与执行callback()方法。

    样例:设计三个尺度条分别代表R、G、B三种颜色,当移动这三个尺度条时,Python Shell将
    显示这三个尺度条的颜色值,通知可以看到窗口背景颜色也将实时更改。

    from tkinter import *
    
    def bgUpdate(source):
        red=rSlider.get()
        green=gSlider.get()
        blue=bSlider.get()
        print("R=%d,G=%d,B=%d" % (red,green,blue))
        myColor="#%02x%02x%02x" % (red,green,blue)
        root.config(bg=myColor)
    
    root=Tk()
    root.title("ch9_4")
    root.geometry("360x240")
    
    rSlider=Scale(root,from_=0,to=255,command=bgUpdate)
    gSlider=Scale(root,from_=0,to=255,command=bgUpdate)
    bSlider=Scale(root,from_=0,to=255,command=bgUpdate)
    gSlider.set(125)
    rSlider.grid(row=0,column=0)
    gSlider.grid(row=0,column=1)
    bSlider.grid(row=0,column=2)
    
    root.mainloop()
    

    上述设计是将尺度条放置在窗口左上角,如果想调整位置并不方便,最好的设计方式是先设计一个容器,
    然后将这三个尺度条放置在此容器内,未来如果想要移动位置,可以直接移动容器位置。

    askcolor()方法

    在tkinter模块内的colorchooser模块内有askcolor()方法,这个方法可以开启"色彩"对话框,我们可以很方便
    地在此对话框中选择色彩。

    样例:使用开启"色彩"对话框

    from tkinter import *
    from tkinter.colorchooser import *
    
    def bgUpdate():
        myColor=askcolor()
        print(type(myColor),myColor)    
        root.config(bg=myColor[1])
    
    root=Tk()
    root.title("ch9_4——1")
    root.geometry("360x240")
    
    btn=Button(text="Select Color",command=bgUpdate)
    btn.pack(pady=5)
    
    root.mainloop()。
    

    myColor的数据类型是元组,这个元组中有两个元素,索引0的元素也是元组,这个元素中含有
    三个数据,分别是RGB的色彩值。索引1的元素是16位的色彩字符串。我们可以使用色彩字符串
    设置窗口的背景颜色。

    容器的应用

    样例:将三个色彩尺度条放置在Frame容器内,然后将Frame容器放置在窗口上方中央。

    from tkinter import *
    
    def bgUpdate(source):
        red=rSlider.get()
        green=gSlider.get()
        blue=bSlider.get()
        print("R=%d,G=%d,B=%d" % (red,green,blue))
        myColor="#%02x%02x%02x" % (red,green,blue)
        root.config(bg=myColor)
    
    root=Tk()
    root.title("ch9_5")
    root.geometry("360x240")
    
    fm=Frame(root)
    fm.pack()
    
    rSlider=Scale(fm,from_=0,to=255,command=bgUpdate)
    gSlider=Scale(fm,from_=0,to=255,command=bgUpdate)
    bSlider=Scale(fm,from_=0,to=255,command=bgUpdate)
    gSlider.set(125)
    rSlider.grid(row=0,column=0)
    gSlider.grid(row=0,column=1)
    bSlider.grid(row=0,column=2)
    
    root.mainloop()
    

    相关文章

      网友评论

          本文标题:九、与数字有关的Widget

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