当前位置: 首页 > news >正文

网络推广方案的工作安排广东网站营销seo方案

网络推广方案的工作安排,广东网站营销seo方案,武汉市东西湖城乡建设局网站,wordpress淘点金组件文章目录 前言:一、虚拟键盘的实现综合代码 二、为什么选用QWidget而不适用QDialog实现键盘三、从窗体a拉起窗体b后,窗体b闪退问题的探讨四、关闭主窗口时子窗口未关闭的问题 前言: 本文章主要包含四部分: 虚拟键盘的实现&#…

文章目录

    • 前言:
    • 一、虚拟键盘的实现
      • 综合代码
    • 二、为什么选用QWidget而不适用QDialog实现键盘
    • 三、从窗体a拉起窗体b后,窗体b闪退问题的探讨
    • 四、关闭主窗口时子窗口未关闭的问题

前言:

本文章主要包含四部分:

  1. 虚拟键盘的实现(基于Pyside2)
  2. 为什么选用QWidget而不适用QDialog实现键盘
  3. 关于从一个窗体a中拉起另一个窗体b后,窗体b闪退的问题探讨
  4. 关闭主窗口时子窗口未关闭的问题

由于qt5官方的virtualkeyboard库无法适用于公司的应用场景,于是需要手写一个virtual keyboard,目前是初步实现了,但是没有办法全局监听,希望后续能有实现全局监听的办法。


已实现功能:

  • 作为组件以keyboard.py 形式集成到项目中
  • 可切换大小写
  • 可按比例附着于屏幕下方
  • 项目内多组件共用(Keyboard需要作为单例类)
  • 符合真实键盘键位,支持部分特殊字符

待实现功能:

  • 全局监听

一、虚拟键盘的实现

从虚拟键盘的交互可以感知其应当作为一个窗体与用户进行交互,通常窗体用的较多的是QDialog和QWidget,由于QDialog会阻塞其他窗体的交互事件(似乎可以通过setModal设置模态或非模态,但是笔者尝试后不起作用),故这里选择QWidget。
—————
实现思路:

  1. QWidget作为键盘窗体
  2. QPushButton作为虚拟键盘的每个按键
  3. 模拟真实键盘键位,为每一行提供一个QHBoxLayout,设置一个父layout即QVBoxLayout将所有QHBoxLayout添加进去。
  4. 通过setGeometry设置窗体位于指定位置,使键盘每次出现即附着于屏幕下方
  5. 设置该类为单例类
  6. 通过组件点击事件激活虚拟键盘,这里重写了QLineEdit的点击事件mouseclickevent
  7. keyboard工具类
  8. 单例类装饰器

综合代码

代码结构:

  • keyboard.py 键盘实现
  • keyboard_util.py 键盘工具类
  • singleton_util.py 单例类装饰器类
  • enjoy_edit.py QLineEdit示例组件
  • main.py 主程序入口

注:代码虽使用PySide2,但修改PySide2为PyQt5也可运行
代码已放在github:
https://github.com/qilin02811/VirtualKeyboard
clone后即可运行,通过python3 main.py即可运行,需安装PySide2环境,如果是PyQt5环境,应将代码中的依赖修改为PyQt5
示意图:
在这里插入图片描述

点击文本框后即可拉起键盘,并且键盘附着于最下方

二、为什么选用QWidget而不适用QDialog实现键盘

由于QT程序一般有多个窗体,我们希望键盘不会被其他窗体阻塞,且我们也不希望键盘阻塞其他窗体,故上面代码所有窗体均为QWidget,而未使用QDialog。 使用QDialog要通过dialog.exec_()来拉起,否则不会处理窗口的事件。
并且,如果通过exec拉起QDialog,必须关闭该dialog后才会响应其他窗体,这是实际运行过程中应该避免的。
通过该键盘程序的编写,我更倾向于使用QWidget而不是QDialog。

三、从窗体a拉起窗体b后,窗体b闪退问题的探讨

由于在窗体a中,我通过w = QWidget() ,w.show()闪退,故考虑使用QDialog: q = QDialog() ,q.exec_()
但这样会产生一个问题,当处理键盘点击事件完成后,想要点击主窗口或其他子窗口事件需要先关闭键盘,这不符合我们平常的使用场景,我们不希望键盘阻塞其他窗口,于是又放弃了QDialog,回到QWidget研究闪退问题。

这里给出一段解决闪退问题的示例:
发生闪退问题的代码:

class ×××(QWidget):def __init__():super().__init()def ×××(self):w = QWidget()w.show()

未发生闪退问题的代码:

class ×××(QWidget):def __init__():super().__init()self.w = Nonedef ×××(self):if self.w is None:self.w = QWidget(self)self.w.show()

推测:第一个代码由于w.show()后,整个解释器中就不存在w的引用,则w.show()后会清除w的实例
第二个代码由于有self.w = None的引用,故self.w.show()后不会清除self.w的实例

四、关闭主窗口时子窗口未关闭的问题

编写窗体程序时,经常出现多个窗体需要逐一关闭的情况,我们希望关闭主窗口时能够关闭所有子窗口,可以通过重写closeEvent实现:

# 逐个关闭所有子widget
def closeEvent(self, event):for widget in QApplication.instance().allWidgets():if widget != self and isinstance(widget, QWidget):widget.close()event.accept()
http://www.hkea.cn/news/214522/

相关文章:

  • 个人如何在百度上做广告网站seo什么意思
  • java做网站编程合肥seo快排扣费
  • 做律师网站公司google play下载
  • 网站怎么做详情页北京网站制作建设公司
  • 广告网站模板下载不了东莞排名优化团队
  • 网站建设人员培训纲要河北seo网络推广
  • jsp网站开发实例视频教程各大网站的网址
  • 手机网站设计要素推广竞价
  • 久久医药网seo推广培训费用
  • 网站做301顶级域名需要绑定网站排名掉了怎么恢复
  • wordpress app 源码合肥seo整站优化网站
  • 建立网站基本步骤安仁网络推广
  • 网页建设方案怎么写网站seo优化心得
  • 还没有做网站可以先备案域名吗seo怎么提升关键词的排名
  • 做网站原型图软件优化设计七年级下册语文答案
  • 2023年舆情分析报告seo优化宣传
  • 武汉网站建设 熊掌号最佳磁力引擎吧
  • 教育平台网站开发品牌运营
  • 91人才网赣州招聘网安卓优化大师app下载安装
  • 合肥网页模板建站营业推广策划
  • 网站做301根目录在哪教育培训机构平台
  • 企业做网站域名需要自己申请吗深圳百度推广客服电话多少
  • 备案网站容易被收录公司网站建设费用多少
  • 4s店网站建设方案百度app下载最新版
  • 创建电子商务网站的7个步骤做网站推广需要多少钱
  • DW怎么做电商网站梅花seo 快速排名软件
  • 哪个网站可以查企业信息今日热搜榜官网
  • 做网站有必要注册商标吗河北百度seo关键词
  • 网站更换服务器教程下载app到手机上并安装
  • 学校网站建设都是谁做的网络舆情分析