主要问题

本实例主要解决的问题:Qt Designer设计完UI文件,逻辑代码继承编译后的UI类无法实现窗体控件随主窗体大小变化而缩放。

测试目标

1. 用Eric创建epj文件:test.epj

  • UI文件,test.ui
  • 编译后的UI文件,Ui_test.py
  • 生成装饰器槽函数,test.py
  • 编译resource.qrc

2. Qt Designer设计UI窗体和资源文件

  • test.ui
  • resource.qrc
    • img:jpg,png,ico
    • qss

3. 用Pycharm管理Python项目文件并运行测试;

文档结构

  • test.ui,               Qt Designer完成设计
  • Ui_test.py,      Eric完成编译
  • test.py,           Eric完成生成装饰器槽函数文件
  • resource.qrc, Qt Designer完成设计
  • style.qss,       可以用QSS Editor

代码部分

1. Qt Designer设计test.ui和resource.qrc

2. Eric完成编译后生成Ui_test.py, 代码文件代码如下

# Form implementation generated from reading ui file 'D:\Python Project\Eric Projects\test.ui'
#
# Created by: PyQt6 UI code generator 6.2.2
#
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
# run again.  Do not edit this file unless you know what you are doing.from PyQt6 import QtCore, QtGui, QtWidgetsclass Ui_MainWindow(object):def setupUi(self, MainWindow):MainWindow.setObjectName("MainWindow")MainWindow.resize(800, 632)icon = QtGui.QIcon()icon.addPixmap(QtGui.QPixmap("./img/test.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)MainWindow.setWindowIcon(icon)self.centralWidget = QtWidgets.QWidget(MainWindow)self.centralWidget.setObjectName("centralWidget")self.verticalLayoutWidget = QtWidgets.QWidget(self.centralWidget)self.verticalLayoutWidget.setGeometry(QtCore.QRect(0, 0, 801, 601))self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)self.verticalLayout.setContentsMargins(0, 0, 0, 0)self.verticalLayout.setObjectName("verticalLayout")self.txtB = QtWidgets.QTextBrowser(self.verticalLayoutWidget)self.txtB.setStyleSheet("")self.txtB.setObjectName("txtB")self.verticalLayout.addWidget(self.txtB)self.horizontalLayout_2 = QtWidgets.QHBoxLayout()self.horizontalLayout_2.setObjectName("horizontalLayout_2")self.toolButton_4 = QtWidgets.QToolButton(self.verticalLayoutWidget)icon1 = QtGui.QIcon()icon1.addPixmap(QtGui.QPixmap("./img/a1.jpg"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)self.toolButton_4.setIcon(icon1)self.toolButton_4.setIconSize(QtCore.QSize(120, 120))self.toolButton_4.setObjectName("toolButton_4")self.horizontalLayout_2.addWidget(self.toolButton_4)self.toolButton_3 = QtWidgets.QToolButton(self.verticalLayoutWidget)icon2 = QtGui.QIcon()icon2.addPixmap(QtGui.QPixmap("./img/a2.jpg"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)self.toolButton_3.setIcon(icon2)self.toolButton_3.setIconSize(QtCore.QSize(120, 120))self.toolButton_3.setObjectName("toolButton_3")self.horizontalLayout_2.addWidget(self.toolButton_3)self.toolButton_2 = QtWidgets.QToolButton(self.verticalLayoutWidget)icon3 = QtGui.QIcon()icon3.addPixmap(QtGui.QPixmap("./img/a3.jpg"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)self.toolButton_2.setIcon(icon3)self.toolButton_2.setIconSize(QtCore.QSize(120, 120))self.toolButton_2.setObjectName("toolButton_2")self.horizontalLayout_2.addWidget(self.toolButton_2)self.toolButton = QtWidgets.QToolButton(self.verticalLayoutWidget)icon4 = QtGui.QIcon()icon4.addPixmap(QtGui.QPixmap("./img/a4.jpg"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)self.toolButton.setIcon(icon4)self.toolButton.setIconSize(QtCore.QSize(120, 120))self.toolButton.setObjectName("toolButton")self.horizontalLayout_2.addWidget(self.toolButton)self.verticalLayout.addLayout(self.horizontalLayout_2)self.horizontalLayout = QtWidgets.QHBoxLayout()self.horizontalLayout.setObjectName("horizontalLayout")spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)self.horizontalLayout.addItem(spacerItem)self.btn1 = QtWidgets.QPushButton(self.verticalLayoutWidget)icon5 = QtGui.QIcon()icon5.addPixmap(QtGui.QPixmap("./img/start.ico"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)self.btn1.setIcon(icon5)self.btn1.setIconSize(QtCore.QSize(32, 32))self.btn1.setObjectName("btn1")self.horizontalLayout.addWidget(self.btn1)spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)self.horizontalLayout.addItem(spacerItem1)self.btn2 = QtWidgets.QPushButton(self.verticalLayoutWidget)icon6 = QtGui.QIcon()icon6.addPixmap(QtGui.QPixmap("./img/stop.ico"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)self.btn2.setIcon(icon6)self.btn2.setIconSize(QtCore.QSize(32, 32))self.btn2.setObjectName("btn2")self.horizontalLayout.addWidget(self.btn2)spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)self.horizontalLayout.addItem(spacerItem2)self.verticalLayout.addLayout(self.horizontalLayout)MainWindow.setCentralWidget(self.centralWidget)self.retranslateUi(MainWindow)QtCore.QMetaObject.connectSlotsByName(MainWindow)def retranslateUi(self, MainWindow):_translate = QtCore.QCoreApplication.translateMainWindow.setWindowTitle(_translate("MainWindow", "testWin"))self.toolButton_4.setText(_translate("MainWindow", "PIC1"))self.toolButton_3.setText(_translate("MainWindow", "PIC2"))self.toolButton_2.setText(_translate("MainWindow", "PIC3"))self.toolButton.setText(_translate("MainWindow", "PIC4"))self.btn1.setText(_translate("MainWindow", "开始"))self.btn2.setText(_translate("MainWindow", "停止"))if __name__ == "__main__":import sysapp = QtWidgets.QApplication(sys.argv)MainWindow = QtWidgets.QMainWindow()ui = Ui_MainWindow()ui.setupUi(MainWindow)MainWindow.show()sys.exit(app.exec())

3. Eric生成独立的逻辑文件test.py(生成第一次可以自定义,之后不要再重新生成同样名字否则会覆盖自定义代码),代码如下:

# -*- coding: utf-8 -*-"""
Module implementing MainWindow.
"""from PyQt6.QtCore import pyqtSlot
from PyQt6.QtWidgets import QMainWindow, QApplicationfrom Ui_test import Ui_MainWindowclass MainWindow(QMainWindow, Ui_MainWindow):"""Class documentation goes here."""def __init__(self, parent=None):"""Constructor@param parent reference to the parent widget (defaults to None)@type QWidget (optional)"""super().__init__(parent)self.setupUi(self)@pyqtSlot()def on_btn1_clicked(self):"""Slot documentation goes here."""# TODO: not implemented yetprint('you clicked btn1')self.txtB.setText('you clicked btn1.')@pyqtSlot()def on_btn2_clicked(self):"""Slot documentation goes here."""# TODO: not implemented yetprint('you clicked btn2')self.txtB.setText('you clicked btn2.')@pyqtSlot()def on_toolButton_4_clicked(self):"""Slot documentation goes here."""# TODO: not implemented yetprint('you clicked tbtn4')self.txtB.setText('you clicked tbtn4.')@pyqtSlot()def on_toolButton_3_clicked(self):"""Slot documentation goes here."""# TODO: not implemented yetprint('you clicked tbtn3')self.txtB.setText('you clicked tbtn3.')@pyqtSlot()def on_toolButton_2_clicked(self):"""Slot documentation goes here."""# TODO: not implemented yetprint('you clicked tbtn2')self.txtB.setText('you clicked tbtn2.')@pyqtSlot()def on_toolButton_clicked(self):"""Slot documentation goes here."""# TODO: not implemented yetprint('you clicked tbtn1')self.txtB.setText('you clicked tbtn1.')class CommonHelper:    # 手动编写"""using for common module用于加载qss文件"""def __init__(self):pass@staticmethoddef readQss(style):"""read style.qss file"""with open(style, 'r') as f:return f.read()if __name__ == "__main__":import sysapp = QApplication(sys.argv)styleFile = './qss/test.qss'qssStyle = CommonHelper.readQss(styleFile)ui = MainWindow()ui.centralWidget.setLayout(ui.verticalLayout)    # 将主窗体设置为垂直布局,随窗体变化ui.setStyleSheet(qssStyle)ui.show()sys.exit(app.exec())"""    以下代码直接实例化Ui_test.py模块中的Ui_MainWindow,用于测试布局随窗体大小变化自动变化mainWindow = QMainWindow()ui = Ui_MainWindow()ui.setupUi(mainWindow)# 核心代码部分ui.centralWidget.setLayout(ui.verticalLayout)    # 将主窗体设置为垂直布局,随窗体变化mainWindow.setCentralWidget(ui.centralWidget)    mainWindow.setStyleSheet(qssStyle)mainWindow.show()sys.exit(app.exec())
"""

核心代码,添加后可以实现控件随主窗体大小变化完成自动缩放。

ui.centralWidget.setLayout(ui.verticalLayout)    # 将主窗体设置为垂直布局,随窗体变化

未添加代码

添加代码后

项目测试 | Pycharm+Pyqt5+Qt Designer6+Eric7实现逻辑与界面分离相关推荐

  1. 项目教程 | Pycharm+Pyqt5+Eric6实现逻辑与界面分离(实例教学)

    文章目录 前言 实现步骤:实例演示 1 创建一个eric项目文件 2. 创建窗体UI文件 3. 项目中添加文件 4. 编译UI文件. 5. 关联信号与槽函数 第1种方式,直接添加槽函数并与信号绑定 第 ...

  2. 解忧杂货店(博客系统)的项目测试——黑盒测试

    一.项目描述: 一个一个的烦恼.忧愁,甚至于你内心深处的秘密,是否觉得无处搁置呢?把他们都放进解忧杂货店吧,来这里寻找内心的平静.本项目设计并实现了用户注册.用户登录.文章创作.文章列表查看以及用户注 ...

  3. Python 中 PyQt5 + pycharm 调用 Qt Designer,将.ui文件转换成 .py 文件

    From:https://blog.csdn.net/qq_40666028/article/details/81069878 基于Qt Designer 和 pyuic 开发 UI 界面的方法:ht ...

  4. Pycharm+PyQt5环境配置

    Pycharm+PyQt5环境配置 1. 安装pycharm.python3和pyqt5 2. 配置QT Designer 3. 配置编译路径pyuic 4. 测试 1. 安装pycharm.pyth ...

  5. Python界面 PyQT可视化开发(python3+PyQt5+Qt Designer)

    前言 以前制作一个Python窗体界面,我都是用GUI窗口视窗设计的模块Tkinter一点一点敲出来的,今天朋友问我有没有Python窗体的设计工具,"用鼠标拖拖"就能完成窗体设计 ...

  6. pycharm+python3.7+pyqt配置_Python3+Pycharm+PyQt5环境搭建步骤图文详解

    搭建环境: 操作系统:Win10 64bit Python版本:3.7 Pycharm:社区免费版 一.Python3.7安装 下载到安装包后打开,如果想安装到默认路径(C盘)的话一直点下一步就可以了 ...

  7. pycharm python3.7环境_Python3+Pycharm+PyQt5环境搭建步骤图文详解

    搭建环境: 操作系统:Win10 64bit Python版本:3.7 Pycharm:社区免费版 一.Python3.7安装 下载到安装包后打开,如果想安装到默认路径(C盘)的话一直点下一步就可以了 ...

  8. 【MacM1+PyCharm+PyQt5】记录一次Pycharm有Pyqt5环境但无代码提示的解决流程

    因为学习的要求,在网上找了很多如何mac m1 如何安装Pyqt5的文章,我的流程如下: 1.使用HomeBrew安装Pyqt5 brew install pyqt@5 2.从brew存放安装包的位置 ...

  9. PyCharm PyQt5创建主窗口源代码

    一.PyCharm PyQt5创建主窗口基本过程: 1.打开PyCharm,新建工程MyMainTest. 2.按照Tools-External Tools-QtDesigner,打开QT设计界面,创 ...

最新文章

  1. iOS -- iOS11新特性,如何适配iOS11
  2. 01-----JavaScript简介
  3. 靶场环境vulhub的安装
  4. 8086汇编4位bcd码_51单片机用汇编语言实现BCD码转换
  5. linux 下 读取某个文件的某一行或者某几行
  6. 设计模式C++实现(3)——装饰模式
  7. 在admin设置第三方帐号登录点击Save保存按钮的时候报错     CSRF token missing or incorrect.
  8. MySQL 大表优化方案(1)
  9. Java中ArrayList的使用
  10. AngularJs 冷兵器杂谈
  11. mac m1 php,【php】Macbook m1 Big Sur 安装php7.1 mondodb 折腾记
  12. 前端处理方式:特殊格式时间转换(2020-11-27T02:58:41.000000Z)
  13. 正则匹配身份证和邮箱
  14. 要运行python程序要安装什么_windows下面如何安装运行python程序
  15. Exchange 2013 创建发送连接器
  16. PKM全民推广系列三:PKM搜索
  17. STM32F103RBT6移植到STM32F103C8T6注意事项
  18. Uncaught RangeError: Maximum call stack size exceeded 超出最大调用值(个人解释)
  19. 魅族 刷机android 6.0,魅族mx6 flyme6
  20. java拯救公主_Java实现 计蒜客 拯救行动

热门文章

  1. DevExpress WinForms是一款全球顶级的用户界面控件套包
  2. HNU-电路与电子学-学习建议
  3. 张驰课堂:六西格玛绿带和黑带们要不要学习张驰快捷六西格玛
  4. 谷歌和Adobe都在用的海外10大顶级内容营销机构
  5. 计算机音乐谱大全强军战歌,《强军战歌,钢琴谱》阎维文(五线谱 钢琴曲 指法)-弹吧|蛐蛐钢琴网...
  6. 程序运行时的存储组织及管理
  7. 用css设置文字的描边效果
  8. 探寻职业教育中的人工智能技术
  9. C++ for循环警告:Missing reference in range-for with non trivial type (QString)
  10. pycharm学生账号申请以及集群使用