美文网首页
九、与数字有关的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

    Scale的基本概念 Scale可以翻译为尺度。Python的tkinter模块中有Widget控件Scale,这...

  • 与数字有关的短语

    at sixes and sevens 1. 乱七八糟 Her room is always at sixes a...

  • 手撕flutter(一)Widget

    Widget 与 Element Widget 粗略源码 Widget类继承自DiagnosticableTree...

  • Flutter基本知识整理笔记

    与iOS开发的异同。例:Widget和UIView,交互等 生命周期,Widget 常用Widget介绍 路由跳转...

  • 与父亲有关的数字(投稿)

    这是我第二次书写关于父亲的文字,缕清思绪而尚未着墨,便已在内心里有了莫名的感动,那是一种无需任何修饰的敬重。我的父...

  • flutter进阶

    上一篇 Flutter开篇 widget组合与自绘 组合--返回widget组合.png 组合--继承widget...

  • 记住了一个数字“258”

    这是一组非常吉祥美好的数字,可以按谐音称为“你我发”,你发,我也发。 这组数字与一座城市有关,与一条河有关。这座城...

  • 有关iOS todayExtension(Widget)的使用

    什么是todayExtension 先附上官方文档链接:App Extension Programming Gui...

  • flutter随手记

    1 Widget Key的左右和GlobalKey与普通Key的区别Controls how one widget...

  • 九、Flutter的布局Widget

    一. 单子布局组件 单子布局组件的含义是其只有一个子组件,可以通过设置一些属性设置该子组件所在的位置信息等。比较常...

网友评论

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

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