PyQt5学习笔记-从主窗体打开一个子窗体
软件环境:
Eric6+Python3.5+PyQt5
试验目标:
1.点击菜单项Open,打开一个子窗体
2.点击按钮Open,打开一个子窗体
主窗体设计:
1、增加一个菜单项Open
2、增加一个按钮Open
子窗体设计:
1、只放一个按钮Exit
设计步骤
1、创建主窗体
启动Eric6,点击顶部菜单Project,点击New,给出Project Name,同时设置项目路径,然后点下面的OK按钮
2、点击如下图的1图标,然后点New form
3、Select a form type,选择Main Window
4.文件名,设置为mainWindow,保存后,则是MainWindow.ui
5、增加菜单,在窗体区域,点鼠标右键,点“创建菜单栏”,这里只增加一个主菜单项File,两个子菜单项Open和Exit
6、在窗体上放置一个按钮Open,从左侧栏找到push button,拖拽到窗体上,修改按钮属性,objectName:btn_Open,Text:Open
7、然后点左上角的保存按钮,关闭Qt Designer
8、增加第子窗体,参照前面第2步,点New form,然后Select a form type,选择Widget,文件名:ChildForm.ui
9、在这个子窗体上增加一个按钮Exit ,从左侧栏拖一个push button,调整按钮大小,修改属性,objectName:btn_Exit,Text:Exit
点左上角的保存按钮,保存这个窗体文件,然后关闭Qt Designer
10、编译窗体,从XXX.ui文件生成ui_XXX.py文件
依次选中这两个文件,点鼠标右键,点Compile form
点窗体左侧的页签图标,可以看到增加了两个文件:Ui_MainWindow.py、Ui_ChildForm.py
11、Ui_MainWindow.py和Ui_ChildForm.py是界面文件,下面增加业务逻辑文件
点页签图标,选中MainWindow.ui文件,点鼠标右键,点选Generate Dialog Code菜单项
12、点New 按钮,className 为MainWindow,然后点OK按钮
13、绑定槽函数,
1)、绑定菜单项槽函数,选择on_ActionXXX_triggered()
依次点开actionExit(QAction)、actionOpen(QAction),勾选onAction_Exit_triggered()、onAction_Open_triggered()
2)、绑定按钮槽函数,点开btn_Open(QPushButton),勾选on_btn_Open_clicked()
3)、给子窗体绑定槽函数,选中Ui_ChildForm.ui,点鼠标右键,选中Generate Dialog Code菜单项,className命名为ChildForm
勾选on_btn_Exit_clicked()
14、重新编译两个窗体文件
选中一个ui文件,然后点鼠标右键,点选Compile all forms,生成代码文件
点页签,则可以看到,系统新增了两个文件MainWindow.py和ChildForm.py
15、开始完善代码
双击MainWindow.py,打开这个文件,编辑代码,进行相应完善,项目启动,从MainWindow.py进行启动,需要实例化窗体界面类,包括主窗体和子窗体
修改内容:
1)、把.Ui_MainWindow前面的点号去掉,不然运行会报错
2)、导入子窗体
增加语句:from Ui_ChildForm import Ui_ChildForm
16、附相关文件的代码:
1)、MainWindow.py
# -*- coding: utf-8 -*- """
Module implementing MainWindow.
""" from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QMainWindow, QWidget
from PyQt5 import QtWidgets from Ui_MainWindow import Ui_MainWindow
from Ui_ChildForm import Ui_ChildForm class MainWindow(QMainWindow, Ui_MainWindow):
"""
Class documentation goes here.
"""
def __init__(self, parent=None):
"""
Constructor @param parent reference to the parent widget
@type QWidget
"""
super(MainWindow, self).__init__(parent)
self.setupUi(self) @pyqtSlot()
def on_btn_Open_clicked(self):
"""
Slot documentation goes here.
"""
# TODO: not implemented yet
#raise NotImplementedError
ch.show() @pyqtSlot()
def on_actionOpen_triggered(self):
"""
Slot documentation goes here.
"""
# TODO: not implemented yet
#raise NotImplementedError
ch.show() @pyqtSlot()
def on_actionExit_triggered(self):
"""
Slot documentation goes here.
"""
# TODO: not implemented yet
#raise NotImplementedError
sys.exit(0) class ChildForm(QWidget, Ui_ChildForm):
def __init__(self):
#super(QWidget, self).__init__(parent)
super(QWidget, self).__init__()
self.setupUi(self)
self.btn_Exit.clicked.connect(self.close) if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv) #实例化主窗体
mainForm = MainWindow() #显示主窗体
mainForm.show() #实例化子窗体
ch=ChildForm() sys.exit(app.exec_())
2)、Ui_MainWindow.py
# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'C:\Work\Python\PyQt5\Test\MainWindow.ui'
#
# Created by: PyQt5 UI code generator 5.6
#
# WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralWidget = QtWidgets.QWidget(MainWindow)
self.centralWidget.setObjectName("centralWidget")
self.btn_Open = QtWidgets.QPushButton(self.centralWidget)
self.btn_Open.setGeometry(QtCore.QRect(210, 120, 81, 31))
self.btn_Open.setObjectName("btn_Open")
MainWindow.setCentralWidget(self.centralWidget)
self.menuBar = QtWidgets.QMenuBar(MainWindow)
self.menuBar.setGeometry(QtCore.QRect(0, 0, 800, 23))
self.menuBar.setObjectName("menuBar")
self.menuFile = QtWidgets.QMenu(self.menuBar)
self.menuFile.setObjectName("menuFile")
MainWindow.setMenuBar(self.menuBar)
self.actionOpen = QtWidgets.QAction(MainWindow)
self.actionOpen.setObjectName("actionOpen")
self.actionExit = QtWidgets.QAction(MainWindow)
self.actionExit.setObjectName("actionExit")
self.menuFile.addAction(self.actionOpen)
self.menuFile.addAction(self.actionExit)
self.menuBar.addAction(self.menuFile.menuAction()) self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.btn_Open.setText(_translate("MainWindow", "Open"))
self.menuFile.setTitle(_translate("MainWindow", "File"))
self.actionOpen.setText(_translate("MainWindow", "Open"))
self.actionExit.setText(_translate("MainWindow", "Exit")) if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
3)、ChildForm.py
# -*- coding: utf-8 -*- """
Module implementing ChildForm.
""" from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QWidget from Ui_ChildForm import Ui_Form class ChildForm(QWidget, Ui_Form):
"""
Class documentation goes here.
"""
def __init__(self, parent=None):
"""
Constructor @param parent reference to the parent widget
@type QWidget
"""
super(ChildForm, self).__init__(parent)
self.setupUi(self) @pyqtSlot()
def on_btn_Exit_clicked(self):
"""
Slot documentation goes here.
"""
# TODO: not implemented yet
raise NotImplementedError
4)、Ui_ChildForm.py
# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'C:\Work\Python\PyQt5\Test\ChildForm.ui'
#
# Created by: PyQt5 UI code generator 5.6
#
# WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_ChildForm(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(400, 300)
self.btn_Exit = QtWidgets.QPushButton(Form)
self.btn_Exit.setGeometry(QtCore.QRect(140, 110, 91, 41))
self.btn_Exit.setObjectName("btn_Exit") self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.btn_Exit.setText(_translate("Form", "Exit")) if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
ui = Ui_ChildForm()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())
本示例测试可以运行:
运行,点击顶部的运行图标
设置运行使用的Python解释器及命令行,Python 本项目MainWindow.py的路径,点OK按钮
运行结果:
点菜单项里的Open或点Open按钮,则弹出子窗体
点子窗体里的Exit按钮,则关闭子窗体
代码下载,百度网盘分享:
https://pan.baidu.com/s/1LzUVY2uPggEktCtACwC-JQ
提取码:i0qq
PyQt5学习笔记-从主窗体打开一个子窗体的更多相关文章
-
stm32学习笔记----双串口同时打开时的printf()问题
stm32学习笔记----双串口同时打开时的printf()问题 最近因为要使用串口2外接PN532芯片实现通信,另一方面,要使用串口1来将一些提示信息输出到上位机,于是重定义了printf(),使其 ...
-
如何实现MDI窗体不重复打开同一个子窗体?
使用MDI窗体时,默认是可以多次打开同一个子窗体的,那么如何控制不重复打开同一个子窗体呢?MDI窗体有个重要属性——MdiChildren,该属性表示MDI窗体打开的子窗体的数组,循环遍历该数组,可以 ...
-
Pyqt5学习笔记(一)
Python已有的GUI框架: Tkinter(python内嵌的GUI环境,使用TCL实现,易学易用,方便简单创GUI自带无需安装,适用于Unix.Windows和Mac系统组,在Tk8.0的后续版 ...
-
PyQt5学习笔记----标准文件打开保存框QFileDialog
单个文件打开 QFileDialog.getOpenFileName()多个文件打开 QFileDialog.getOpenFileNames() 文件夹选取 QFileDialog.getE ...
-
Python pyQt4/pyQt5 学习笔记1(空白窗口,按钮,控件事件,控件提示,窗体显示到屏幕中间,messagebox)
PyQt4是用来编写有图形界面程序(GUI applications)的一个工具包.PyQt4作为一个Python模块来使用,它有440个类和超过6000种函数和方法.同时它也是一个可以在几乎所有主流 ...
-
c#学习笔记之使用 TableLayoutPanel 控件设置窗体布局
使用 TableLayoutPanel 控件设置窗体布局 在 Visual Studio IDE 左侧,找到“工具箱”选项卡. 选择“工具箱”选项卡,随即将显示工具箱.(或者,在菜单栏上,依次选择“视 ...
-
MongoDB学习笔记~ObjectId主键的设计
回到目录 说一些关于ObjectId的事 MongoDB确实是最像关系型数据库的NoSQL,这在它主键设计上可以体现的出来,它并没有采用自动增长主键,因为在分布式服务器之间做数据同步很麻烦,而是采用了 ...
-
PyQt5学习笔记14----初识pyqt多线程操作
转载:翻滚吧挨踢男 首先来看一个例子: # coding=utf-8 __author__ = 'a359680405' from PyQt5.QtCore import * from PyQt5.Q ...
-
Python pyQt4/pyQt5 学习笔记2(状态栏、菜单栏和工具栏)
例子:状态栏.菜单栏和工具栏 import sys from PyQt4 import QtGui class Example(QtGui.QMainWindow): def __init__(sel ...
随机推荐
-
webstorm 运行配置gulp
打开Run/Debug Configurations,设置
-
XML 中对当前时间的引用
current_date 而不是 date 然而,在attrs 和 readonly中并不适用.
-
Android JNI之JAVA与C++对象建立对称关联(JNI优化设计,确保JNI调用的稳定性)
转载请声明:原文转自:http://www.cnblogs.com/xiezie/p/5930503.html Android JNI之JAVA与C++对象建立对称关联 1.JAVA对象持有C++对象 ...
-
redis主从,哨兵回忆手册
redis主从 持久化的开启与主从集群是否生效无关系 Slave Server同样是以非阻塞的方式完成数据同步.在同步期间,如果有客户端提交查询请求,Redis则返回同步之前的数据(注意初次同步则会阻 ...
-
js转换时间戳-转换成 yyyy-MM-dd HH:mm:ss
比如:转换成 yyyy-MM-dd HH:mm:ss //时间戳转换方法 date:时间戳数字 function formatDate(date) { var date = new Date(date ...
-
Ubuntu 18.04搭建Git服务器
学习链接:博客园.廖雪峰 一 前言 前面已经贴了两个链接,为什么还要再写一篇呢,因为可能由于个人能力问题,我觉得上面两篇写的都有点简略,有些地方不太好理解,并不能一次性成功搭建,所以想根据自己踩过的坑 ...
-
linux下mysql5.7以上my.cnf配置文件配置
简单配置,低配置服务器配置 [client] #客户端设置 port = 3306 socket = /data/mysql/data/mysql.sock default-character-set ...
-
Java继承Exception自定义异常类教程以及Javaweb中用Filter拦截并处理异常
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6403033.html 在项目中的应用见: https://github.com/ygj0930/CoupleS ...
-
开源项目:MMTweenAnimation
本文转载至 http://adad184.com/2015/04/14/opensource-mmtweenanimation/ 前言 MMTweenAnimation其实酝酿了有一段时间了 起因是对 ...
-
ReentrantLock synchronized
关于互斥锁: 所谓互斥锁, 指的是一次最多只能有一个线程持有的锁. 在jdk1.5之前, 我们通常使用synchronized机制控制多个线程对共享资源的访问. 而现在, Lock提供了比synchr ...