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

这篇具有很好参考价值的文章主要介绍了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
python qt5 多界面,qt,ui,开发语言,python
目录结构:
python qt5 多界面,qt,ui,开发语言,python

main_widget.py

from PyQt5 import QtCore, QtGui, QtWidgets

# 这些代码都是Qt设计师画出来,自动生成的, 当然也可以自己写
class Ui_mainWidget(object):
    def setupUi(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)

    def retranslateUi(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


class Ui_slaveWidget(object):
    def setupUi(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)

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

image_viewer.py

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_imageViewer(object):
    def setupUi(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)

    def retranslateUi(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


class Main(QWidget, Ui_mainWidget):
    def __init__(self):
        super(Main, self).__init__()
        self.setupUi(self)


class Slave(QWidget, Ui_slaveWidget):
    def __init__(self):
        super(Slave, self).__init__()
        self.setupUi(self)

    def show_widget(self):
        # 展示当前widget
        self.show()


class ImageViewer(QWidget, Ui_imageViewer):
    def __init__(self):
        super(ImageViewer, self).__init__()
        self.setupUi(self)
        # 存储图片对象
        self.pixmap = QPixmap()
        self.open_img.clicked.connect(self.select)

    def show_widget(self):
        self.show()

    def select(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 效果展示

python qt5 多界面,qt,ui,开发语言,python文章来源地址https://www.toymoban.com/news/detail-787835.html

到了这里,关于PyQt5 框架搭建+实战(多窗口打开,文件对话框)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PyQt5设计好UI界面后,通过Python文件打开,控件集中在左上角问题解决方案

            在用PyQt5做GUI界面时遇到的一个问题,在QtDesigner预览的界面正常,但是转换成.py文件后show()出来的界面,控件都挤在左上角无法使用。 目录 一、问题 1.QtDesigner预览的界面正常​编辑 2.转换.py文件后通过show()方法,显示异常 二,解决方法 1.在MainWindow = QtWidgets.QM

    2024年02月04日
    浏览(47)
  • 【Python】Pyqt5 主窗口调用子窗口demo

    背景: 通过主窗口的按钮调用其对应的窗口,代码比较简单,直接看,不懂的欢迎留言; 一共两个代码: ui_first.py :实现的是主窗口 ui_second.py:实现的是子窗口 点击开始按钮调用子窗口,点击关闭退出窗口; ui_first.py ui_second.py

    2024年02月11日
    浏览(43)
  • python GUI工具之PyQt5模块,pyCharm 配置PyQt5可视化窗口

    https://doc.qt.io/qt-5/qtwidgets-module.html https://doc.qt.io/qt-5/qt.html#AlignmentFlag-enum 一、简介 PyQt是Qt框架的Python语言实现,由Riverbank Computing开发,是最强大的GUI库之一。PyQt提供了一个设计良好的窗口控件集合,每一个PyQt控件都对应一个Qt控件。 PyQt5是由一系列Python模块组成,有超过6

    2024年02月11日
    浏览(53)
  • pyqt5窗口图标和背景的设置方法

    pyqt5窗口图标和背景的设置方法 一、PyQt5设置窗口图标的方法: 1.导入PyQt5.QtGui下的QIcon模块        from PyQt5.QtGui import QIcon 2.添加窗口的WindowIcon属性        Form.setWindowIcon(QIcon(\\\'./imge/azc.ico\\\')) 二、PyQt5设置窗口背景的方法: 第一种方法:使用窗口的StyleSheet属性方法(注意选择

    2024年02月04日
    浏览(47)
  • Pyqt5实现新线程更新窗口UI

    我们用pyqt5开发窗口应用时,应用会执行一些耗时的操作,如复制大量文件,下载大量数据等。一般情况下,在这些操作没有完成时,窗口的UI处于“假死”状态,不会更新,只有所有操作完成后,窗口的状态才会更新。这样对用户使用非常不友好。 使用多线程技术,在新线

    2024年02月13日
    浏览(45)
  • Python使用PyQt5实现指定窗口置顶

    工作中,同事随口提了一句:要是能让WPS窗口置顶就好了,老是将窗口切换来切换去的太麻烦了。 然后,这个奇怪的点子引起了本人的注意,那就试试能不能实现吧。 不知道是不是我手法或版本的缘故,用了网上找的代码都是窗口弹出而已,并没有把它置顶,可以参考以下

    2024年02月13日
    浏览(56)
  • pyqt5设置标题栏三个按钮以及窗口大小

    组件也会受影响,范围0-1,0是全透明,1是不透明

    2024年02月13日
    浏览(49)
  • PyQt5:窗口大小根据屏幕大小自适应调整

     

    2024年02月12日
    浏览(52)
  • Rust UI开发(三):iced如何打开图片(对话框)并在窗口显示图片?

    注:此文适合于对rust有一些了解的朋友 iced是一个跨平台的GUI库,用于为rust语言程序构建UI界面。 这是一个系列博文,本文是第三篇,前两篇的链接: 1、Rust UI开发(一):使用iced构建UI时,如何在界面显示中文字符 2、Rust UI开发(二):iced中如何为窗口添加icon图标 本篇是

    2024年02月04日
    浏览(95)
  • Pyqt5打开电脑摄像头进行拍照

    目录 1、设计UI界面 2、设计逻辑代码,建立连接显示窗口 3、结果 1、设计UI界面 将ui界面转为py文件后获得的逻辑代码为:(文件名为  Camera.py ) 2、设计逻辑代码,建立连接显示窗口 逻辑代码如下:(文件名为 Camera_main.py ) 3、结果 参考:暂未成功人士

    2024年02月12日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包