使用kivy开发socket通讯程序,始终使用选择的程序
分类:澳门新萄京

先看几张图体会一下:

Spin-Wheel

完成鼠标在网页上兜圈未时记下转动圈数的小程序,每转一圈记录叁回,同一时间即便顺时针方向的。

本文介绍使用C#构建显示屏体贴的方法,那一个荧屏爱戴就是盲目从众视窗系统自带的字幕屏保。

autohotkey官网

kivy是一个开源的Python库,目标是高效支付GUI客商分界面,特别是多点触摸应用程序。

澳门新萄京 1

标题浅析与贯彻

其一小程序的难点在于怎么着精通鼠标完毕了三个连轴转的动作,何况人工使用鼠标划圈时也不会是贰个行业内部的圆,平日都是很不规律的。那一点上自己英特网找了找发掘浏览器的跟骨骨折势实现了。

相同的时间自个儿找了一人完毕的手势识别,是由此计算四个点产生的角度来剖断,笔者起来也感觉这种措施不错。然而本人在实际完结的时候想到了另二个办法。

自家的达成格局:把三个圆分为4个等分,也等于扇区:左上,左下,右上,右下。然后通过记录鼠标经过的点与前多少个点坐标来推断是在哪个扇区,只要四个扇区都经过了就象征划了二个圆。那样做的话对鼠标轨迹需要不高,只要走的趋势对就行了。

澳门新萄京 2

  显示器体贴程序的恢弘名纵然是"scr",但其实是二个可施行的"exe"文件。但他又是多个相比较极其的"exe"文件。上边就来钻探一下,用C#是如何编写荧屏保养

autohotkey官方文书档案

Kivy和python同样享有地利人和的跨平台湾特务性,使用Kivy编写的次序能够在Windows,Linux,和mac OSX系统里头无缝切换运转,何况全数本地显示效果,特别对触摸屏应用的扶助较好,在非触摸屏上也能够匹配鼠标模拟触摸作用。Kivy以致能够运转在android和IOS设备上,拥有极强的跨平台本事。

澳门新萄京 3

如何总括扇区

那么来探问怎么样精晓是在哪些扇区呢?因为鼠标在刚起先时只是在某贰个点上,唯有移动了一段距离后才知道在哪。大家看一下底下的图:
澳门新萄京 4

这中间我标志了12个点,大家能够开掘鼠标在经过这13个点表达便是画了一个圈,对吧。然后大家看那一个点有怎么着规律?

诸如,借使我们鼠标是从P1最早运动的,然后移动到P2,再到P3,能够窥见x轴是越来越大的,同有的时候常候y轴也是越来越大。也正是说大家只要将鼠标移动的轨迹记录下来,然后每一种点举办剖析,只要顺应地点规律的就足以知道为在【右上扇区】。

同理,大家再看P3->P6,则开掘x轴是更上一层楼小,而y轴是更上一层楼大的,说明是【右下扇区】,前边多个扇区由此及彼。

的总体经过。

合罗马尼亚语档中文版

该品种介绍在Ubuntu碰到下搭建Kivy的支付景况,编写GUI程序完毕与服务器通信的例子。

澳门新萄京 5

下一场思索顺时针难题

地方说了各种扇区的乘除格局,但是那一个只要不思虑时针方向是不创立的,上面的测算办法必得是顺时针才行。假诺是逆时针则要扭转总括,所以假诺鼠标逆时针转到,那么也会图谋扇区,只可是总结的扇区就不是上下一心想要的结果啦。

在此作者的消除格局是,在企图了扇区后展开一回检查,假如开采前四个扇区不是连连的就印证时针方向错了,重新开头记录轨道。依旧以上边那个图为例子:

当P1-P3始发运动后,表明在【右上扇区】,然后判定前贰个扇区是不是有通过,若无通过证实当前扇区大概是开始扇区,然后判定后三个扇区是不是有通过,若无通过认证确实是首扇区,是例行的轨迹。反之则印证鼠标转反了。

其他的扇区依此类推。

  一.本文中介绍的顺序设计及运营情形

具体步骤

  1. 下载并安装autohotkey。

  2. 在你感觉合适的地点鼠标右键-新建-autohotkey script(脚本);大概创制贰个其余文件,再把后缀改成ahk也得以

  3. 一个新建的ahk文书档案里面会有这个事物

    #NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
    ; #Warn  ; Enable warnings to assist with detecting common errors.
    SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
    SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.
    

    不用管这几个

  4. 在底下输入

    !j::
       Send, {Down}
    Return
    
    !l::
       Send, {Right}
    Return
    
    !h::
       Send, {Left}
    Return
    
    !k::
       Send, {Up}
    Return
    

    这几句话是把↑改成了alt k;↓为alt j;←为alt h;→为alt l。如若想用ctrl取代alt,就把! 换成^ 。其他的 代表shift,# 代表windows键,更详实的看这个。借使无需另外作用了,直接保存并关闭,跳到第 步。

  5. 投入修改回车的功用。键盘左侧的Capslock(锁定大小写)键使用频率相对照旧不高的,而回车键的地点又有一点坑,改之。直接复制这段这两行。

    $CapsLock::Enter
    
    LAlt & Capslock::SetCapsLockState, % GetKeyState("CapsLock", "T") ? "Off" : "On"
    

    那般,右侧的Capslock键就成了回车,今后一点点的大写字母用shift 字母,借使有恢宏的大写字母的输入,用alt Capslock ,跟在此以前Capslock是均等的。

  6. autohotkey也得以用急速键运维软件,比如

    !o::
       Run, C:Program FilesEverythingEverything.exe
    Return
    

    现在alt o正是开发银行everything的火速键了。一样的,假若想用ctrl代替alt,就把! 换成^ 。其他的 代表shift,# 代表windows键,更详尽的看这个。假诺想运行其余的软件,就把地方的门路换到你想运营的老大软件的路线机就能够了。

  7. 保存,关闭

  8. 在编排好的文件点击鼠标右键,选取编写翻译脚本,也说不定是Compile script,也说不定是Compile脚本,都以同等的。编译之后就能够调换七个.exe的文书,把这几个文件放到开机运营文件夹中(C:ProgramDataMicrosoftWindowsStart MenuProgramsStartUp),每一回开机就足以活动运维了。

  • Kivy开垦条件的搭建
  • 动用Kivy开垦跨平台GUI程序,学会使用Kivy中的简单控件
  • 对GUI事件的响应操作
  • 接纳kivy语言布局分界面
  • 复习Python的socket通讯

实质上很钦佩本身就那样默默忍受了相当多过多年。其实这几个东西在网络小小的一搜,5分钟就会解决。

终极发一下代码

代码笔者丢到github上了,

   (1).微软视窗三千 服务器版

澳门新萄京 6image.png

可是我们大家都在想,未来没时间,小编还要做xxxx事呢,反正多点两下鼠标而已。

   (2)..Net Framework SDK 正式版

开辟Xfce终端(指实验楼在线支付遭受里的顶点),下载并安装 Kivy的有关依赖。

是啊,点两下脊椎结核快的一秒都无须,平凡的人那多个操功效2秒左右。

  二.C#编写字幕显示器保程序的关键步骤以及缓和办法:

$ sudo apt-get install python-setuptools python-pygame python-opengl  python-gst0.10 python-enchant gstreamer0.10-plugins-good python-dev  build-essential libgl1-mesa-dev-lts-quantal libgles2-mesa-dev-lts-quantal python-pip

但是,作者照旧认为难熬。

  (1).设定程序的窗体符合荧屏爱惜的渴求:

遭逢是或不是安装的打听时,输入y,按回车键继续设置。安装时间较长,何况视互联网状态而定。


  由于显示屏保养程序正是三个可施行程序,所以在编辑显示屏拥戴程序的时候,首先依据可实行程序来规划。但显示屏保养有自己的特点。譬喻:显示器珍重都以满载

安装Python扩展包Kivy。

如上是废话,上面才是内容:

万事荧屏的,况且未有无边。显示屏爱惜运转的时候,不可能显得职分栏。在先后设计中落到实处那些特色,关键就在于对窗体的一点品质的设定上。上面是对窗体属性的

$ sudo pip install Cython$ sudo pip install kivy

把下部的剧情复制到记事本里面,然后保留到桌面,文件名写00.reg(这里确定如若reg类型的才行,像.reg.txt这种的是特别的)

设定,就足以满足荧屏爱惜的供给,具体如下:

该扩张包安装时间较长,请耐心等待。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionPoliciesExplorer]
"NoInternetOpenWith"=dword:00000001
"NoFileAssociate"=dword:00000001

this.Name = "ScreenSaver" ;
//窗体运维后无界限
this.FormBorderStyle = FormBorderStyle.None ;
//程序运转后不出示在职分栏上
this.ShowInTaskbar = false ;
//窗体运营后,最大化,充满整个荧屏

设置完Kivy扩张包之后,必得认同该扩大包是或不是安装平常。常用的主意正是在python情形下导入该包举行测量检验。上边以ipython情形张开测验,导入kivy后一切正常,将看到如下输出:

双击桌面上的00.reg ,点规定,到提拔成功导入。

  (2).使得字符在显示屏上不断移动:

澳门新萄京 7此地输入图片的陈说

居功至伟告成,猝然间认为安适了重重。

  达成字符在显示屏上像字符屏保一样持续移动,是通过一个放大计时器来完毕的。不断运动的字符,其实正是三个Label组件。当设定好Label组件要呈现的字符后,

Label控件是GUI控件中最简便易行的一种了,主要的作用正是用来消息显示。我们在shell境况下输入下列代码,就可以调用多个label控件并展现出来。

加一张效果图:

也就设定了在显示器上要运动的字符。沙漏每隔一段时间,都把Label组件的横坐标减去二个定值,那样在定时器的驱动下,Label组件的岗位就调换了,带来的视

import kivyfrom kivy.app import App from kivy.uix.button import Label class MyApp: """docstring for MyApp""" def build: return Label(text='Hello World')if __name__ == '__main__': MyApp

澳门新萄京 8

觉效果,就是字符不断移动。

上边这段代码展现的结果如下图所示:

  当Label组件的地点已经移动到显示屏的外部以往,这是就有把Label组件的横坐标回复到起初值(即:显示器的最侧面),然后判定Label组件的纵坐标是还是不是位于屏

澳门新萄京 9这里输入图片的描述

幕的最上端,倘诺在顶上部分,则把纵坐标的职责重新载入参数在中心;假设在个中,则重新设置在尾部;借使在底层,则重新设置在最上端。经过了这一个判别,字符既能够完成从右往左

咱俩来深入分析一下方面包车型客车代码。前两行是从Kivy中程导弹入应用软件类和Lable类,以便大家在后边使用。大家的程序新建了一个类,这么些类承接了应用软件类,並且定义了build方法,在build方法中,重回一个Lable实例,在Lable上显得字符串“Hello World”

挪动,还能转换字符步入荧屏的岗位。进而也加多了荧屏珍贵的原委。其实要兑现那个决断,首先还必须知道显示屏的做事区域,因为独有先清楚显示屏的行事区域

我们看到全体荧屏都以其一大Lable并且以原野绿为背景。那是因为默许的窗口大小里独有Lable一个控件,所以它铺满了窗口。再稳重观察发掘窗口的名字是“My”,这正是我们定义的类的名字去掉“APP”,这种概念格局也是Kivy强制要求的,那是为着便利kivy语言查找到客户定义的类,大家就要未来介绍那上边知识。运维大家的GUI程序,只需求调用大家定义的类中的run方法,分明这些主意承接于父类应用软件。

,在能够落到实处对Label组件的横坐标和纵坐标的设定职业。上面正是达成此步骤地切实代码:

接下去大家实施一下Button控件的接纳。Button控件相比Lable控件,除了外观以外,还应该有逻辑部分要处理。大家先把逻辑部分放一边,只看展现的有的。在shell窗口中输入程序:

//获得计算机显示屏的行事区域
Rectangle ssWorkArea = Screen.GetWorkingArea ( this ) ;
lblMarquee.Location = new Point ( ssWorkArea.Width - iDistance ,
lblMarquee.Location.Y ) ;
//突显标签
lblMarquee.Visible = true ;
// 增添2个象素点,你能够由此改变speed的值来改变标签的移动速度
iDistance = speed ;
// 假使标签已经走出荧屏,则把标签的职位重一贯到荧屏的左手
if ( lblMarquee.Location.X <= -( lblMarquee.Width ) )
{
//Reset the distance to 0.
iDistance = 0 ;
//判定标签的职分是或不是在最上部,假使在,则重平昔到宗旨
if ( lblMarquee.Location.Y == 0)
lblMarquee.Location = new Point ( lblMarquee.Location.X , ( ssWorkArea.Height / 2 ) ) ;
//决断标签的职分是还是不是在中心,如若在,则重一向到后面部分 
else if ( lblMarquee.Location.Y == ssWorkArea.Height / 2 )
lblMarquee.Location = new Point ( lblMarquee.Location.X , ssWorkArea.Height - lblMarquee.Height ) ;
//重一向到顶端 
else
lblMarquee.Location = new Point ( lblMarquee.Location.X , 0 ) ;

from kivy.app import Appfrom kivy.uix.button import Buttonclass TestApp: def build: return Button(text='Hello World')TestApp

  (3).检查实验键盘、鼠标状态,明确退出荧屏保护程序:

代码运营的效果如下图:

  在显示器爱慕运维的时候,当键盘被按动,或然鼠标移动,显示屏尊敬都会停业。在骨子里的前后相继设计中,检测键盘是不是被按动,通过"KeyDown"事件就能够判明。在

澳门新萄京 10那边输入图片的描述

次第中,剖断鼠标是不是移动的思绪是由此叁个全局变量记录下,程序刚刚运行的时候的鼠标的职位(即:X和Y),当鼠标移动的时候,判别移动后的岗位和笔录的

看起来和Label未有啥样界别,可是当大家用鼠标点击窗口内部时,按键被按下,并改为水泥灰:

任务是不是有出入,借使有出入,就关门屏保。下边代码功效正是检查测试鼠标移动,并终止显示屏爱惜,具体如下:

澳门新萄京 11此地输入图片的陈述

// 把鼠标刚刚早先移动的职务给记录下来
if ( ixStart == 0 && iyStart == 0 )
{
ixStart = e.X ;
iyStart = e.Y ;
return ;
}
//推断自显示屏爱慕程序运转后,鼠标的岗位是或不是改换
else if ( e.X != ixStart || e.Y 使用kivy开发socket通讯程序,始终使用选择的程序打开这种文件。!= iyStart )
{
Cursor .Show ( ) ; 
timerSaver.Enabled = false ;
Application .Exit ( ) ;
澳门新萄京,};

鉴于大家从未增多任何逻辑,所以点击开关后也尚无其他动作被施行。

  在那之中"ixStar"和"iyStart"正是记录程序运维的时候,鼠标的前奏地点。

下边大家来为Button增多callback函数来响应Button被按下时的动作。作为示范,大家在按键按下时打字与印刷一行语句来突显开关被按下了。

  (4).对Windows对荧屏拥戴设定参数的响应:

from kivy.app import Appfrom kivy.uix.button import Buttondef callback: print('The button <%s> is being pressed' % instance.text)bt1=Button(text='Hello World')bt1.bind(on_press=callback)class TestApp: def build: return bt1TestApp

  当显示器爱慕投入到Windows系统后,你就足以经过Windows系统来设定显示屏爱戴的天性了,由于大家制作的那几个显示器拥戴,未有可供设置的选项,但也要对

率先大家定义个叁个callback函数,传入参数为多个控件实例,在函数体内部,打字与印刷这几个空间的text属性。接下来,实例化贰个按键控件,与地点不一致的是,这一次的控件增添了贰个绑定按下后的回调函数。在大家的类中的build方法中,直接回到大家实例化的bt1就可以。该段代码的周转效果如下,图中式茶食击了数十次按钮:

Windows的"设置"开关举办响应。而要完结这种响应,所用的学识正是在Windows系统中按动"设置"开关,对显示器爱戴进行设定期,其实也就对屏保程序传递"/c"字

澳门新萄京 12此地输入图片的描述

符。而要设定口令,则会传递"/a"字符,据此,能够博得代码:

kivy库具有和睦的布局语言,名字就叫“kv语言”。那是一种恍若于标识语言的布局语言,方便开拓者将GUI分界面和逻辑分离。那么kivy是怎么将python脚本和kv布局联系到一块的吧?还记得大家最起始定义类的时候,用一种特意的命名格局么?类的名字最终必得是APP结尾,比方大家的是“My应用程式”。那么大家在编写制定界面布局的时候,相应的kv文件必得命名称叫My.kv,不可小视乱起名字,只好用那个,别的名字不认。

if (args [ 0 ].Substring ( 0 , 2 ).Equals ( "/c" ) )
{
MessageBox.Show("此显示屏爱抚并没有可供设置的选项!","用C#创造显示器爱慕" ,
MessageBoxButtons.OK ,MessageBoxIcon.Information ) ;
Application.Exit ( ) ;
}
else if ( args [ 0 ] == "/a" )
{
MessageBox.Show("此显示器爱护没有可供设定口令的选项!","用C#创建显示器爱抚" ,
MessageBoxButtons.OK ,MessageBoxIcon.Information ) ;
Application.Exit ( ) ;
}

kv语言也如约python的对齐原则,顶层控件顶在最左,子控件在其下方空五个空格键,子控件的习性持续空四个空格。每个子控件皆有本身并世无两的id,方便在前后相继中访谈其性质,比如上边那么些漫威漫画一级英雄的布局:

  三.总结:

<Marvel> Label: id: loki text: 'loki: I AM YOUR GOD!' Button: id: hulk text: "press to smash loki" on_release: root.hulk_smash()

  由于显示屏爱惜都是Windows程序,所以编写翻译的时候,要发生Windows程序,编写翻译的吩咐如下:

对应的python是:

    csc /t:winexe screen.cs

class Marvel(BoxLayout): def hulk_smash: self.ids.hulk.text = "hulk: puny god!" self.ids["loki"].text = "loki: >_<!!!" # alternative syntax

  在科学编写翻译"Screen.cs"后,能够博得"Screen.exe"文件,把"Screen.exe"改名叫"Screen.scr",并拷贝到Windows的"System32"目录中去。至此这几个字符屏保

这段代码其实是复仇者结盟中的一个有个别,洛基跟地球人说:笔者是你们的神!然后绿一代天骄出现,一手掌把洛基扇到了一派,然后一脸不屑地说了一句:弱爆了的神!洛基的神情:>_<!!!

就完了了从编写到安插的凡事干活了。

代码不会细小略,我们能够团结执行一向下探底访效果。关于kv语言越多的牵线及用法,可参照kivy的官方文书档案

该段代码不能够一向运营,完整的代码如下:

#-*- coding:utf-8 -*-from kivy.app import Appfrom kivy.uix.boxlayout import BoxLayoutfrom kivy.uix.scatter import Scatterfrom kivy.uix.carousel import Carouselfrom kivy.uix.button import Buttonfrom kivy.uix.modalview import ModalViewfrom kivy.uix.scrollview import ScrollViewclass Marvel(BoxLayout): def hulk_smash: self.ids.hulk.text = "hulk: puny god!" self.ids["loki"].text = "loki: >_<!!!" # alternative syntaxclass testMarvelApp: def build: return Marvel()if __name__ == '__main__': testMarvelApp

还会有别忘了大家的布局文件,注意因为python文件中的类名是testMarvelApp,所以kv文件的名字只可以是testMarvel.kv:

<Marvel> Label: id: loki text: 'loki: I AM YOUR GOD!' Button: id: hulk text: "press to smash loki" on_release: root.hulk_smash()

这段程序的实施效果如下:

澳门新萄京 13此间输入图片的叙说

点击按键后,效果为:

澳门新萄京 14此地输入图片的叙说

为了和服务器通信,大家要求有个发送框,贰个接收框和三个发送按键。使用kv语言布局的次序如下:

#:kivy 1.8.0myCarousel:<myCarousel>: loop:True id:my_Carousel text_input5:text_input5 text_input6:text_input6 text_input7:text_input7 connect:connect canvas: Rectangle: size: self.size source:'022.jpg' BoxLayout: orientation: "vertical" BoxLayout: height: "40dp" # size_hint_y: None Label: text: 'ip:' size_hint_x: 25 # TextInput: id: text_input5 size_hint_x: 50 text:'192.168.1.21' focus: True multiline: False Button: id:connect text: "Connect" size_hint_x: 25 on_press: app.connect_server() BoxLayout: Label: size_hint_x: 5 TextInput: id: text_input7 size_hint_x: 90 focus: True multiline: True Label: size_hint_x: 5 BoxLayout: height: "40dp" # size_hint_y: None Label: text: 'message:' size_hint_x: 25 # TextInput: id: text_input6 size_hint_x: 50 focus: True multiline: False Button: text: "Send" size_hint_x: 25 on_press: app.send()<CTextInput@TextInput> on_focus: screen = self.parent.parent.parent.parent if screen.parent: screen.focused = self

这段kv语言生成的分界面在windows下看起来是其同样子的:

澳门新萄京 15此间输入图片的陈说

有心人看代码的同窗料定开采了那一个布局是有个背景图片的,然而被消息框挡住了看不见。不妨,kivy框架的叁个特意吸引人的地点就是它完全面向触屏设备,即使在尚未触摸屏的windows计算机上,也得以用鼠标模拟手指的触摸操作。我们在分界面边缘单击鼠标按住,向左拖动,就能够发觉在那分界面之后,美眉暗藏:

澳门新萄京 16此处输入图片的陈述

该背景图片请从调控台下载:

$ wget http://labfile.oss.aliyuncs.com/courses/755/022.jpg

上面详细的介绍了采纳kivy开辟socket通信程序的主要代码以及功用达成,关于客商端、服务端以及测试申明等,这里就不再汇报了,点击【使用kivy开辟socket通讯程序】就可以查看完整的付出文书档案了~

对应上述分界面文件的python代码,程序的成效是当界面上的总是按键按下后,连接服务器。连接成功后,将发送框内的文书发送给服务器。

为了声明程序的效果,供给编写制定一个非常轻巧的服务器端程序。

也便是围绕测验了socket通信。

如上内容全方位截选自实验楼项目教程【使用kivy开辟socket通信程序】,感兴趣的伴儿可以点击链接查看全数文书档案~

本文由澳门新萄京发布于澳门新萄京,转载请注明出处:使用kivy开发socket通讯程序,始终使用选择的程序

上一篇:如何解决电脑慢的情况,电脑开机慢该怎么办 下一篇:没有了
猜你喜欢
热门排行
精彩图文