首页 > 其他分享 >【pyqt】(八)ui文件使用

【pyqt】(八)ui文件使用

时间:2025-01-08 22:29:55浏览次数:3  
标签:__ 文件 clicked self pyqt ui connect pushButton

ui文件使用

前面我们已经学过了简单的UI文件创建(利用Qt Designer)和基础控件的使用。现在我们学习如何把二者融合起来完成开发。UI文件以 XML 格式存储界面的布局和各种控件的属性,我们可以利用Qt Designer开发界面,然后利用代码来实现后端的逻辑编程。这样可以将界面设计部分与逻辑编程部分分离,使得代码结构更加清晰。

在代码中调用ui文件有两种方法,一是动态调用,二是将其转为py文件之后调用。

动态调用

动态调用ui文件主要使用QUiLoader类完成,其需要在QApplication之前先实例化

这里使用我们之前使用Designer做的登录框例子,

from PySide6.QtWidgets import QApplication,QWidget
from PySide6.QtUiTools import QUiLoader

uiLoader = QUiLoader()
class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.ui = uiLoader.load("登录框.ui")  # 注意此处的路径,如果和当前python文件不在同一文件需要指定明确路径

if __name__ == '__main__':
    app = QApplication()
    window = MyWindow()
    window.ui.show()
    app.exec()

转换py文件

在命令行中使用这个命令将ui文件转为py文件

pyside6-uic ./ui/登录框.ui > login.py

py文件中的内容如下所示,它不像我们搭建的框架,把内容都写在init方法中,而是使用一个setupUi方法

在这里插入图片描述

from PySide6.QtWidgets import QApplication,QWidget
from login import Ui_widget  # 导入生成的UI类

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.ui = Ui_widget()  # 用一个属性来实例化
        self.ui.setupUi(self)  # 设置UI

if __name__ == '__main__':
    app = QApplication()
    window = MyWindow()
    window.show()
    app.exec()

实战-登录框

我们之前已经利用Designer实现过登录框的ui文件,现在让我们将其导入之后实现一下其登录的逻辑(简单实现,不连接数据库)。此处无论是使用动态加载还是静态加载的方法都是一样的。

from PySide6.QtWidgets import QApplication,QWidget
from login import Ui_widget

class MyWeidget(QWidget):
    def __init__(self):
        super().__init__()
        self.ui = Ui_widget()
        self.ui.setupUi(self)
        # 这里的对象名要和Designer中的QObjectName对应
        self.ui.pushButton.clicked.connect(self.judgeUser)

    def judgeUser(self):
        account = self.ui.lineEdit.text()
        password = self.ui.lineEdit_2.text()
        if account=="123" and password=="123":
            print("登录成功")
        else:
            print("账号或密码错误")


if __name__ == '__main__':
    app = QApplication()
    window = MyWeidget()
    window.show()
    app.exec()

在这里插入图片描述

实战-计算器

我们实现一个简单的计算器界面如下,这里面的很多按键使用布局将它们排列整齐,然后给所有的控件都起一个合适的名字(QObjectName),这样方便我们在使用代码实现逻辑。

在这里插入图片描述

from PySide6.QtWidgets import QApplication,QWidget
from PySide6.QtUiTools import QUiLoader


class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.ui = uiLoader.load(r"ui/计算器.ui")
        self.bind()
        self.result = ''

    def bind(self):
        self.ui.pushButton_0.clicked.connect(lambda:self.addNumber('0'))
        self.ui.pushButton_1.clicked.connect(lambda:self.addNumber('1'))
        self.ui.pushButton_2.clicked.connect(lambda:self.addNumber('2'))
        self.ui.pushButton_3.clicked.connect(lambda:self.addNumber('3'))
        self.ui.pushButton_4.clicked.connect(lambda:self.addNumber('4'))
        self.ui.pushButton_5.clicked.connect(lambda:self.addNumber('5'))
        self.ui.pushButton_6.clicked.connect(lambda:self.addNumber('6'))
        self.ui.pushButton_7.clicked.connect(lambda:self.addNumber('7'))
        self.ui.pushButton_8.clicked.connect(lambda:self.addNumber('8'))
        self.ui.pushButton_9.clicked.connect(lambda:self.addNumber('9'))
        self.ui.pushButton_dot.clicked.connect(lambda:self.addNumber('.'))
        self.ui.pushButton_add.clicked.connect(lambda:self.addNumber('+'))
        self.ui.pushButton_min.clicked.connect(lambda:self.addNumber('-'))
        self.ui.pushButton_mul.clicked.connect(lambda:self.addNumber('*'))
        self.ui.pushButton_div.clicked.connect(lambda :self.addNumber('/'))
        self.ui.pushButton_equal.clicked.connect(self.equal)
        self.ui.pushButton_clear.clicked.connect(self.clear)
        self.ui.pushButton_back.clicked.connect(self.back)


    def addNumber(self,num):
        self.ui.textEdit.clear()
        self.result+=num
        self.ui.textEdit.setText(self.result)

    def equal(self):
        self.numresult = eval(self.result)
        self.ui.textEdit.setText(str(self.numresult))

    def clear(self):
        self.result = ''
        self.ui.textEdit.clear()

    def back(self):
        self.ui.textEdit.clear()
        self.result = self.result[:-1]
        self.ui.textEdit.setText(self.result)

if __name__ == '__main__':
    uiLoader = QUiLoader()
    app = QApplication()
    window = MyWindow()
    window.ui.show()
    app.exec()

标签:__,文件,clicked,self,pyqt,ui,connect,pushButton
From: https://blog.csdn.net/dao_cao_renshuai/article/details/145019221

相关文章

  • RAG实战-Markdown文件解析思路分析与实现
    TrustRAG项目链接:https://github.com/gomate-community/TrustRAG本文代码链接:https://github.com/gomate-community/TrustRAG/blob/main/trustrag/modules/document/markdown_parser.py最近遇到几个伙伴关于markdown解析的问题,都是比较偏向于实际使用场景的,这里我们一开始我们......
  • tuack 配置文件转 uoj 配置文件
    #!/bin/envpython3fromtuackimportbasefromosimportsystembase.init()name="printer"deflndata(src,dst):system(f"ln-snf{src}.in{dst}.in")system(f"ln-snf{src}.ans{dst}.out")system(f"cpstatement......
  • BurpSuite实操之漏洞扫描
    一、BurpSuite的常见功能仪表盘:仪表盘,扫描启动、暂停,用于显示任务、日志信息等目标:设置工作的目标范围(URL),以及报文过滤、报文展示等功能代理:拦截HTTP/S请求的代理服务器,作为web浏览器与服务器的中间人,允许拦截、修改数据流测试器:入侵功能,对web应用程序进行攻击,还可......
  • Python在多个Excel文件中找出缺失数据行数多的文件
      本文介绍基于Python语言,针对一个文件夹下大量的Excel表格文件,基于其中每一个文件内、某一列数据的特征,对其加以筛选,并将符合要求与不符合要求的文件分别复制到另外两个新的文件夹中的方法。  首先,我们来明确一下本文的具体需求。现有一个文件夹,其中有大量的Excel表格文件(在......
  • day31,文件io,目录io
    文件io标准io与文件io文件打开权限对照目录iod_type(文件类型)......
  • 【GUI-pyqt5】QAbstractButton类
    1.描述所有按钮控件的基类提供按钮的通用功能2.继承QWidget3.功能3.1提示文本3.1.1APIAPI功能备注setText(str)设置按钮提示文本-text()获取按钮提示文本-3.1.2应用场......
  • Godot引擎开发:UI和用户交互_输入处理
    输入处理在Godot引擎开发中,输入处理是实现用户与游戏交互的关键步骤。通过处理用户输入,可以实现角色移动、攻击、跳跃等操作,从而增强游戏的可玩性和互动性。本节将详细介绍Godot引擎中的输入处理机制,包括键盘输入、鼠标输入、触摸输入和游戏手柄输入,并提供具体的代码示例。......
  • Godot引擎开发:UI和用户交互_鼠标和键盘输入处理
    鼠标和键盘输入处理在上一节中,我们介绍了如何在Godot引擎中创建和管理UI元素。接下来,我们将深入探讨如何处理鼠标和键盘输入,以实现用户与UI的交互。用户输入是任何游戏开发中不可或缺的一部分,特别是在动作游戏中,玩家需要通过键盘和鼠标进行快速、精确的操作。本节将详细介......
  • 优化永不止步:TinyVue v3.20.0 正式发布,更美观的官网UI,更友好的文档搜索,更强大的主题配
    你好,我是Kagol,个人公众号:前端开源星球。我们非常高兴地宣布,2024年12月4日,TinyVue发布了v3.20.0......
  • YOLO-v3如何从配置文件中构建网络骨架
    从配置文件路径读取模型配置参数config文件形式从路径中读取返回一个列表,列表中每个网络层以字典的形式存储参数defparse_model_config(path):"""Parsestheyolo-v3layerconfigurationfileandreturnsmoduledefinitions"""file=open(path,'r')#......