返回顶部
首页 > 资讯 > 后端开发 > Python >PyQt 如何创建自定义QWidget
  • 689
分享到

PyQt 如何创建自定义QWidget

2024-04-02 19:04:59 689人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录开发环境主要文件:main.pyapp_main_window.pyTips多控件可以存在list中QApplication与QWidget注意widget持有外部对象引用的问题

开发环境

Win7  PyCharm  python3.5.1  PyQt5

主要文件:


|-- main.py
|-- res
| `-- fish.jpg
`-- ui
 `-- app_widget.py

main.py


import sys

from PyQt5.QtWidgets import QApplication

from ui.app_widget import AppQWidget

if __name__ == '__main__':
 app = QApplication(sys.argv)
 w = AppQWidget()
 w.show()

 sys.exit(app.exec_())

app_main_window.py

自定义了一个居中显示的窗口,关闭时弹确认框


from PyQt5.QtCore import QCoreApplication
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QWidget, QPushButton, QDesktopWidget, QMessageBox


class AppQWidget(QWidget):
 """
 A custom QWidget by Rust Fisher
 """

 def __init__(self):
  super().__init__()
  self.init_ui()

 def init_ui(self):
  # self.setGeometry(300, 300, 400, 200) # 相当于move和resize
  self.resize(300, 200)
  self.move_to_center()
  self.setWindowTitle('Demo1')
  self.setWindowIcon(QIcon('res/fish.jpg'))

  btn1 = QPushButton('Quit', self)
  btn1.setToolTip('Click to quit')
  btn1.resize(btn1.sizeHint())
  btn1.move(200, 150)
  btn1.clicked.connect(QCoreApplication.instance().quit) # cannot locate function connect

 def closeEvent(self, event):
  reply = QMessageBox.question(self, 'Message',
          'Are you sure to quit now?',
          QMessageBox.Yes | QMessageBox.No,
          QMessageBox.No)
  if reply == QMessageBox.Yes:
   event.accept()
  else:
   event.ignore()

 def move_to_center(self):
  qr = self.frameGeometry()
  cp = QDesktopWidget().availableGeometry().center() # Got center info here
  qr.moveCenter(cp)
  self.move(qr.topLeft()) # 应用窗口的左上方的点到qr矩形的左上方的点,因此居中显示在我们的屏幕上

Tips

多控件可以存在list中

存在一起,需要对整体操作时直接遍历列表


 # 同组的控件可以存在同一个list中
 self.cb_list = [
  self.ma.i2cCB,
  self.ma.mipiCB,
  self.ma.eepromCB,
  self.ma.tem_sensorCB,
  self.ma.lensCB,
  self.ma.vcmCB,
  self.ma.mirrorCB,
  self.ma.mirrorCaliCB, ]

 self.test_count_et_list = [
  self.ma.i2cCountEt,
  self.ma.mipiCountEt,
  self.ma.eepromCountEt,
  self.ma.tem_sensorCountEt,
  self.ma.lensCountEt,
  self.ma.vcmCountEt,
  self.ma.mirrorCountEt,
  self.ma.mirrorCaliCountEt,
 ]

# 需要操作某组控件时 直接遍历列表
def _click_test_item_cb(self):
 """ Update [choose all checkbox] by all test item state """
 choose_all = True
 for cb in self.cb_list:
  choose_all = choose_all & cb.isChecked()
 self.ma.selecteAllCB.setChecked(choose_all)

QApplication与QWidget

QApplication是一个单例,在QWidget中可以通过QApplication.instance()获取到对象

实际上在实例化QApplication前就使用QtGui.QWidget()是会报错的


>>> QtGui.QWidget()
QWidget: Must construct a QApplication before a QPaintDevice

参考 How QApplication() and QWidget() objects are connected in PySide/PyQt?

在我们自定义的QMainWindow中,也可以直接获取到QApplication的实例。


class RustMainWindow(QMainWindow):
 """ This is the main class """

 def _trigger_english(self):
  print "Change to English", QApplication.instance()

# Change to English <PyQt4.QtGui.QApplication object at 0x02ABE3A0>

注意widget持有外部对象引用的问题

如果在程序启动的地方将引用交给widget,退出时会造成应用无法关闭的问题(类似内存泄漏)。


if __name__ == '__main__':
 app = QApplication(sys.argv)
 # 这里把app交给了MainWindow,MainWindow关闭时是无法正常退出应用的
 main_d = RustMainWindow(app) # 不建议这么做
 main_d.show()
 sys.exit(app.exec_())

以上就是PyQt 如何创建自定义QWidget的详细内容,更多关于PyQt 创建自定义QWidget的资料请关注编程网其它相关文章!

--结束END--

本文标题: PyQt 如何创建自定义QWidget

本文链接: https://lsjlt.com/news/122038.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • PyQt 如何创建自定义QWidget
    目录开发环境主要文件:main.pyapp_main_window.pyTips多控件可以存在list中QApplication与QWidget注意widget持有外部对象引用的问题...
    99+
    2024-04-02
  • PyQt怎么创建自定义QWidget
    小编给大家分享一下PyQt怎么创建自定义QWidget,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!开发环境Win7  PyCharm  Python3.5.1  PyQt5主要文件:|--&...
    99+
    2023-06-14
  • C#如何创建自定义特性
    目录概述实现方式概述 特性(Attribute)是用于在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明性标签。您可以通过使用特性向程序添加声明性信息。...
    99+
    2024-04-02
  • html如何创建自定义列表
    这篇文章主要介绍了html如何创建自定义列表,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。定义列表自定义列表不仅仅是一列项目,而是项目及其注...
    99+
    2024-04-02
  • 如何创建 JavaScript 自定义事件
    目录怎么创建自定义事件事件定制冒泡 bubbles可取消 cancelable组合 composed给事件传递自定义数据命名约定双击事件总结前言: 相信大家肯定处理过很多的事件监听,...
    99+
    2024-04-02
  • Angular中如何自定义创建指令
    小编给大家分享一下Angular中如何自定义创建指令,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!指令介绍在 Angular 中有三种类型的指令:组件,有模板的指...
    99+
    2023-06-14
  • 如何用 Golang 创建自定义时区?
    要在 golang 中创建自定义时区,可以使用 time.fixedzone 函数或 time.newfixedzone 函数。time.fixedzone 函数用于修改时区偏移,而 t...
    99+
    2024-05-22
    golang 时区 标准库
  • 如何在Prometheus中创建自定义指标
    要在Prometheus中创建自定义指标,您需要遵循以下步骤: 创建一个用于暴露指标的应用程序或服务。您可以使用Promethe...
    99+
    2024-03-04
    Prometheus
  • 如何使用Dockerfile创建自定义镜像
    要使用Dockerfile创建自定义镜像,请按照以下步骤: 创建一个新的文件夹,并在文件夹中创建一个名为Dockerfile的文...
    99+
    2024-04-02
  • AngularJS基于factory如何创建自定义服务
    这篇文章主要介绍了AngularJS基于factory如何创建自定义服务,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。为什么要创建自定义服务...
    99+
    2024-04-02
  • 如何使用 PHP 创建自定义函数库?
    在 php 中创建自定义函数库的步骤为:创建函数文件,例如 myfunctions.php,并在其中定义函数。使用 require 或 include 语句将函数库文件包含到 php 脚...
    99+
    2024-04-10
    php 自定义函数库
  • 如何在 Laravel 中创建自定义 PHP 函数?
    在 laravel 中创建自定义 php 函数的步骤如下:创建函数文件(例如 myhelper.php)并定义函数。在 app.php 中将函数命名空间添加到 providers 数组。...
    99+
    2024-04-23
    laravel php函数
  • Knockout应用开发中如何创建自定义绑定
    这篇文章给大家介绍Knockout应用开发中如何创建自定义绑定,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。创建自定义绑定你可以创建自己的自定义绑定,没有必要非要使用内嵌的绑定(像cl...
    99+
    2024-04-02
  • 如何在Prometheus系统中创建自定义指标
    要在Prometheus系统中创建自定义指标,您需要执行以下步骤: 创建一个新的指标定义文件,通常使用PromQL语言编写。您可...
    99+
    2024-03-04
    Prometheus
  • 如何在Zabbix中创建自定义报警脚本
    要在Zabbix中创建自定义报警脚本,您需要按照以下步骤操作: 创建脚本: 首先,在Zabbix服务器或代理上创建一个脚本文件,...
    99+
    2024-03-13
    Zabbix
  • 如何用C#创建用户自定义异常浅析
    概述 异常是在程序执行期间出现的问题。C# 中的异常是对程序运行时出现的特殊情况的一种响应,比如尝试除以零。异常提供了一种把程序控制权从某个部分转移到另一个部分的方式。C# 异常处...
    99+
    2024-04-02
  • Python如何创建一个自定义视频播放器
    这篇文章主要讲解了“Python如何创建一个自定义视频播放器”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python如何创建一个自定义视频播放器”吧!1、安装vlc的64位版本。2、安装p...
    99+
    2023-07-05
  • 如何创建快捷方式到自定义的位置
    本篇内容介绍了“如何创建快捷方式到自定义的位置”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  把如下代码内容保存为shortcut.vbs...
    99+
    2023-06-08
  • 创建自定义 PHP 函数时如何处理参数?
    本文探讨了 php 函数参数处理技巧。类型限定:使用类型提示强制参数类型。默认参数值:为可选参数设置默认值。强制参数传递:使用 null 联合类型强制参数传递。可变数量参数:使用 ......
    99+
    2024-04-22
    php 参数处理
  • 怎么创建自定义Nagios插件
    要创建自定义Nagios插件,您可以按照以下步骤进行: 决定插件类型:您可以选择编写一个脚本插件、C语言插件、Perl插件或Py...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作