答案1
怎么运行的
下面的脚本测量鼠标指针两个位置之间的区域的大小。
其工作原理如下:
将鼠标指针放在第一个位置(不单击)
按下您选择的组合键(见下文)
将鼠标放在第二个位置(同样不单击)
再次按下组合键。通知将告诉您该区域的确切大小(px)。
选项
您可以选择(通过取消注释其中一行)如何接收通知;通过以下通知:
或者 Zenity 信息窗口:
(示例来自不同领域)
如何使用
该脚本使用
xdotool
:sudo apt-get install xdotool
将以下脚本复制到一个空文件中,取消注释其中一行:
command = ['notify-send', 'Area size', str(w)+' x '+str(h)]
(以选项通知为准
notify-send
)或者:
command = ['zenity', '--info', '--title', 'Area Size', '--text', str(w) + ' x ' + str(h)]
作为
Zenity
选项。将脚本保存在
~/bin
(您可能需要创建目录)中measure_area
(无扩展名)使其可执行。添加您选择的组合键来运行脚本:选择:系统设置 > “键盘” > “快捷键” > “自定义快捷键”。单击“+”并添加命令:
measure_area
笔记
- 您必须先注销/登录
- 你把谁当第一/第二并不重要;剧本衡量绝对值。
剧本
#!/usr/bin/env python3
import subprocess
import os
import math
home = os.environ["HOME"]
area = home+"/"+".measure_area.txt"
def get_pos():
pos_data = subprocess.check_output(["xdotool", "getmouselocation"]).decode("utf-8")
return [m[2:] for m in pos_data.split()[:2]]
def confirm():
get = subprocess.check_output(["xrandr", "--verbose"]).decode("utf-8").split()
for s in [get[i-1] for i in range(len(get)) if get[i] == "connected"]:
br_data = float(get[get.index("Brightness:")+1])
brightness = lambda br: ["xrandr", "--output", s, "--brightness", br]
flash = ["sleep", "0.1"]
for cmd in [brightness(str(br_data-0.1)), flash, brightness(str(br_data))]:
subprocess.call(cmd)
if not os.path.exists(area):
with open(area, "wt") as measure:
measure.write(str(get_pos()))
confirm()
else:
second = get_pos()
with open(area) as first_m:
try:
first = eval(first_m.read())
w = int(math.fabs(int(second[0]) - int(first[0])))
h = int(math.fabs(int(second[1]) - int(first[1])))
#--- uncomment either one of the lines below:
# command = ['notify-send', 'Area size', str(w)+' x '+str(h)]
command = ['zenity', '--info', '--title', 'Area Size', '--text', str(w) + ' x ' + str(h)]
#---
confirm()
except SyntaxError:
text = "Please try again, there was an error in the data"
command = ['zenity', '--info', '--title', 'Please try again', '--text', text]
subprocess.Popen(command)
os.remove(area)
解释
第一次调用脚本时,它使用以下xdotool
命令获取当前鼠标位置:
xdotool getmouselocation
然后它将位置保存到一个(不可见的)文件中.measure_area.txt
,等待第二次调用。
在第二次调用时,它会读取文件,将其删除,并将存储的x/y
坐标与最新的坐标进行比较,并计算它们之间的区域大小。
编辑
更新了脚本并进行了一些改进:
- 优化
subprocess.Popen()
/subprocess.check_output()
命令(感谢@muru、@Trengot) - 添加修复程序,以防第一个数据文件出现问题(例如,如果用户第一次尝试运行脚本而没有
xdotool
安装) - 增加了一个小的确认屏幕,当按下组合键时,屏幕会暗淡闪烁,用于第一个坐标。这似乎更方便用户使用,可以给用户一些对某种行动的确认。
答案2
使用快门
首次安装快门如果您尚未安装它。
sudo apt-get install shutter
打开“编辑 -> 首选项”下的首选项,然后选择行为选项卡。
选中“登录时启动快门”和“首次启动时隐藏窗口”。参见下面的屏幕截图:
用法
- 确保快门面板图标可见并选择您的窗户或您想要测量的任何东西。
- 单击快门图标并选择“选择”。
- 选择起点并拖动到终点。整个窗口将变暗,除了您的选择。您可以移动边框以获得更“切中要点”的结果。
- Shutter 将提供一个对话框,其中包含所选内容的 X 和 Y 坐标以及大小(即您想要的大小)。请参见下面示例左上角的屏幕截图。
- 缩小后的屏幕截图显示其尺寸为 727px x 367px:
- 最后只需按下Esc即可取消选择并隐藏快门。
- 继续你正在做的事情。
答案3
使用 slop
确定选择区域的另一种简单方法是使用slop
(选择操作),一个命令行实用程序,“用于查询用户的选择并将区域打印到标准输出”。
slop
是一个相对较新的工具,尚未为 Debian/Ubuntu 打包。目前,您必须从源代码编译它:
sudo apt-get install build-essential cmake libxext-dev
git clone https://github.com/naelstrof/slop.git
cd slop
cmake ./
make && sudo make install
安装是最困难的部分。slop
它本身其实非常容易使用。例如,下面的一行代码将提示您选择一个屏幕区域,并将结果显示为通知并将其写入剪贴板:
eval $(slop -t 0 -b 1) && notify-send "Selection info" "Area: ${W} x ${Y}px \n Position: X = ${X}px, Y = ${Y}px" && echo ${W}x${H} | xsel -bi
截屏:
所用命令的快速分解:
slop -t 0 -b 1
- 提示用户选择屏幕区域;不要选择整个窗口(-t 0
),将选择边框设置为 1px(-b 1
)eval $(...)
- 读slop
入变量的输出notify-send ...
- 发送包含选定区域信息的 GUI 通知echo ${W}x${H} | xsel -bi
- 将尺寸复制到剪贴板(需要xsel
→sudo apt-get install xsel
)