-
用的是ArkTs,要求这三个模式不能同时打开,要怎么做
-
目前乾坤终端安全检测到一个病毒就会弹窗一次,如果同时检测到多个病毒,用户需要多次点击关闭按钮才能将全部弹窗关闭,费时费力。能否考虑将这些弹窗合并在一起?参考ESET/Avast那样,可以一次性全部关闭。
-
上传组件上传rar文件,报文件IO异常是什么问题?测试了下,压缩rar4格式没问题,rar格式报文件IO异常。
-
51CTO.com快译】什么是PostgreSQL GUI?它如何帮助企业管理PostgreSQL数据库?人们需要了解2021年一些优秀的PostgreSQL GUI软件。PostgreSQL是一种先进的开源对象关系数据库管理系统,可以支持SQL和JSON查询。根据Stack Overflow公司的一项调查,PostgreSQL是目前仅次于MySQL的第二大常用数据库。在对7万多名受访者的调查中,超过40%的人表示更喜欢采用PostgreSQL,而不是SQLite、MongoDB、Redis等其他数据库。作为Postgres用户,有两种方法来管理数据库:通过命命令行界面(CLI)编写查询(并非所有人都喜欢)。使用Postgres GUI,该界面由PostgreSQL管理工具之一构建。Postgres GUI比命令行界面(CLI)方便得多。此外,它还可以提高企业的工作效率。以下了解一下Postgres GUI和最常用的PostgreSQL GUI工具。什么是PostgreSQL GUI?PostgreSQL GUI是PostgreSQL数据库的管理工具。它允许企业或数据库用户查询、可视化、操作、分析其Postgres数据。还可以通过Postgres GUI访问数据库服务器。很多用户更喜欢Postgres GUI而不是CLI的主要原因是:漫长的学习曲线和复杂的使用流程。CLI界面不便于使用。控制台提供的信息不足。难以通过控制台浏览和监控数据库。反过来,使用Postgres GUI可为企业提供以下优势:快捷方式可用于更快、更简单的工作。丰富的数据可视化机会。可以访问远程数据库服务器。轻松地访问操作系统。优秀的PostgreSQL GUI软件对于某些用户来说,以Postgres为中心的pgAdmin并不是目前唯一可用的Postgres GUI工具,这可能出乎人们的意料。以下了解一下如今流行的一些PostgreSQL GUI管理工具。也许其中之一将会显著简化Postgres数据库管理。1.pgAdminpgAdmin是一个开源的跨平台PostgreSQL GUI工具。优点:与Linux、Windows、macOS兼容。允许同时使用多个服务器。CSV文件导出。查询计划功能。能够通过仪表板监控会话、数据库锁定。SQL编辑器中的快捷方式,使工作更方便。内部程序语言调试器旨在帮助代码调试。完整的文档和充满活力的社区。缺点:与一些付费的工具相比,其用户界面运行缓慢且不直观。笨重。不易上手。企业需要高级技能才能同时使用多个数据库。2.DBeaver这是一个支持多数据库的开源PostgreSQL管理工具。优点:跨平台。支持80多个数据库。作为可视化查询生成器,允许企业在没有SQL技能的情况下添加SQL查询。具有多个数据视图。CSV、HTML、XML、JSON、XLS、XLSX中的数据导入/导出。高级数据安全性。全文数据搜索和将搜索结果显示为表格/视图的能力。提供免费计划。缺点:与竞争对手相比运行速度较慢。更新过于频繁,令人烦恼。在闲置一段时间后,DBeaver会断开与企业的数据库的连接。企业需要重新启动应用程序。3.Navicat这是一个非常直观的Postgres数据库管理图形工具。Navicat并不是开源的工具。优点:非常容易和快速安装。获得Windows、Linux、macOS、iOS支持。方便快捷的可视化SQL构建器。具有代码自动完成功能。数据建模工具:操作企业的数据库对象、设计模式。作业调度程序:运行作业,在作业完成时获得通知。内置团队协作。数据源同步。以Excel、Access、CSV和其他格式导入/导出数据。通过SSH隧道和SSL确保数据保护。与亚马逊、谷歌和其他公司的云计算服务商合作。缺点:GUI工具性能不高。与竞争对手相比价格偏高。一个许可证只限于一个平台(用户需要PostgreSQL和MySQL两个单独的许可证)。许多高级功能需要时间来学习如何使用。使用不方便:添加行时需要更新应用程序。4.DataGrip由JetBrains构建的支持多个数据库的高级IDE。优点:跨平台(Windows、macOS、Linux支持)。简单的架构导航。带有查询控制台的可自定义用户界面(UI),可确保企业的工作进度安全。提示错误检测。内置版本控制系统。MySQL、SQLite、MariaDB、Cassandra和其他数据库支持。清晰的报告,能够将它们与图表和图形集成。强大的自动完成功能,建议相关代码完成。缺点:相当昂贵。消耗内存。复杂的错误调试过程。DataGrip和JetBrains具有长期的学习曲线。难以用作基于云计算的管理Web应用程序。不适合同时管理多个数据库。5.HeidiSQL这是一个开源Postgres(不仅仅是)GUI工具。现在仅支持Windows。优点:易于安装,与竞争对手相比非常轻巧。PostgreSQL、MySQL、Microsoft SQL Server、MariaDB支持。能够在一个窗口中连接和管理多个数据库服务器。从一个数据库或服务器到另一个数据库或服务器的直接SQL导出。通过简单易用的网格进行批量表格浏览和编辑。代码完成和语法突出显示功能。活跃的支持社区定期增强这个GUI工具。网格和数据导出为Excel、HTML、JSON、PHP文件。100%加密数据连接。缺点:不能跨平台使用(仅支持Windows)。问题频繁出现。没有程序语言调试器来简单地进行代码调试。6.TablePlus用于管理SQL和NoSQL数据库的原生GUI软件。TablePlus并不是开源的工具。优点:根据用户的反馈提供高性能和速度。高度可定制的用户界面:根本无需求助于Mojave。支持语法突出显示。快捷方式可以节省时间并提高效率。由于客户端-服务器连接的端到端加密,确保了更高级别的数据安全。缺点:当企业使用PostgreSQL以外的其他数据库时,经常出现用户体验不佳的问题。价格昂贵。而免费试用的功能进行严格限制。客户支持还有很多需要改进的地方。7.OmniDB这是一个简单的PostgreSQL开源GUI管理工具。优点:跨平台(获得Windows、Linux、macOS支持)。获得PostgreSQL、Oracle、MySQL、MariaDB支持。与某些替代品相比,响应速度快且更加轻巧。SQL自动完成功能。具有语法高亮显示功能。能够创建可定制的图表以显示相关的数据库指标。内置调试功能。缺点:如果同时使用多个数据库,则不是很适合。缺乏支持和学习文件。结语当企业选择GUI软件时,应该基于以下几个方面做出最终决定:团队规模。操作系统。数据库类型。计划使用的多个数据库。DBeaver、DataGrp和HeidiSQL更适合个人使用的数据库。由于具有GUI工具协作功能,Navicat是团队的最佳选择。除了支持Windows的HeidiSQL之外,几乎所有提到的工具都是跨平台的。pgAdmin以PostgreSQL为中心,作为PostgreSQL GUI工具的功能相当强大。但是采用可视化的内部工具构建器有UI Bakery。如果需要将多个不同的数据源集成在一起,那么这个低代码开发平台非常有用——无论是数据库、第三方工具还是API。而企业不必只局限在一个生态系统中。UI Bakery不是Postgres原生的。但是,它的数据可视化功能允许企业根据从PostgreSQL、MySQL、MS SQL Server、MongoDB、Redis、Salesforce和一系列其他数据库和应用程序中提取的数据,构建真正美观、易懂的图表、表格和图形。企业还可以使用预构建的用户界面(UI)组件和模板,避免从头开始构建,并节省更多的时间。如果企业不确定内部工具构建器适合自己的特定需求,可以继续进行尝试。整个GUI工具开发过程可能需要数小时的时间,有时甚至低至数分钟,具体取决于企业的开发经验。pgAdmin和其他经典的GUI软件似乎正在失去吸引力。Postgres和其他数据库管理的低代码方法使企业可以在更短的时间内获得更好的结果。原文标题:Top 8 PostgreSQL GUI Software in 2021,作者:Ilon Adams【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】
-
DLL load failed while importing win32gui: The specified modulewindows server 2008 运行Studio2.17失败,错误提示:[2022-01-21 10:31:56] robot finished with exception, exception details: DLL load failed while importing win32gui: The specified module could not be found.Traceback (most recent call last):File "./antrobot.py", line 121, in <module>File "./com/huawei/antrobot/framework/linux_adaptation/adapter.py", line 133, in runFile "./com/huawei/antrobot/framework/linux_adaptation/adapter.py", line 92, in releaseImportError: DLL load failed while importing win32api: The specified module could not be found.解决方法studio安装路径下\python\Lib\site-packages\pywin32_system32pythoncom39.dllpywintypes39.dll把这两个文件copy到如下路径即可C:\Windows\System32——————如果如下方法都无法解决,可以留言另外可以参考这个解决方法步骤 1 使用浏览器访问如下URL地址,下载并安装“Visual C++ Redistributable for Visual Studio 2015”。URL地址:https://www.microsoft.com/en-us/download/details.aspx?id=48145或者运行在安装目录里/Robot/cfg/cv/vc_redist.x64.exe步骤 2 根据PC机的操作系统版本,使用浏览器如下URL地址,下载并安装“KB3063858”操作系统补丁。 32-bit:https://www.microsoft.com/en-us/download/details.aspx?id=47409 64-bit:https://www.microsoft.com/en-us/download/details.aspx?id=47442步骤 3 重启PC,使得安装的软件或操作系统补丁生效。步骤 4 重新运行脚本,如上述步骤仍无法解决问题,请联系华为工程师进行定位分析和处理。还可以参考这个帖子https://bbs.huaweicloud.com/blogs/282058
-
【功能模块】编译GUI demo,使用了GUI组件【操作步骤&问题现象】1、在组件中配置了GUI组件、GUI demo2、芯片选择了STM32F769I3、编译的时候提示没有lvgl.h头文件,进去到组件中真的没有这个库,组件里面没有响应的库和代码【截图信息】【日志信息】(可选,上传日志内容或者附件)
-
【功能模块】编译GUI demo,使用了GUI组件【操作步骤&问题现象】1、在组件中配置了GUI组件、GUI demo2、芯片选择了STM32F769I3、编译的时候提示没有lvgl.h头文件,进去到组件中真的没有这个库,组件里面没有响应的库和代码【截图信息】【日志信息】(可选,上传日志内容或者附件)
-
盘点本周AI科技热点热点一:参加这场大佬云集的开发者大会,还能抽RTX3060,请叫我「良心之心」2021 上半年,人工智能领域依然发展迅猛,业界先后出现了很多吸引广大开发者关注的大事件。大规模中文预训练语言模型迎来井喷式发展,数百亿、上千亿乃至上万亿参数的中文 NLP 模型纷纷出现,预示着基于大模型的 AI 时代的到来;鸿蒙手机系统正式发布,这一支持多设备、多硬件的操作系统向全球第三大操作系统发起挑战;MIPS 技术公司宣布放弃继续设计 MIPS 指令集,转向开源架构 RISC-V,由此彰显了该架构在全球芯片开发商中的崛起态势,并证明了开源的重要性。此外,类脑芯片和量子领域也出现了一些引人瞩目的研究成果和大事件,如复旦大学研制国内首款无线脑机接口芯片和清华大学成立量子信息班……所有这些都向开发者们展示着人工智能领域的欣欣向荣,但 AI 技术的研发与应用落地永不停歇,是一个持之以恒的课题。以大规模预训练语言模型为例,如何实现其商业化落地并创造价值更是值得探讨的话题。其他领域亦是如此。原文链接:https://www.jiqizhixin.com/articles/2021-06-25-9 热点二:年轻的LeCun、吴恩达长啥样?升级版StyleGAN告诉你来自以色列特拉维夫大学的研究者在生成图像方面又有了新的升级,所用方法在保留源图像身份的同时,在细节编辑上实现了更精细的效果。英伟达提出的风格迁移模型 StyleGAN 系列,一直是人们用来进行各类脑洞画图实验的流行工具。从生成二次元「老婆」,照片修图,到人物的卡通化,最近几年基于这种技术的应用不一而足。然而 StyleGAN 也一直有着自己的不足,近年来的各种改进也未能让其在反向生成、细节编辑上实现精细的效果。什么时候我们才能让 AI 随心所欲地修改真人照片呢?今年 6 月,这样的研究终于出现了。在以色列特拉维夫大学的论文《Pivotal Tuning for Latent-based Editing of Real Images》中,研究人员通过添加一个简短的训练过程,让 StyleGAN 有了焕然一新的升级。原文链接:https://www.jiqizhixin.com/articles/2021-06-25-7 热点三:让机器学习设计手机GUI,这合理么?图形用户界面(Graphical UserInterface,简称 GUI,又称图形用户接口),为用户和计算机桌面程序,手机类移动端软件,和在线网站提供了可视化的交互方式。设计优秀的GUI颜值在线且简洁易用,吸引大量忠实用户。但即便对经验丰富的GUI设计者,新App与GUI的创作过程也是非常困难且耗费时间的,例如交互流畅、通用、简洁、美观、风格连贯等与设计相关的规则和标准是设计者们需要遵循的。而且为了紧跟时代潮流,不断从其他的资源(如Dribbble)寻找最新最热的设计来获取灵感也为设计者们带来了额外巨大的工作量。然而,GUI设计人员在公司中的人数有限,如此复杂繁重的GUI设计工作经常需要程序开发人员“顶上”。在一项对超过5700名软件开发者的调查中,51%的人反映他们从事App的GUI设计任务要比其他开发工作多,且每过几天就要参与。但是软件程序开发者往往缺少足够的专业设计经验与设计审美。所以经常在刚刚起步或小规模的公司中,缺少GUI设计经验的程序开发者们要通过参考网上现有的GUI来规划实现他们自己的GUI设计。原文链接:https://www.jiqizhixin.com/articles/2021-06-23-9 热点四:RNN 用于生物医学全息成像,速度加快50倍数字全息成像是生物医学成像中常用的显微镜技术。用于揭示样本的丰富光学信息。常见的图像传感器只对入射光的强度做出响应。因此,重建涉及光学相位检索的传感器以数字方式记录的全息图的完整 3D 信息,一直是数字全息术中一项耗时且计算量大的挑战性任务。近日,加州大学洛杉矶分校的研究团队开发出一种新的全息相位检索技术,可以快速重建样品的微观图像,与现有方法相比,可加速50倍。研究结果首次证明了使用循环神经网络(RNN)进行全息成像和相位恢复,所提出的框架将广泛适用于各种相干成像模式。该研究于5月26 日以「使用循环神经网络进行相位恢复和自动对焦的全息图像重建」(Holographic Image Reconstruction with Phase Recovery and Autofocusing Using Recurrent Neural Networks )为题发表在《ACS光子学》(ACS Photonics)杂志上。原文链接:https://www.jiqizhixin.com/articles/2021-06-23-2 热点五:CVPR 2021奖项出炉:最佳论文花落马普所,何恺明获提名,首届黄煦涛纪念奖颁布昨晚,CVPR 2021 公布了最佳论文、最佳学生论文等奖项。德国马普所和蒂宾根大学的研究者获得了最佳论文奖,加州理工和西北大学的研究者获得最佳学生论文奖。此外,FAIR 包括何恺明在内的两位华人学者获得最佳论文提名,而另一位华人学者、华盛顿大学计算机系硕士研究生林山川(Shanchuan Lin)获得了最佳学生论文提名。6 月 19 日,CVPR 2021 在线上拉开帷幕。今年,大会一共接收了 7039 篇有效投稿,其中进入 Decision Making 阶段的共有约 5900 篇,最终有 1366 篇被接收为 poster,295 篇被接收为 oral,其中录用率大致为 23.6%,略高于去年的 22.1%。原文链接:https://www.jiqizhixin.com/articles/2021-06-22-8 热点六:DNA逻辑电路可能是医学的未来,这个程序降低了DNA逻辑电路的设计门槛传统电子元件制造的雕刻技术将很快达到物理极限。计算机应对不同医学检测环境时,需要环境组件与计算组件进行连接,包括化学组件、生物组件。所以科学家亟须研发新的计算技术。于是,科学家提出了一个巧妙的想法,以合成的脱氧核糖核酸(DNA)分子作为底物来存储信息,并利用DNA的分子扩增机制完成计算。然而,DNA计算项目的实际运算过程相当复杂;我们需要新工具在高层次结构上描述它们,并利用当前的计算资源设计替代方案。南马托格罗索联邦大学(UFMS)计算学院的Renan Marks团队研发了一种名为DNAr-Logic 的算法系统。DNAr-Logic能够模拟概括,具有数百个反应的复杂数字逻辑电路。用户设计数字逻辑电路时,无需手动编写所有化学反应网络(Chemical reaction network ,CRN),更无需深入了解化学反应网络和 DNA 链置换技术(DNA Strand Displacement ,DSD)。原文链接:https://www.jiqizhixin.com/articles/2021-06-22-2 热点七:AI专用领域之一:声音、相机陷阱用于野生动物研究和保护近年来,生物多样性危机,即世界范围内的物种损失和生态系统的破坏问题,正在全球范围内持续加速,生物多样性正在迅速减少。例如,许多物种如老虎和犀牛,由于非法采伐(即偷猎)而面临灭绝的危险。研究动物的分布、运动和行为对解决环境挑战至关重要,如疾病的传播、入侵物种、气候和土地使用的变化等等。因此,迫切需要部署可扩展和具有成本效益的监测技术,以更好地模拟和了解野生动物及其居住的环境。随着人工智能的快速发展,人工智能技术也被引入到野生动物研究和保护中。哈佛大学、谷歌、英特尔、DeepMind,以及国内的快手、阿里等等众多研究机构、企业,甚至包括一些政府机构,都已经投入到了这项工作中,且研发和部署了相应的产品。我们在这篇文章中以两篇文章为基础,分别讨论了声音、相机陷阱(camera traps)是如何实现野生动物监测的。此外,最后一篇文章还讨论了如何利用人工智能技术辅助解决野生动物偷猎(wildlife poaching)的问题,即对偷猎者轨迹的预测问题。原文链接:https://www.jiqizhixin.com/articles/2021-06-20-3 总结:每周七个小热点,帮助各位了解最新科技资讯。欢迎大家阅览评论哦,也可以留言发表您的关注点,我们根据大家的关注点,推送更多您喜欢的资讯。
-
一:什么是PWM脉宽调制技术,全称为脉冲宽度调制,英文名称为Pulse Width Modulation,简写为PWM,是一种利用微处理器来完成对模拟电路控制的一种技术,其具有操作简单、灵活性好、反应速度快等诸多特点,现已在通信、测量、功率变换、功率控制等多个方面都得到了广泛的应用原理:脉宽调制技术是通过对逆变电路开关的通断控制来实现对模拟电路的控制的。脉宽调制技术的输出波形是一系列大小相等的脉冲,用于替代所需要的波形,以正弦波为例,也就是使这一系列脉冲的等值电压为正弦波,并且输出脉冲尽量平滑且具有较少的低次谐波。根据不同的需求,可以对各脉冲的宽度进行相应的调整,以改变输出电压或输出频率等值,进而达到对模拟电路的控制二:频率和占空比频率:物质在1秒内完成周期性变化的次数叫做频率单位:HZ单位换算:1kHz=1000Hz,1MHz=1000000Hz 1GHz=1000MHz周期:频率的倒数占空比:是指在一个脉冲循环内,通电时间相对于总时间所占的比例如图:一个周期内高电平所占的比就是占空比三:单片机怎么产生PWM调制对于51单片机而言,用定时器来产生pwm思路如下:我们知道单片机的时钟脉冲,那怎么利用PWM呢,其实就是通过定时器来改变一个周期内高低电平的占空比来实现PWM的调制.例如我们把电平置为高电平持续1ms,然后然低电平持续3毫秒,这样就能产生一个周期为4毫秒的占空比为25%的PWM波了.单片机的晶振是11.092MHZ方便计算取12MHZ.那么他的时钟周期就是1/12us,机器周期就是1us. 那么如何用定时器怎么来产生.对于定时器0来说定时器是16位的寄存器,来一个脉冲加一,加到65535时就会溢出.所以定时器0从0开始计数到65535,一个微妙就记一次数.那么要溢出则需要65535us.举个例子:我们要产生一个100HZ的PWM且占空比25%,用定时器怎么完成.首先100HZ的周期是10ms.也就是持续一个周期的时间是10ms,那么占空比25%就让高电平持续2.5个ms,低电平持续7.5个ms我们让定时器0产生10ms需要计数10000,因为定时器每计数一次是1us,那么10000次就是10ms,我们把这10000分成100分,就相当与把一个脉冲周期分成100分而占空比25%即高电平占了25份,低电平就占了75份.那么定时器就要每100us就要中断一下那么中断要装的初值就是TH0=(65535-100)/256,TL0=(65535-100)%256.然后在中断里面设置一个变量在这个变量在0到25期间是高电平否则是低电平就可以实现题目要求.4:pwm的应用通过按键改变小灯的亮度呼吸灯电机调速这里先介绍以下第一个:#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit L1=P0^0;sbit S7=P3^0;uchar aa=0;pwm=0;cont=0;void delay(uint tt){ while(tt--);}void HC_138(){ P2=(P2&0X1F)|0X80;}void scankey(){ if(S7==0) { delay(100); if(S7==0) { switch(cont) { case 0: L1=0; TR0=1;pwm=10; cont=1;break; case 1: pwm=50; cont=2;break; case 2: pwm=90; cont=3;break; case 3: L1=1;TR0=0;cont=0;break; } while(S7==0); } }}void INIT_t0(){ TMOD=0X01; TH0=(65535-100)/256; TL0=(65535-100)%256; ET0=1; EA=1; }void servicet0() interrupt 1{ TH0=(65535-100)/256; TL0=(65535-100)%256; aa++; if(aa==pwm) { L1=1; } else if(aa==100) { L1=0; aa=0; }}void init(){ P2=(P2&0X1F)|0Xa0; P0=0x00;}void main(){ init(); HC_138(); P0=0XFF; INIT_t0(); while(1) { scankey(); }}
-
第09课 GUI-对话框================================================简介: JDialog类创建的对话框必须要依赖于某个窗口。 对话框分为无模式和有模式两种。 有模式的对话框:当这个对话框处于激活状态时,只让程序响应对话框内部的事件, 而且将堵塞其它线程的执行,用户不能再激活对话框所在程序中的其它窗口,直到该对话框消失不可见。 无模式对话框:当这个对话框处于激活状态时,能再激活其它窗口,也不堵塞其它线程的执行。 ------------------------------------------------------------------------------消息对话框----------------------------------------------javax.swing包中的JOptionPane类的静态方法: public static void showMessageDialog( Component parentComponent, String message, String title, int messageType)------------------------------------------------------------输入对话框-------------------------------------------可以用javax.swing包中的JOptionPane类的静态方法: public static String showInputDialog(Component parentComponent, Object message, String title, int messageType)-----------------------------------------------------------------------------------------确认对话框---------------------------------------------------------------------可以用javax.swing包中的JOptionPane类的静态方法:public static int showConfirmDialog(Component parentComponent, Object message, String title, int optionType)------------------------------------------------------------颜色对话框-----------------------------------------------------------------------------可以用javax.swing包中的JColorChooser类的静态方法: public static Color showDialog(Component component, String title, Color initialColor)----------------------------------------------------------------------------------------------------自定义对话框--------------------------------------------------------------------------创建对话框与创建窗口类似,通过建立JDialog的子类来建立一个对话框类,然后这个类的一个实例,即这个子类创建的一个对象,就是一个对话框。对话框是一个容器,它的默认布局是BorderLayout,对话框可以添加组件,实现与用户的交互操作。 ---------------------------------------------------------------------------构造对话框的2个常用构造方法JDialog() 构造一个无标题的初始不可见的对话框,对话框依赖一个默认的不可见的窗口,该窗口由Java运行环境提供。JDialog(JFrame owner) 构造一个无标题的初始不可见的无模式的对话框,owner是对话框所依赖的窗口,如果owner取null,对话框依赖一个默认的不可见的窗口,该窗口由Java运行环境提供。
-
主要内容: ◆ Java事件处理机制 ◆ 常见事件及处理接口 ◆ Java绘图机制▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ Java事件处理机制===============================================简介: Java事件处理机制是一种基于授权的事件处理机制。-----------------------------------------------------------------------------------------------------------------------事件处理中的主要概念: 事件源,能够产生事件的对象都可以成为事件源 . 监视器,负责监视事件源的对象,当事件源产生事件时,监视器将调用方法对事件进行处理。 事件源通过调用相应的方法将某个对象注册为自己的监视器。 对于文本框,这个方法是:addActionListener(监视器); java语言中监视器都是使用接口来实现的。 事件源注册监视器之后,相应的操作就会导致相应的事件的发生,并通知监视器,监视器就会作出相应的处理。 事件处理接口,接口中定义了处理事件的方法。 监视器负责处理事件源发生的事件。 监视器是一个对象,为了处理事件源发生的事件,监视器这个对象会自动调用接口中一个方法来处理事件。 Java规定:为了让监视器这个对象能对事件源发生的事件进行处理, 创建该监视器对象的类必须声明实现相应的接口,那么当事件源发生事件时,监视器就自动调用被类重写的某个接口方法。----------------------------------------------------------------------------------------------------------------------------事件处理步骤:1.写一个监视器类 class Pliceman implements XXXListener { 接口方法(XXXEvent e) { //....... } }2.创建事件源、监视器对象3.事件源注册监视器 事件源.addXXXListener(监视器);---------------------------------------------常见事件及处理接口=========================================================ActionEvent事件 ***------------------------------------------------------------------------------------- 1 ActionEvent事件源 : 文本框、按纽、菜单项、密码框和单选按纽都可以触发ActionEvent事件,即都可以成为ActionEvent事件的事件源。 2.注册监视器: ActionListener接口作为监视器 事件源.addActionListener(ActionListener listen) 将实现ActionListener接口的类的实例注册为事件源的监视器。 3.ActionListener接口:重写接口中的方法作为事件处理。 ActionListener接口在java.awt.event包中,该接口中只有一个方法: public void actionPerformed(ActinEvent e) ; 事件源触发ActionEvent事件后,监视器将发现触发的ActionEvent事件,然后调用接口中的这个方法对发生的事件作出处理。 ActionEvent类事先创建的事件对象就会传递给该方法的参数e。 4.ActionEvent类中的方法:下面的方法能够获取发生动作的事件源。 public Object getSource() --------- 调用该方法可以获取发生ActionEvent事件的事件源对象的引用。 public String getActionCommand() --------- 调用该方法可以获取发生ActionEvent事件时,和该事件相关的一个命令字符串。------------------------------------------------------------------------------------------------------------------------------带事件处理的GUI程序总结:通常有3各类:监视器类public class Pliceman implements ActionListener { //取数组的组件 //显示数据的组件 //设置取数据组件的方法 //设置显示数据组件的方法 //接口中的方法 public void actionPerformed(ActionEvent e) { //取得数据 //处理数据 //显示数据 }}窗口类pulic MainFrame extends JFrame { //组件 //监视器 public MainFrame() { init(); initEvent(); //设置窗口的属性 } void init() { //设置布局 //创建组件 //添加组件 } void initEvent() { //创建监视器 //设置监视器的属性 //事件源注册监视器 }}主类--------------------------------------------------------ItemEvent事件-----------------------------------------------------------------------------------------------------------1.ItemEvent事件源 : 选择框、下拉列表都可以触发ItemEvent事件。2.注册监视器:ItemListener接口作为监视器 事件源.addItemListener(ItemListener listen) 将实现ItemListener接口的类的实例注册为事件源的监视器。 3.ItemListener接口:重写方法作为事件处理 ItemListener接口在java.awt.event包中,该接口中只有一个方法 public void itemStateChanged(ItemEvent e) 事件源触发ItemEvent事件后,监视器将发现触发的ItemEvent事件, 然后调用接口中的itemStateChanged(ItemEvent e)方法对发生的事件作出处理。 ItemEvent类事先创建的事件对象就会传递给该方法的参数e。 4.ItemEvent类中的方法 : getSource()方法返回发生Itemevent事件的事件源外 getItemSelectable()方法返回发生Itemevent事件的事件源。 ---------------------------------------------------------------------------------------------------DocumentEvent事件---------------------------------------------------------------------------------------------------------------------1. DocumentEvent事件源 : 文本区所维护的文档能触发DocumentEvent事件 2. 注册监视器:DocumentListener作为监视器 事件源.addDucumentListener(DocumentListener listen) 将实现DocumentListener接口的类的实例注册为事件源的监视器。 3. DocumentListener接口:重写接口中的方法作为事件处理 DocumentListener接口在javax.swing.event包中,该接口中有三个方法: public void changedUpdate(DocumentEvent e) public void removeUpdate(DocumentEvent e) public void insertUpdate(DocumentEvent e)----------------------------------------------------------------------------------------------------------------------MouseEvent事件_1-----------------------------------------------------------------------------------------------------------------------1. 事件源: 任何组件上都可以发生鼠标事件,如:鼠标进入组件、退出组件、在组件上方单击鼠标、拖动鼠标等都触发鼠标事件, 即导致MouseEvent类自动创建一个事件对象。 2.使用MouseListener接口可以处理以下5种操作触发的鼠标事件 事件源.addMouseListener(MouseListener listener)。 在事件源上按下鼠标键、在事件源上释放鼠标键、在事件源上击鼠标键、鼠标进入事件源、鼠标退出事件源。 注册监视器:MouseListener接口作为监视器3. MouseListener接口中有如下方法:重写方法作为事件源的处理 mousePressed(MouseEvent) 负责处理在组件上按下鼠标键触发的鼠标事件 mouseReleased(MouseEvent) 负责处理在组件上释放鼠标键触发的鼠标事件 mouseEntered(MouseEvent) 负责处理鼠标进入组件触发的鼠标事件 mouseExited(MouseEvent) 负责处理鼠标离开组件触发的鼠标事件 mouseClicked(MouseEvent) 负责处理在组件上单击鼠标键触发的鼠标事件4. MouseEvent 中有下列几个重要的方法: getX() 获取鼠标指针在事件源坐标系中的x-坐标。 getY() 获取鼠标指针在事件源坐标系中的y-坐标。 getModifiers() 获取鼠标的左键或右键。 getClickCount() 获取鼠标被单击的次数。 getSource() 获取发生鼠标事件的事件源。5. MouseMotionListener接口 可以处理以下两种操作触发的鼠标事件, 在事件源上拖动鼠标、在事件源上移动鼠标。 事件源注册监视器的方法是: 事件源.addMouseMotionListener(MouseMotionListener listener)。 MouseMotionListener接口中有如下方法: mouseDragged(MouseEvent) 负责处理拖动鼠标触发的鼠标事件。 mouseMoved(MouseEvent) 负责处理移动鼠标触发的鼠标事件。------------------------------------------------------------------------------------------------------------------------------焦点事件-----------------------------------------------------------------------------------------------1.焦点事件源 :组件可以触发焦点事件。 2.注册监视器:组件可以使用 addFocusListener(FocusListener listener) 注册焦点事件监视器。 3.FocusListener接口 : 创建监视器的类必须要实现FocusListener接口,该接口有两个方法: public void focusGained(FocusEvent e) public void focusLost(FocusEvent e) 当发生FocusEvent事件时,监视器调用类实现的接口中的相应方法。 4.组件也可调用 public boolean requestFocusInWindow() 方法可以获得输入焦点。 --------------------------------------------------------------------------------------------------------------键盘事件--------------------------------------------------------------------------------------------------1. 事件源: 当一个组件处于激活状态时,敲击键盘上一个键就导致这个组件触发键盘事件。2.某个组件使用addKeyListener方法注册监视器。3.接口KeyListener中有如下方法: public void keyPressed(KeyEvent e), public void keyTyped(KeyEvent e), public void KeyReleased(KeyEvent e) 4.(KeyEvent 相关方法: public int getKeyCode()判断哪个键被按下、敲击或释放,返回一个键码值 。 getKeyChar()判断哪个键被按下、敲击或释放,返回键上的字符。-------------------------------------------------------------------------------------------------------窗口事件-------------------------------------------------------------------------------------WindowListener接口. (1) public void windowActivated(WindowEvent e) 当窗口从非激活状态到激活时,窗口的监视器调用该方法。(2) public void windowDeactivated(WindowEvent e) 当窗口激活状态到非激活状态时,窗口的监视器调用该方法。(3) public void windowClosing(WindowEvent e) 当窗口正在被关闭时,窗口的监视器调用该方法。(4) public void windowClosed(WindowEvent e) 当窗口关闭后,窗口的监视器调用该方法。(5) public void windowIconified(WindowEvent e) 当窗口图标化时,窗口的监视器调用该方法。(6) public void windowDeiconified(WindowEvent e) 当窗口撤消图标化时,窗口的监视器调用该方法。(7) public void windowOpened(WindowEvent e) 当窗口打开时,窗口的监视器调用该方法。--------------------------------------------------------------------------------------------------------适配器------------------------------------------------------------------------------------------------------------------------每个具有不止一个方法的AWT监听器接口都有一个实现了它的所有方法,但却不做任何工作的适配器类。适配器可以代替接口来处理事件,当Java提供处理事件的接口中多于一个方法时,Java相应地就提供一个适配器类,比如WindowAdapter类。适配器已经实现了相应的接口,例如WindowAdapter类实现了WindowListener接口。因此,可以使用WindowAdapte的子类创建的对象做监视器,在子类中重写所需要的接口方法即可。 WindowAdapter适配器 .ComponentAdapterContainerAdapterFocusAdapterKeyAdapterMouseAdapterMouseMotio**pterWindowAdapter===========================================匿名类实例或窗口做监视器匿名类的方便之处是匿名类的外嵌类的成员变量在匿名类中仍然有效,当发生事件时,监视器就比较容易操作事件源所在的外嵌类中的成员.当事件的处理比较简单、系统也不复杂时,使用匿名类做监视器是一个不错的选择。让事件源所在的类的实例作为监视器,能让事件的处理比较方便,这是因为,监视器可以方便的操作事件源所在的类中的其他成员。当事件的处理比较简单,系统也不复杂时,让事件源所在的类的实例作为监视器是一个不错的选择。===================================事件总结-------------------------------------------------------------------------------------------------------1.授权模式 Java的事件处理是基于授权模式,即事件源调用调用方法将某个对象注册为自己的监视器。2.接口回调 addXXXListener(XXXListener listener)方法中的参数是一个接口,listener可以引用任何实现了该接口的类所创建的对象, 当事件源发生事件时,接口listener立刻回调被类实现的接口中的某个方法。3.方法绑定 当事件源触发事件发生后,监视器准确知道去调用哪个方法。4.保持松耦合 当事件源触发事件发生后,系统知道某个方法会被执行,但无须关心到底是哪个对象去调用了这个方法, 因为任何实现接口的类的实例(做为监视器)都可以调用这个方法来处理事件。 ====================================================================================================Java绘图机制---------------------------------------------------------------Component类有一个方法public void paint(Graphics g),程序可以在其子类中重写这个方法。当程序运行时,java运行环境会用Graphicd2D(Graphics的一个子类)将参数g实例化,对象g就可以在重写paint方法的组件上内绘制图形、图像等 .Graphics2D的“画笔”分别使用draw和fill方法来绘制和填充一个图形。组件都是矩形形状,组件本身有一个默认的坐标系,组件的左上角的坐标值是(0,0)。java.awt.geom直线 Line2D.Double(double x1, double y1, double x2, double y2)矩形Rectangle2D.Double(double x, double y, double w, double h)圆角矩形RoundRectangle2D.Double(double x, double y, double w, double h);椭圆Ellipse2D.Double(double x, double y double w, double h);圆弧Arc2D.Double(double x, double y, double w, double h, double start, double extent, int type) x, y, w, h-----------椭圆位置大小 start, -------------圆弧其实位置,单位:度 extent-----------划过的度的弧。单位:度。正值:逆时针;负值:顺时针。 type ---------------Arc2D.OPEN Arc2D.CHORD Arc2D.PIE文本 g.drawString(s, x, y)二次曲线三次曲线多边形-----------------------------------------------------有时需要平移、缩放或旋转一个图形。可以使用AffineTransform类来实现对图形的这些操作。例如: AffineTransform trans=new AffineTransform(); 将图形沿顺时针或逆时针以(x,y)为轴点旋转number个弧度 :trans.rotate(60.0*3.1415927/180,100,100); translate(double a, double b) -----------------------移动 scale(double a, double b) ------------放缩rotate(double number, double x, double y)-------------------------旋转 x,y --------旋转圆心 number--------旋转弧度g_2d.setTransform(trans);-------------------------------------------------两个图形进行布尔运算运算之前,必须分别用这两个图形创建两个Area区域对象,例如: Area a1 = new Area(T1); Area a2 = new Area(T2);a1就是图形T1所围成的区域;a2就是T2所围成的区域。那么,a1调用add方法: a1.add(a2); ------------- 或之后,a1就变成a1和a2经过布尔“或”运算后的图形区域。可以用Graphics2D对象g来绘制或填充一个Area对象(区域): g.draw(a1); g.fill(a1); a1.intersect(a2); ---------与 a1.exclusiveOr(a2) ----------------异或 a1.subtract(a2) ------------差。---------------------------------------------------1.加载图像组件调用getToolkit()方法可以返回这个对象的引用。Tollkit类的对象调用方法 Image getImage(String fileNme)或 Image getImage(File file)。可以返回一个Image对象,该对象封装着参数file(或参数fileName)指定的图像文件。2.绘制图像 public boolean drawImage(Image img,int x,int y,ImageObserver observer); 参数img是被绘制的Image对象,x、y是要绘制指定图像的矩形的左上角所处的位置,observer是加载图像时的图像观察器 。-----------------------------------------------------------
-
//输入框监听事件public class TextText01 { public static void main(String[] args) { new MyFrame(); }}class MyFrame extends Frame{ public MyFrame(){ //TextField是一个文件框组件 TextField textField = new TextField(); add(textField); //监听这个文本框输入的文字 MyActionListener02 myActionListener02 = new MyActionListener02(); //按下enter 就会触发这个输入框事件 textField.addActionListener(myActionListener02); //设置替换编码 textField.setEchoChar('*'); setVisible(true); pack(); }}class MyActionListener02 implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { //类型转换 TextField field =(TextField) e.getSource();//获取一些资源,返回一个对象 System.out.println(field.getText());//获得输入框的文本 field.setText("");//按下空格后清零,这里不能用null 因为null是一个对象,""是一个字符串 }}
-
Graphical User Interface,简称 GUI,又称图形化用户接口,所谓的GUI编程,指的是用户不需要输入代码指令,只通过图形界面的交互就可以操作软件功能。Tkinter一个轻量级的跨平台图形用户界面(GUI)开发工具,是Python的自带的官方标准库,安装Python 之后直接导入就可以使用, 我们常见的python IDLE就是使用TKinter实现。它最大的特点就是上手简单, 做个简单的小工具基本够用了,比如登录,计算器,简单的输入输出工具等,缺点是不够美观,功能太单一。PyqtQT是一个C ++编写的跨平台的框架。这是一个非常全面的库。1991年奇趣科技公司开发的C++ GUI应用程序,2014年发布了Qt5.3正式版。PyQt是Qt库的Python版本,它有超过300类,将近6000个函数和方法。它是一个多平台的工具包,可以运行在所有主要操作系统上,包括UNIX,Windows和Mac。PyQt采用双许可证,开发人员可以选择GPL和商业许可。在此之前,GPL的版本只能用在Unix上,从PyQt的版本4开始,GPL许可证可用于所有支持的平台。QT带来的最大好处就是它有一个QT Desiginer,这个设计器可以方便我们进行页面的布局,可以说在Tkinter里面需要一坨坨的代码完成的页面布局,在QT里面只要拖一拖控件就搞定了。wxPythonwxPython 是一款开源软件,是 Python 语言的一套优秀的 GUI 图形库,允许 Python 程序员很方便的创建完整的、功能健全的 GUI 用户界面。wxPython开源免费,支持LINUX和WINDOWS,界面本地化好, 功能完善,它也提供类似QT Designer的设计器wxFormbuilder,可以说是个压缩版的QT。PySide使用“C++”语言编写的应用程序/用户界面(UI)框架。“PySide”是“Qt”的封装。与PySide的不同之处在于PyQt可以商用。PyGUI减少Python应用与平台底层GUI之间的代码量,面向Unix,Macintosh和Windows平台。Kivy基于OpenGL ES 2,能够让使用相同源代码创建的程序能跨平台运行。这个框架是事件驱动的,基于主循环,非常适合开发游戏。Kivy拥有能够处理动画、缓存、手势、绘图等功能。它还内置许多用户界面控件如:按纽、摄影机、表格、Slider和树形控件等。PyGTK -GTK在Linux中常用的“GTK+”是“PyGTK”的“GTK +”封装。与Kivy和PyQt相比,它能不加修改的稳定运行在各种操作系统之上,如Linux,Windows,MacOS等。Flexx许多Python GUI库基于以其他语言编写的库,例如用C++编写的库有wxWidgets和libavg。但Flexx是用Python创建的,使用Web技术,也正因为如此 Flexx 是跨平台的。只需要有 Python 和浏览器就可以运行CEF Python基于Google Chromium,面向Windows,MAC OS和Linux,其主要用于在第三方应用程序中嵌入式浏览器的使用上Dabo一个跨平台的应用程序开发框架,基于wxpython的再封装库。它提供数据库访问,商业逻辑以及用户界面Pyforms一个用于开发GUI应用程序的Python 2.7 / 3.x跨环境运行框架。PyGObject可以为GNOME项目编写Python应用程序,你也可以使用GTK +编写Python应用程序。关于框架的选择,没有最好的,只有最适合的。其他框架的具体使用和介绍,可以查看官方文档学习:https://wiki.python.org/moin/GuiProgramming
-
需要用到的库:tkinter:构建gui界面pyperclip:复制功能random:生成随机数string:处理字符串代码:12345678910111213141516171819202122232425262728293031323334353637383940414243from tkinter import *import random, stringimport pyperclip root =Tk()root.geometry("400x400")root.resizable(0,0)root.title("密码生成器") heading = Label(root, text = '密码' , font ='arial 15 bold').pack() pass_label = Label(root, text = '密码长度', font = 'arial 10 bold').pack()pass_len = IntVar()length = Spinbox(root, from_ = 8, to_ = 32 , textvariable = pass_len , width = 15).pack() pass_str = StringVar() def Generator(): password = '' for x in range (0,4): password = random.choice(string.ascii_uppercase)+random.choice(string.ascii_lowercase)+random.choice(string.digits)+random.choice(string.punctuation) for y in range(pass_len.get()- 4): password = password+random.choice(string.ascii_uppercase + string.ascii_lowercase + string.digits + string.punctuation) pass_str.set(password) Button(root, text = "获取密码" , command = Generator ).pack(pady= 5) Entry(root , textvariable = pass_str).pack() def Copy_password(): pyperclip.copy(pass_str.get()) Button(root, text = '复制密码', command = Copy_password).pack(pady=5) root.mainloop()运行效果:
上滑加载中
推荐直播
-
全面解析华为云EI-API服务:理论基础与实践应用指南
2024/11/29 周五 18:20-20:20
Alex 华为云学堂技术讲师
本期直播给大家带来的是理论与实践结合的华为云EI-API的服务介绍。从“主要功能,应用场景,实践案例,调用流程”四个维度来深入解析“语音交互API,文字识别API,自然语言处理API,图像识别API及图像搜索API”五大场景下API服务,同时结合实验,来加深开发者对API服务理解。
去报名 -
企业员工、应届毕业生、在读研究生共探项目实践
2024/12/02 周一 19:00-21:00
姚圣伟 在职软件工程师 昇腾社区优秀开发者 华为云云享专家 HCDG天津地区发起人
大神带你一键了解和掌握LeakyReLU自定义算子在ONNX网络中应用和优化技巧,在线分享如何入门,以及在工作中如何结合实际项目进行学习
即将直播 -
昇腾云服务ModelArts深度解析:理论基础与实践应用指南
2024/12/03 周二 14:30-16:30
Alex 华为云学堂技术讲师
如何快速创建和部署模型,管理全周期AI工作流呢?本期直播聚焦华为昇腾云服务ModelArts一站式AI开发平台功能介绍,同时结合基于ModelArts 的实践性实验,帮助开发者从理论到实验更好地理解和使用ModelArts。
去报名
热门标签