Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >PyQt 创建自定义QWidget

PyQt 创建自定义QWidget

作者头像
AnRFDev
发布于 2021-02-01 07:31:30
发布于 2021-02-01 07:31:30
1.8K00
代码可运行
举报
文章被收录于专栏:AnRFDevAnRFDev
运行总次数:0
代码可运行

PyQt5.QtWidgets 示例

Win7 PyCharm Python3.5.1 PyQt5

主要文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
|-- main.py
|-- res
|   `-- fish.jpg
`-- ui
    `-- app_widget.py

main.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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自定义了一个居中显示的窗口,关闭时弹确认框

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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中

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    # 同组的控件可以存在同一个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)

QApplicationQWidget

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> QtGui.QWidget()
QWidget: Must construct a QApplication before a QPaintDevice

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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,退出时会造成应用无法关闭的问题(类似内存泄漏)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if __name__ == '__main__':
    app = QApplication(sys.argv)
    # 这里把app交给了MainWindow,MainWindow关闭时是无法正常退出应用的
    main_d = RustMainWindow(app)  # 不建议这么做
    main_d.show()
    sys.exit(app.exec_())
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-12-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
PyQt5美化你的GUI界面
目录 1 圆点选择选项设置 2 选项按钮设置 3 关闭弹窗设置 4 关闭程序弹窗 5 设置关闭按钮 6 设置背景 7 下拉列表框设置 8 等待时显示进度条 ---- 1 圆点选择选项设置 效果展示 代码参考 #!/usr/bin/python # -*- coding:utf-8 -*- import sys from PyQt5 import QtWidgets, QtCore from PyQt5.QtWidgets import * class qt_view(QWidget): def
荣仔_最靓的仔
2021/09/07
3.9K0
【Python篇】PyQt5 超详细教程——由入门到精通(终篇)
在 PyQt5 中,菜单栏(QMenuBar)、工具栏(QToolBar)和状态栏(QStatusBar)是 QMainWindow 提供的标准控件,用于帮助用户更好地与应用程序交互。它们是桌面应用程序的常见组成部分:
半截诗
2024/10/09
2.2K0
【Python篇】PyQt5 超详细教程——由入门到精通(终篇)
『开发技巧』PyQt5入门教程
PyQt5是一套来自Digia的Qt5应用框架和Python的粘合剂。支持Python2.x和Python3.x版本。本教程使用Pyhton 3。Qt库是最强大的GUI支持库的一种。PyQt5的官方主页是www.riverbankcomputing.co.uk/news。是Riverbank Computing开发了PyQt5。
小宋是呢
2019/06/27
4.4K0
『开发技巧』PyQt5入门教程
PyQt5案例汇总(完整版)
PyQt5是一套绑定Qt5的应用程序框架。他在Python 2.x和3.x中都是可用的。该教程使用的是Python3.x。
victorfengming
2021/11/26
5.2K0
Python从入门到精通的"HelloWorld!"程序
作者: zifanwang  发布于2021-04-16
zifan
2021/12/14
4920
python 使用PyQt5
三:将上述方法总结一下实现了一个简单的功能,如下: 功能为:在输入框中输入值过后,点击按钮就会打印出你输入的值,关闭窗口会有提示
全栈程序员站长
2022/06/30
7460
python 使用PyQt5
PyQT5基本功能
TomatoCool
2023/07/30
2870
PyQT5基本功能
PyQt5案例汇总(简洁版)
### 01菜单栏 ```python import sys from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication from PyQt5.QtGui import QIcon class Example(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self):
victorfengming
2021/11/26
2.1K0
抽奖小程序
本例涉及到的新的内容有:QComboBox, QSpinBox, QCheckBox,打开文件对话框和标准消息对话框的使用,布局的嵌套,多线程的应用。
用户6021899
2019/08/14
3K0
python pyqt5 弹窗
import sys from PyQt5.QtCore import * from PyQt5.QtWidgets import * from PyQt5.QtGui import *
用户5760343
2019/07/05
1.5K0
First PyQt
上面的代码实例会在屏幕上显示一个小的窗口。 在这里,我们进行了一些必要的模块导入,最基础的widget组件位于PyQt5.QtWidget模块中
小飞侠xp
2018/12/24
1.7K0
First PyQt
Python高级进阶#007 pyqt5消息盒子QMessageBox
带有图标的消息盒子,图标可以是问号question,信息information,警告warning
刘金玉编程
2019/10/17
1.8K0
PyQt5 基本窗口控件(状态栏/窗口/图标/提示消息/QLabel/文本类控件)
文章目录 1. 状态栏 2. 窗口居中显示 3. 关闭窗口 4. QWidget 5. 添加图标 6. 气泡提示信息 7. QLabel 添加快捷键 8. QLineEdit echoMode 验证器 inputMask 综合练习 9. QTextEdit learn from 《PyQt5 快速开发与实战》 1. 状态栏 self.statusbar.showMessage("hello, Michael", 2000),第二个参数是显示多长时间ms,默认无限长时间 # -*- coding: utf-8
Michael阿明
2022/05/10
2.6K0
PyQt5 基本窗口控件(状态栏/窗口/图标/提示消息/QLabel/文本类控件)
PyQt4 - 关闭最小化问题
在这个部分,我们开始学习一些PyQt4的基本功能,解释会比较详细,就像教孩子说话一样。 最简单的example     下面的示例会非常的简单,仅仅显示一个小窗口,但是将来我们可以通过这个小窗口做很多事情。我们可以对它进行缩放,最大化,最小化。而这些就需要比较多的代码了。但是开发人员已经帮我们完成了这些功能,因为这些功能在大多场合都会使用到,所以没有必要让我们重复。PyQt是一个高级别的工具库,如果使用级别相对较低的库开发下面的功能,就非常可能需要更多的代码了。
bear_fish
2018/09/20
1.5K0
PyQt4 - 关闭最小化问题
【压缩图片】 python
链接:https://pan.baidu.com/s/1DG7beVFvQE_gW_QHz7-HYQ
用户4793865
2023/01/12
6580
Python高级进阶#020 pyqt5登录窗体实战,综合实践案例
self.lePassword.setEchoMode(QLineEdit.Password)
刘金玉编程
2019/11/13
7860
PyQt5 消息对话框QMessageBox
本篇讲解PyQt中预置的5种消息对话框: QMessageBox.about 关于 QMessageBox.ctitical危险 QMessageBox.information 信息框 QMessag
用户6021899
2019/08/13
1.8K0
PyQt5-如何设置主窗口居中?退出应用程序如何操作?
虫无涯
2023/11/02
1.1K0
Python 使用PyQt生成图形界面
1.安装PyQT5 以及QT Designer工具包,这里使用清华大学的源,安装快一些。
王瑞MVP
2022/12/28
7490
Python 使用PyQt生成图形界面
PyQt5 入门
我的路径是:D:\ProgramData\Anaconda3\envs\cv\Lib\site-packages\qt5_applications\Qt\bin\designer.exe
Michael阿明
2022/05/10
1.5K0
PyQt5 入门
相关推荐
PyQt5美化你的GUI界面
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验