• pyQt界面制作(登录+跳转页面)


    4.1制作登录界面

    首先打开Qt-Designer,选择Widget,它和Main Window的区别在于:Main Window有工具栏菜单栏状态栏等,而Widget就适合做个简单的登录界面。如下图:

     

    首先如下列图,在这里可以设置标题为登录,然后插入一个logo图片,也可以给字体标题设置大小样式等。

    接下来输入框都是用Line Edit,登录按钮是Push Button。设置登录界面大小固定,禁止随意缩放,将其最大窗口和最小窗口都设为长380,宽300。

    密码设置为password形式,其密码设置为1234,点击登录按钮可以进入主界面。

    4.2制作主界面

    接下来再新建,选择Main Window,Main Window有工具栏菜单栏状态栏等,适合做主界面。如下图:

     

    其中点击绘图按钮,可以出图,点击取消则返回上一页(登录页),如下代码部分是对中间绘图区域的样式设置:

    self.label_3.setObjectName("label_3")
    self.label_3.setFrameShape(QtWidgets.QFrame.Box)
    # 设置阴影 据说只有加了这步才能设置边框颜色。///可选样式有RaisedSunkenPlain(这个无法设置颜色)等
    self.label_3.setFrameShadow(QtWidgets.QFrame.Raised)
    # 设置背景颜色,包括边框颜色
    # self.label.setStyleSheet()
    self.label_3.setFrameShape(QFrame.Box)
    # 设置边框样式
    # 设置背景填充颜色'background-color: rgb(0, 0, 0)'
    # 设置边框颜色border-color: rgb(255, 170, 0);
    self.label_3.setStyleSheet( 'border-width: 1px;border-style: solid;border-color: rgb(255, 170, 0);background-color: rgb(100, 149, 237);')

    4.3 pyqt界面代码实现

    界面开发完成后,将.ui文件转换为.py文件。将login.ui和main.ui转换成login.py文件和main.py。放置好控件之后,保存会是以ui文件的形式。这时候需要使用PyUIC工具来将其转化为Py文件才能在Pycharm中打开。打开转化完成的Python文件,可以看到整个界面是以一个类的形式编写的,这时候是不能直接运行的。因为现在只是一个类,我们需要将其进行实例化。

    如何显示我们创建好的GUi程序,我们需要QtWidgets.QMainWindow()中的show()函数来显示界面。这里一般有三种写法。

    第一种是直接实例化一个QtWidgets.QMainWindow()类,然后使用show()函数。

    第二种是创建一个新的类,同时继承QtWidgets.QMainWindow()和UI_MainWindow()两个类,这样这个新的类就会同时拥有两个类的方法。

    第三种是让UI_MainWindow()继承QtWidgets.QMainWindow(),并且i重写其中的def init()方法。

    本设计设计界面与业务逻辑分离实现

    这一步主要实现业务逻辑,也就是点击登录和退出按钮后程序要执行的操作。为了后续维护方便,采用界面与业务逻辑相分离来实现。也就是通过创建主程序调用界面文件方式实现。这有2个好处。第1就是实现逻辑清晰。第2就是后续如果界面或者逻辑需要变更,好维护。新建index.py文件程序,调用login.py文件和main.pyindex.py文件代码如下:

    1. import sys
    2. from PyQt5 import QtCore, QtGui, QtWidgets
    3. from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton
    4. # 导入login.py、main.py里面全部内容
    5. import login
    6. import main
    7. from PyQt5.QtCore import Qt
    8. class Win_Login:
    9.     def __init__(self):
    10.         self.ui = QUiLoader().load(login.ui)
    11. class main(main.Ui_MainWindow, QMainWindow):
    12.     def __init__(self):
    13.         super(main, self).__init__()
    14.         self.setupUi(self)  # 初始化
    15.         self.pushButton_1.clicked.connect(self.display)
    16.     def display(self):
    17.         self.label_3.resize(400, 300)  # 重设Label大小
    18.         self.label_3.setScaledContents(True)  # 设置图片自适应窗口大小
    19.         self.label_3.setPixmap(QtGui.QPixmap("CO2.png"))
    20.   class login(login.Ui_Form, QMainWindow):
    21.     def __init__(self):
    22.         super(login, self).__init__()
    23.         self.setupUi(self)
    24. if __name__ == '__main__':
    25.     QApplication.setAttribute(Qt.AA_EnableHighDpiScaling)  # 支持高分屏自动缩放
    26.     app = QApplication(sys.argv)
    27.     # 为main_window类和login_window类创建对象
    28.     main_window = main()
    29.     login_window = login()
    30.     # 显示登陆窗口
    31.     login_window.show()
    32.     # 将显示main_window与单击登录页面按钮绑定
    33.     login_window.btn_login.clicked.connect(main_window.show)
    34.     main_window.pushButton_2.clicked.connect(main_window.close)
    35.     # 关闭程序,释放资源
    36.     sys.exit(app.exec_())

    问题补充:

    (1)但是此时又遇到问题,设计的界面大小和pycharm运行后的显示窗口大小不一致,见下图,查了资料发现是分辨率问题,所以需要在显示窗口函数加一句话:

    QApplication.setAttribute(Qt.AA_EnableHighDpiScaling)

    #支持高分屏自动缩放。

     

    2这里调用爆红了,为什么呢?是因为它没把这个目录当成模块的目录,可以设置将此目录生成源代码目录。

     

    4.4 最终实现的功能界面样式

     

     

  • 相关阅读:
    Linux常用命令 - 简单命令
    Scala爬虫程序爬取建筑业数据采集
    CF696B Puzzles 题解
    机器人动力学模型与MATLAB仿真
    【Python】Python列表排序 list.sort方法和内置函数sorted用法
    LVGL---标签(lv_label)
    【Linux】《Linux命令行与shell脚本编程大全 (第4版) 》笔记-ChapterB-sed 和 gawk 快速指南
    基于Android的小说电子书阅读app
    Appium自动化环境搭建保姆级教程
    基于java小组学习系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
  • 原文地址:https://blog.csdn.net/m0_63172128/article/details/125564561