赞
踩
1.Qt设计师界面创建主窗口
2.转化成py文件
3.建立一个主窗口类,继承Qwidget和Qt设计师生成的UI类
4.写一个main函数入口,创建app,创建主窗口类实例,show(), app.exec()
我们不要在Qt设计师生成的界面上去增加我们的代码,因为这个界面我们一直都需要修改,修改后生成新的py代码后,之前修改的代码就消失了。最好的办法就是创建一个类去继承UI类,然后修改。
例子:创建一个主窗体,能够通过按钮单击跳转到子窗体,有两个子窗体,第二个子窗体能够打开图片进行查看。
QT界面:
主窗体有两个按钮,实现跳转到子窗体
子窗体只是演示成功跳转界面,有一个LineEdit
图片查看器窗体有一个Label标签显示图片,打开图片按钮可以调用打开对话框选取图片
所有建立的窗体都是widget
目录结构:
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_())
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。