def
getImage
(
device
)
:
cap
=
cv2
.
VideoCapture
(
device
)
cap
.
set
(
3
,
width
)
cap
.
set
(
4
,
height
)
sucess
=
cap
.
isOpened
(
)
while
sucess
:
ret
,
image
=
cap
.
read
(
)
if
ret
:
yield
image
else
:
raise
NotImplementedError
def
show
(
)
:
def
showImage
(
)
:
while
True
:
image
=
Img
.
__next__
(
)
cv2
.
imshow
(
"camera"
,
image
)
if
cv2
.
waitKey
(
0
)
==
27
:
cv2
.
destroyAllWindows
(
)
break
t
=
threading
.
Thread
(
target
=
showImage
)
t
.
start
(
)
def
get_value
(
v
=
0
)
:
param
=
{
}
for
key
in
scales
.
keys
(
)
:
param
[
key
]
=
scales
[
key
]
[
'value'
]
.
get
(
)
paramVar
.
set
(
f
"wave:({param['waveX']},{param['waveY']}), pitch:{param['pitch']}, yaw:{param['yaw']}, theta:{param['theta']}"
)
if
__name__
==
'__main__'
:
Img
=
getImage
(
0
)
root
=
Tk
(
)
root
.
title
(
"Calibrate tools"
)
root
.
geometry
(
'600x300+400+400'
)
root
.
wm_resizable
(
False
,
False
)
v
=
IntVar
(
)
height
=
480
width
=
640
scales
=
{
'waveX'
:
{
'range'
:
(
0
,
10
)
,
'value'
:
IntVar
(
)
,
'pos'
:
0
,
'describe'
:
"waveX/m"
}
,
'waveY'
:
{
'range'
:
(
0
,
10
)
,
'value'
:
IntVar
(
)
,
'pos'
:
1
,
'describe'
:
"waveY/m"
}
,
'pitch'
:
{
'range'
:
(
0
,
300
)
,
'value'
:
IntVar
(
)
,
'pos'
:
2
,
'describe'
:
"pitch/(-30°~30°)"
}
,
'yaw'
:
{
'range'
:
(
0
,
300
)
,
'value'
:
IntVar
(
)
,
'pos'
:
3
,
'describe'
:
"yaw/(-30°~30°)"
}
,
'theta'
:
{
'range'
:
(
0
,
300
)
,
'value'
:
IntVar
(
)
,
'pos'
:
4
,
'describe'
:
"theta/(-30°~30°)"
}
}
for
k
,
v
in
scales
.
items
(
)
:
Label
(
root
,
text
=
v
[
'describe'
]
)
.
grid
(
row
=
v
[
'pos'
]
,
column
=
0
,
padx
=
5
)
scales
[
k
]
[
'target'
]
=
Scale
(
root
,
variable
=
v
[
'value'
]
,
from_
=
v
[
'range'
]
[
0
]
,
to
=
v
[
'range'
]
[
1
]
,
orient
=
HORIZONTAL
,
length
=
450
,
command
=
get_value
)
scales
[
k
]
[
'target'
]
.
grid
(
row
=
v
[
'pos'
]
,
column
=
1
,
columnspan
=
2
)
v
[
'value'
]
.
set
(
v
[
'range'
]
[
1
]
//
2
)
paramVar
=
StringVar
(
)
get_value
(
)
Label
(
root
,
text
=
"参数信息:"
)
.
grid
(
row
=
5
,
pady
=
18
)
Label
(
root
,
textvariable
=
paramVar
)
.
grid
(
row
=
5
,
column
=
1
)
bt_start
=
Button
(
root
,
text
=
'打开摄像头'
,
height
=
2
,
width
=
10
,
command
=
show
)
bt_start
.
grid
(
row
=
5
,
column
=
2
,
padx
=
10
)
root
.
mainloop
(
)
注:opencv是为了使用摄像头,只关注滑块的部分可以屏蔽show和getImage函数部分
Scale模块在使用绑定函数时,默认会传入一个参数(滑块滑动后的值)
问题:
当我们多个滑块绑定同一个函数时就不能区分得到的是哪个滑块滑动的值
解决:
在绑定函数中添加滑块信息的key来区分
注意:
for循序中lambda的变量的使用需要先使用临时变量存储再传入
from tkinter import *
def get_value(value, key):
paramVar.set(f"change [{key}] to {value}")
if __name__ == '__main__':
Img = getImage(0)
root = Tk()
root.title("Calibrate tools")
root.geometry('600x300+400+400')
root.wm_resizable(False, False)
height = 480
width = 640
scales = {'waveX': {'range': (0, 10), 'value': IntVar(), 'pos': 0, 'describe': "waveX/m"},
'waveY': {'range': (0, 10), 'value': IntVar(), 'pos': 1, 'describe': "waveY/m"},
'pitch': {'range': (0, 300), 'value': IntVar(), 'pos': 2, 'describe': "pitch/(-30°~30°)"},
'yaw': {'range': (0, 300), 'value': IntVar(), 'pos': 3, 'describe': "yaw/(-30°~30°)"},
'theta': {'range': (0, 300), 'value': IntVar(), 'pos': 4, 'describe': "theta/(-30°~30°)"}}
for k, v in scales.items():
scales[k]['target'] = Scale(root,
label=v['describe'],
variable=v['value'],
from_=v['range'][0],
to=v['range'][1],
resolution=v['range'][1]/10,
show=0,
orient=HORIZONTAL,
length=450,
command=lambda value, key=k:get_value(value, key))
scales[k]['target'].grid(row=v['pos'], column=0, columnspan=3)
v['value'].set(v['range'][1]//2)
paramVar = StringVar()
Label(root, text="参数信息:").grid(row=5, pady=18)
Label(root, textvariable=paramVar).grid(row=5, column=1)
root.mainloop()
Scale(master=None, **options) (class)
- master – 父组件
- options – 组件选项,下方表格详细列举了各个选项的具体含义和用法:
选项 | 含义 |
activebackground | 1. 指定当鼠标在上方飘过的时候滑块的背景颜色 2. 默认值由系统指定 |
background | 1. 滚动槽外部的背景颜色 2. 默认值由系统指定 |
bg | 跟 background 一样 |
bigincrement | 1. 设置“大”增长量 2. 该选项设置增长量的大小 3. 默认值是 0,增长量为范围的 1/10 |
borderwidth | 1. 指定边框宽度 2. 默认值是 2 |
bd | 跟 borderwidth 一样 |
command | 1. 指定一个函数,每当滑块发生改变的时候都会自动调用该函数 2. 该函数有一个唯一的参数,就是最新的滑块位置 3. 如果滑块快速地移动,函数可能无法获得每一个位置,但一定会获得滑块停下时的最终位置 |
cursor | 1. 指定当鼠标在上方飘过的时候的鼠标样式 2. 默认值由系统指定 |
digits | 1. 设置最多显示多少位数字 2. 补充注释:例如设置 from 选项为 0,to 选项为 20,digits 选项设置为 5,那么滑块的范围就是在 0.000 ~ 20.000 直接滑动 3. 默认值是 0(不开启) |
foreground | 1. 指定滑块左侧的 Label 和刻度的文字颜色 2. 默认值由系统指定 |
fg | 跟 foreground 一样 |
font | 1. 指定滑块左侧的 Label 和刻度的文字字体 2. 默认值由系统指定 |
from_ | 1. 设置滑块最顶(左)端的位置 2. 默认值是 0 |
highlightbackground | 1. 指定当 Scale 没有获得焦点的时候高亮边框的颜色 2. 默认值由系统指定 |
highlightcolor | 1. 指定当 Scale 获得焦点的时候高亮边框的颜色 2. 默认值由系统指定 |
highlightthickness | 1. 指定高亮边框的宽度 2. 默认值是 0(不带高亮边框) |
label | 1. 你可以在垂直的 Scale 组件的顶端右侧(水平的话是左端上方)显示一个文本标签 2. 默认值是不显示标签 |
length | 1. Scale 组件的长度 2. 默认值是 100 像素 |
orient | 1. 设置该 Scale 组件是水平放置("horizontal")还是垂直放置("vertical") 2. 默认值是 "vertical" |
relief | 1. 指定边框样式 2. 默认值是 "sunken" 3. 可以选择 "flat","raised","groove" 和 "ridge" |
repeatdelay | 1. 该选项指定鼠标左键点击滚动条凹槽的响应时间 2. 默认值是 300(毫秒) |
repeatinterval | 1. 该选项指定鼠标左键紧按滚动条凹槽时的响应间隔 2. 默认值是 100(毫秒) |
resolution | 1. 指定 Scale 组件的分辨率(步长,即在凹槽点击一下鼠标左键它移动的数量) 2. 补充注释:例如设置 from 选项为 0,to 选项为 20,resolution 选项设置为 0.1 的话,那么每点击一下鼠标就是在 0.0 ~ 20.0 之间以 0.1 的步长移动 3. 默认值是 1 |
showvalue | 1. 设置是否显示滑块旁边的数字 2. 默认值为 True |
sliderlength | 1. 设置滑块的长度 2. 默认值是 30 像素 |
sliderrelief | 1. 设置滑块的样式 2. 默认值是 "raised" 3. "flat","sunken","groove" 和 "ridge" |
state | 1. 默认情况下 Scale 组件支持鼠标事件和键盘事件,可以通过设置该选项为 "disabled" 来禁用此功能 2. 默认值是 "normal" |
takefocus | 1. 指定使用 Tab 键是否可以将焦点移动到该 Scale 组件上 2. 默认是开启的,可以通过将该选项设置为 False 避免焦点落在此组件上 |
tickinterval | 1. 设置显示的刻度,如果设置一个值,那么就会按照该值的倍数显示刻度 2. 默认值是不显示刻度 |
to | 1. 设置滑块最底(右)端的位置 2. 默认值是 100 |
troughcolor | 1. 设置凹槽的颜色 2. 默认值由系统指定 |
variable | 1. 指定一个与 Scale 组件相关联的 Tkinter 变量,该变量存放滑块最新的位置 2. 当滑块移动的时候,该变量的值也会发生相应的变化 |
width | 1. 指定 Scale 组件的宽度 2. 默认值是 15 像素 |
上段代码做个记录import cv2from tkinter import *import threading # 多线程def getImage(device): cap = cv2.VideoCapture(device) cap.set(3, width) # 设置分辨率 cap.set(4, height) sucess = cap.isOpened() while sucess: ret, image = cap.read()
The-windows-pickle-login-tkinter-python-project
Python的标准TK GUI工具包的接口Tkinter模块(“TK界面”)是Python的标准TK GUI工具包的接口。
TK和Tkinter可以用于大多数UNIX平台,也可以应用于windows和麦金塔系统。tk8.0的后续版本可以通过TTK实现本地窗口样式,并且在大多数平台上都运行良好。此外,Tkinter Tix还提供了更丰富的窗口组件。
这个项目将使用Tkinter库来实现用户注册和登录。
滑动
滑块的两个关键点为:(1)生成滑动轨迹(2)控制滑动按钮进行滑动
(1)根据要滑动的距离生成滑动轨迹,此处是模拟人为滑动:先加速滑动
滑块,再减速滑动
滑块。代码如下:
其中distance参数就是要滑动的距离,返回值tracks为生成的滑动轨迹,,后面要把tracks传给滑动
滑块的函数。
滑块(Scale)是一种直观地进入数值输入的交互控件;菜单(Menu)用于可视化地为一系列命令进行分组,从而方便用户找到和触发执行这些命令。这里Menu所实例化的是主菜单。用Toplevel可新建一个显示在最前面的子窗体。其通式为:字体实例名=Toplevel(根窗体)
子窗体与根窗体类似,也可设置title、geometry等属性,并在上面布局其他控件。所谓模式(Modal)对话框,是相对于前面所介绍的非模式窗体而言的,所弹出的对话框必须应答,在关闭之前无法操作其后面的其他窗体。...
对于 Python 爬虫中遇到的滑块验证,你可以考虑以下几种方法来解决:
手动解决滑块验证:在爬虫程序中手动解决滑块验证,比如通过手动模拟鼠标滑动操作来完成滑块验证。
使用浏览器插件解决滑块验证:你可以使用浏览器插件,比如 Chrome 浏览器中的「验证码识别」插件,来自动识别并填写滑块验证。
使用 Selenium 来解决滑块验证:你可以使用 Selenium 这个自动化测试工具来模拟人的...
evalue = e.get()
print 'btn Click and Entry value is %s' % evalue
def btn_click_bind(event):
print 'enter b2'
def show_toplevel():
top = Toplevel()
https://pysimplegui.readthedocs.io/en/latest/
您将找到有关Elements的信息,所有其他类和函数都位于本手册结尾处。它们位于自述文件的大部分中,按字母顺序排列以便于查找。本节对Elements的讨论旨在教您如何工作。另一部分包含详细的呼叫签名和参数定义。
滑块元素 Slider Element
A slider, horizontal or vertical
Slider(range=(