【Pyqt5图形界面】第二篇:界面布局和逻辑分离的写法
创始人
2025-05-30 23:36:19

文章目录

  • 前言
  • 一、ui界面
  • 二、界面和逻辑分离
    • 1.通过designer工具生成.ui文件
    • 2.通过pyuic将.ui文件转成py文件
    • 3.创建main.py文件,实现逻辑分离


前言

Python语言的能力我们都知道,在有桌面需求时,也有很多选择,我比较常用的就是Pyqt5,但是相对来说Pyqt5的资料不是很多,使用的过程中有许多东西需要我们考虑。包括ui界面、css样式、算法和逻辑等。


一、ui界面

pyqt5的界面主要有2中方式:一是通过designer工具可视化布局在生成py文件,二是通过代码逻辑。直接代码逻辑完成布局难度很大,对于刚接触pyqt5的开发人员来说,第一种方式比较适合,但是在遇到界面比较复杂,需要修改时,我们就需要注意生成的py布局文件和原有逻辑如何共存这个问题。
本博客手机通过pycharm来开发pyqt5的,相关配置请参考:PyCharm安装PyQt5及其工具(Qt Designer、PyUIC、PyRcc)详细教程

二、界面和逻辑分离

1.通过designer工具生成.ui文件

在这里插入图片描述

2.通过pyuic将.ui文件转成py文件

以下内容是
通过上图将生成如下内容的login.py文件

# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'login.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_LoginMainWindow(object):def setupUi(self, LoginMainWindow):LoginMainWindow.setObjectName("LoginMainWindow")LoginMainWindow.setEnabled(True)LoginMainWindow.resize(366, 230)font = QtGui.QFont()font.setFamily("黑体")font.setPointSize(12)font.setStrikeOut(False)LoginMainWindow.setFont(font)self.centralwidget = QtWidgets.QWidget(LoginMainWindow)self.centralwidget.setObjectName("centralwidget")self.label = QtWidgets.QLabel(self.centralwidget)self.label.setGeometry(QtCore.QRect(90, 80, 36, 16))self.label.setStyleSheet("font: 12pt \"Agency FB\";")self.label.setObjectName("label")self.label_2 = QtWidgets.QLabel(self.centralwidget)self.label_2.setGeometry(QtCore.QRect(90, 118, 36, 16))self.label_2.setStyleSheet("font: 12pt \"Agency FB\";")self.label_2.setObjectName("label_2")self.name = QtWidgets.QLineEdit(self.centralwidget)self.name.setEnabled(True)self.name.setGeometry(QtCore.QRect(140, 78, 130, 25))self.name.setObjectName("name")self.password = QtWidgets.QLineEdit(self.centralwidget)self.password.setGeometry(QtCore.QRect(140, 115, 130, 25))font = QtGui.QFont()font.setFamily("黑体")font.setPointSize(12)font.setStrikeOut(False)font.setKerning(True)font.setStyleStrategy(QtGui.QFont.PreferAntialias)self.password.setFont(font)self.password.setObjectName("password")self.label_3 = QtWidgets.QLabel(self.centralwidget)self.label_3.setGeometry(QtCore.QRect(160, 20, 51, 27))self.label_3.setStyleSheet("font: 20pt \"隶书\";")self.label_3.setObjectName("label_3")self.loginbutton = QtWidgets.QPushButton(self.centralwidget)self.loginbutton.setGeometry(QtCore.QRect(90, 170, 180, 30))self.loginbutton.setStyleSheet("font: 12pt \"Agency FB\";\n""background-color: rgb(0, 170, 255);")self.loginbutton.setObjectName("loginbutton")self.message = QtWidgets.QLabel(self.centralwidget)self.message.setGeometry(QtCore.QRect(90, 150, 181, 20))self.message.setText("")self.message.setObjectName("message")LoginMainWindow.setCentralWidget(self.centralwidget)self.retranslateUi(LoginMainWindow)self.loginbutton.clicked.connect(LoginMainWindow.click_login_btn)QtCore.QMetaObject.connectSlotsByName(LoginMainWindow)def retranslateUi(self, LoginMainWindow):_translate = QtCore.QCoreApplication.translateLoginMainWindow.setWindowTitle(_translate("LoginMainWindow", "登录界面"))self.label.setText(_translate("LoginMainWindow", "账号"))self.label_2.setText(_translate("LoginMainWindow", "密码"))self.label_3.setText(_translate("LoginMainWindow", "EVT"))self.loginbutton.setText(_translate("LoginMainWindow", "安全登录"))

3.创建main.py文件,实现逻辑分离

代码如下(示例):

import sys
from PyQt5 import QtWidgets
from main import MainWindow
from login import Ui_LoginMainWindow
from config import *class Login(QtWidgets.QMainWindow, Ui_LoginMainWindow):def __init__(self):super(Login, self).__init__()self.setupUi(self)def click_login_btn(self):"""实现login函数,textEdit是我们放上去的文本框的id"""name = self.name.text()password = self.password.text()try:if name == 'ty' and password == '123456':print('登陆成功')self.message.setText('登陆成功')self.close()# 开启主窗口self.main_window = MainWindow()self.main_window.show()else:self.message.setText('账号密码错误')except Exception as e:print(e)self.message.setText("其他错误")if __name__ == '__main__':app = QtWidgets.QApplication(sys.argv)login = Login()login.show()# main_window = MainWindow()# main_window.show()sys.exit(app.exec_())

相关内容

热门资讯

还有谁不知道?东山岛竟然有这么... 那些“金字招牌” Dongshan Island 盘点东山岛 北纬23°东山岛 提到来福建看海 很...
哈尔滨爆火背后的文旅品牌打造密... 导语 去年冬天的哈尔滨,上演了一场现象级的文旅传奇。冻梨摆盘、人造月亮、鄂伦春族驯鹿亮相中央大街——...
宁夏旅游厕所干净吗?沙漠景区里... 宁夏旅游厕所干净吗?沙漠景区里方便吗?本地人给你最真实的答案! 作为一名在宁夏从事旅游工作多年的本地...
文明乡风赋能 旅居产业兴村——... 冬日的会泽县雨碌乡小米村,晨霜为地面披上一层薄纱,澄澈的蓝天与青色的山峦相映成趣。当清晨的第一缕阳光...
北京环球度假区五周年官宣 九大... 自2021年开园以来,北京环球度假区已陪伴数千万游客走过四年欢乐时光。今日,度假区正式官宣:2026...