pyqt5 将值传给下一个窗体_Python+PyQt5进阶(6)

本篇介绍PyQt5的多窗口应用,在设计程序界面时候,经常会用到多窗口界面。

新建两个窗口

一个主窗口QMainWindow,一个QWidget。在主窗口中放入一个QTabWidget作为窗体的容器,没有子窗体时候QTabWidget不会显示。在子窗体中放入一个QPlainText文本显示控件,显示文本内容。

e3818e2520712f6de3c739ac682718ef.png

主窗口

fc96a43598a257c122d415ea2ab70d0f.png

子窗口

主窗体设计

  • paintEvent(self, event):重写paintEvent时间,当窗口大小发生改变时候,自动重新绘制背景图片。
  • taWidget_tabCloseRequest(self, index):关闭QTableWidget中的一个窗口。每个窗口都有一个不同的索引index,可以通过不同的index来切换或者删除界面。
  • actDockWidget_triggered(self):嵌入窗口按钮的槽函数,先实例化一个Form,直接在QTabWidget添加界面tab,这个方法是让子窗体显示在QTableWidget控件中。
  • actSeqWidget_triggered(self):独立的窗口按钮槽函数。用show()来显示窗口。newForm1.setWindowOpacity(0.9)是用来显示窗口的透明度。
class MainWindow(QMainWindow, Ui_MainWindow):    currentPath = os.getcwd()    def __init__(self, parent=None):        super(MainWindow, self).__init__(parent)        self.setupUi(self)        self.tabWidget.setVisible(False)        self.tabWidget.clear()        self.tabWidget.setTabsClosable(True)        self.tabWidget.setDocumentMode(True)        # self.setWindowState(Qt.WindowMaximized)        self.setAutoFillBackground(True)        self.background = QPixmap(self.currentPath+"Images4.jpg")        self.tabWidget.tabCloseRequested.connect(self.taWidget_tabCloseRequest)        self.actDockWidget.triggered.connect(self.actDockWidget_triggered)        self.actSepWidget.triggered.connect(self.actSeqWidget_triggered)    def paintEvent(self, event):        painter = QPainter(self)        painter.drawPixmap(0, self.toolBar.height(), self.width(), self.height()-self.toolBar.height()                           -self.statusBar().height(), self.background)        super(MainWindow, self).paintEvent(event)    def tabWidget_indexChanged(self):        tabExist = self.tabWidget.count() > 0        self.tabWidget.setVisible(tabExist)    def taWidget_tabCloseRequest(self, index):        if index >= 0:            form = self.tabWidget.widget(index)            form.close()        else:            return    def actDockWidget_triggered(self):        try:            newForm1 = Form1(self)            newForm1.setAttribute(Qt.WA_DeleteOnClose)            newForm1.fileOpen.connect(self.fileChanged)            title = "page %d" % self.tabWidget.count()            curIndex = self.tabWidget.addTab(newForm1, title)            self.tabWidget.setCurrentIndex(curIndex)            self.tabWidget.setVisible(True)        except Exception as e:            print(e)    def fileChanged(self, fileName):        index = self.tabWidget.currentIndex()        self.tabWidget.setTabText(index, fileName)    def actSeqWidget_triggered(self):        newForm1 = Form1(self)        newForm1.setAttribute(Qt.WA_DeleteOnClose)        newForm1.setWindowTitle("独立的窗口")        newForm1.setWindowFlag(Qt.Window, True)        newForm1.setWindowOpacity(0.9)        newForm1.show()

子窗体设计

  • initForm(self):Form1是继承了QWidget类,在UI Designer中无法通过工具栏来添加Action,只能通过代码创建Action。
  • actOpen_triggered(self):本篇只演示一个打开文件的案例,其余的可参考以前的Demo,这里不做过多的赘述。读取一个txt或者py文件。
class Form1(QWidget):    currentPath = os.getcwd()    fileOpen = pyqtSignal(str)    def __init__(self, parent=None):        super(Form1, self).__init__(parent)        self.form1 = Ui_Form1()        self.form1.setupUi(self)        self.initForm()        self.form1.actOpen.triggered.connect(self.actOpen_triggered)    def initForm(self):        toolBar = QToolBar("文档编辑", self)        toolBar.addAction(self.form1.actOpen)        toolBar.addAction(self.form1.actFont)        toolBar.addSeparator()        toolBar.addAction(self.form1.actCut)        toolBar.addAction(self.form1.actCopy)        toolBar.addAction(self.form1.actPaste)        toolBar.addSeparator()        toolBar.addAction(self.form1.actRedo)        toolBar.addAction(self.form1.actUndo)        toolBar.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)        layout = QVBoxLayout()        layout.addWidget(toolBar)        layout.addWidget(self.form1.plainTextEdit)        layout.setContentsMargins(2, 2, 2, 2)        layout.setSpacing(2)        self.setLayout(layout)    def actOpen_triggered(self):        file, flt = QFileDialog.getOpenFileName(self, "打开一个文件", self.currentPath, "文本文件(*.txt, *.py)")        if file == "":            return        self.form1.plainTextEdit.clear()        openFile = open(file, 'r', encoding='UTF-8')        for i in openFile:            self.form1.plainTextEdit.appendPlainText(i.strip())        font = self.form1.plainTextEdit.font()        font.setPointSize(10)        self.form1.plainTextEdit.setFont(font)        baseFileName = os.path.basename(file)        self.setWindowTitle(baseFileName)        self.fileOpen.emit(baseFileName)

运行一下

e8140b7cf54dc2adfe9f612d66a7d8d8.gif

嵌入式窗口

f2761f7968b2d9e1db25ce011f8f3fc6.gif

独立窗口

一个简单的案例介绍多窗口的使用,如果需要源代码可关注私聊,感谢支持!!!!

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值