0


PyQt5 框架搭建+实战(多窗口打开,文件对话框)

1 PyQt5框架搭建步骤

1.Qt设计师界面创建主窗口

2.转化成py文件

3.建立一个主窗口类,继承Qwidget和Qt设计师生成的UI类

4.写一个main函数入口,创建app,创建主窗口类实例,show(), app.exec()

我们不要在Qt设计师生成的界面上去增加我们的代码,因为这个界面我们一直都需要修改,修改后生成新的py代码后,之前修改的代码就消失了。最好的办法就是创建一个类去继承UI类,然后修改。

2 图片查看器实战

例子:创建一个主窗体,能够通过按钮单击跳转到子窗体,有两个子窗体,第二个子窗体能够打开图片进行查看。

QT界面:

主窗体有两个按钮,实现跳转到子窗体

子窗体只是演示成功跳转界面,有一个LineEdit

图片查看器窗体有一个Label标签显示图片,打开图片按钮可以调用打开对话框选取图片

所有建立的窗体都是widget
在这里插入图片描述
目录结构:
在这里插入图片描述

main_widget.py

from PyQt5 import QtCore, QtGui, QtWidgets

# 这些代码都是Qt设计师画出来,自动生成的, 当然也可以自己写classUi_mainWidget(object):defsetupUi(self, mainWidget):
        mainWidget.setObjectName("mainWidget")
        mainWidget.resize(400,300)
        self.btn_open = QtWidgets.QPushButton(mainWidget)
        self.btn_open.setGeometry(QtCore.QRect(110,60,141,41))# 第一个按钮名字,和他的标题区分开来
        self.btn_open.setObjectName("btn_open")
        self.btn_img = QtWidgets.QPushButton(mainWidget)
        self.btn_img.setGeometry(QtCore.QRect(110,120,141,41))# 第二个按钮名字
        self.btn_img.setObjectName("btn_img")

        self.retranslateUi(mainWidget)
        QtCore.QMetaObject.connectSlotsByName(mainWidget)defretranslateUi(self, mainWidget):
        _translate = QtCore.QCoreApplication.translate
        # 窗口标题
        mainWidget.setWindowTitle(_translate("mainWidget","主窗体"))# 按钮标题
        self.btn_open.setText(_translate("mainWidget","打开第二个widget"))
        self.btn_img.setText(_translate("mainWidget","打开图片widget"))

slave_widget.py

from PyQt5 import QtCore, QtGui, QtWidgets

classUi_slaveWidget(object):defsetupUi(self, slaveWidget):
        slaveWidget.setObjectName("slaveWidget")
        slaveWidget.resize(400,300)
        self.lineEdit = QtWidgets.QLineEdit(slaveWidget)
        self.lineEdit.setGeometry(QtCore.QRect(90,80,221,61))
        self.lineEdit.setObjectName("lineEdit")

        self.retranslateUi(slaveWidget)
        QtCore.QMetaObject.connectSlotsByName(slaveWidget)defretranslateUi(self, slaveWidget):
        _translate = QtCore.QCoreApplication.translate
        slaveWidget.setWindowTitle(_translate("slaveWidget","子窗体"))
        self.lineEdit.setText(_translate("slaveWidget","这是第二个窗体"))

image_viewer.py

from PyQt5 import QtCore, QtGui, QtWidgets

classUi_imageViewer(object):defsetupUi(self, imageViewer):
        imageViewer.setObjectName("imageViewer")
        imageViewer.resize(746,474)
        self.img = QtWidgets.QLabel(imageViewer)
        self.img.setGeometry(QtCore.QRect(30,20,681,371))
        self.img.setScaledContents(True)
        self.img.setAlignment(QtCore.Qt.AlignCenter)
        self.img.setObjectName("img")
        self.open_img = QtWidgets.QPushButton(imageViewer)
        self.open_img.setGeometry(QtCore.QRect(270,420,151,41))
        self.open_img.setObjectName("open_img")

        self.retranslateUi(imageViewer)
        QtCore.QMetaObject.connectSlotsByName(imageViewer)defretranslateUi(self, imageViewer):
        _translate = QtCore.QCoreApplication.translate
        imageViewer.setWindowTitle(_translate("imageViewer","图片查看器"))
        self.img.setText(_translate("imageViewer","TextLabel"))
        self.open_img.setText(_translate("imageViewer","打开图片"))

开始创建窗体类和 main 函数入口:

main.py

import sys
from PyQt5.QtWidgets import QWidget,QApplication,QFileDialog
# 图片装载的容器from PyQt5.QtGui import QPixmap

from main_widget import Ui_mainWidget
from slave_Widget import Ui_slaveWidget
from image_viewer import Ui_imageViewer

classMain(QWidget, Ui_mainWidget):def__init__(self):super(Main, self).__init__()
        self.setupUi(self)classSlave(QWidget, Ui_slaveWidget):def__init__(self):super(Slave, self).__init__()
        self.setupUi(self)defshow_widget(self):# 展示当前widget
        self.show()classImageViewer(QWidget, Ui_imageViewer):def__init__(self):super(ImageViewer, self).__init__()
        self.setupUi(self)# 存储图片对象
        self.pixmap = QPixmap()
        self.open_img.clicked.connect(self.select)defshow_widget(self):
        self.show()defselect(self):print("选择图片!")# 文件对话框实例化
        file_dialog = QFileDialog()# getOpenFileName参数:接收对象(一般就是当前对象), 对话框名字,打开路径, 文件过滤器(固定写法)""""
        关于文件过滤器写法:过滤器名字(*.c *.h);;
        过滤器名字是自己定义的,*.c代表文件夹中所有c文件,以两个分号结尾
        例如:"Images(*.png *.xpm *.jpg *.png);;C Source File(*.c *.h *.cpp);;"
        """
        filename = file_dialog.getOpenFileName(self,"打开图片","F:/images","Images(*.png *.xpm *.jpg *.png);;")print("filename:", filename)# filename是一个元组,第0个元素就是文件路径# 加载图片对象到pixmap
        self.pixmap.load(filename[0])
        self.img.setPixmap(self.pixmap)# UI设置,将图片以pixmap对象设置到label上if __name__ =="__main__":
    app = QApplication(sys.argv)

    w_main = Main()
    w_slave = Slave()
    w_image = ImageViewer()

    w_main.show()# 打开其他窗口的方法,连接其它窗口的show函数
    w_main.btn_open.clicked.connect(w_slave.show_widget)
    w_main.btn_img.clicked.connect(w_image.show_widget)

    sys.exit(app.exec_())

3 效果展示

在这里插入图片描述

标签: qt ui 开发语言

本文转载自: https://blog.csdn.net/qingjiao_fa/article/details/128724799
版权归原作者 铅笔小建 所有, 如有侵权,请联系我们删除。

“PyQt5 框架搭建+实战(多窗口打开,文件对话框)”的评论:

还没有评论