pyqt5实现窗口跳转并关闭上一个窗口
关键在于要定义一个关闭窗体的函数colsewin()
然后将按键与该函数连接(connect)在一起即可
import sys
from PyQt5.QtWidgets import QMainWindow, QPushButton, QApplication class First(QMainWindow):
def __init__(self):
super().__init__() self.initUI()
def closewin(self):
self.close() def initUI(self):
self.btn = QPushButton("Button", self)
self.btn.move(30, 50) self.setGeometry(300, 300, 500, 500)
self.setWindowTitle('Event sender')
self.show() class Second(QMainWindow):
def __init__(self):
super().__init__() self.initUI() def initUI(self):
self.setGeometry(300, 300, 290, 150)
self.setWindowTitle('Get sender') if __name__ == '__main__':
app = QApplication(sys.argv)
a = First()
b = Second()
a.show()
a.btn.clicked.connect(a.closewin)
a.btn.clicked.connect(b.show)
sys.exit(app.exec_())
UI.py文件
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import sys class Communicate(QObject):
closeApp = pyqtSignal() class Example1(QMainWindow):
_startPos = None
_endPos = None
_isTracking = False def __init__(self):
super().__init__()
self.initUI()
self.center()
def closewin(self):
self.close() def center(self, screenNum=0):
'''多屏居中支持''' screen = QDesktopWidget().screenGeometry()
size = self.geometry() self.normalGeometry2 = QRect((screen.width() - size.width()) / 2 + screen.left(),
(screen.height() - size.height()) / 2, size.width(), size.height())
self.setGeometry((screen.width() - size.width()) / 2 + screen.left(),
(screen.height() - size.height()) / 2, size.width(), size.height()) def initUI(self):
self.setFixedSize(QSize(400, 300)) self.setWindowFlags(Qt.FramelessWindowHint) # 无边框
btn1 = QPushButton("Button 1", self)
btn1.move(80, 150) btn2 = QPushButton("Button 2", self)
btn2.move(220, 150)
btn3 = QPushButton("☜",self)
btn3.move(0, 0)
btn4 = QPushButton("☞", self)
btn4.move(300, 260) btn1.clicked.connect(self.buttonClicked)
btn2.clicked.connect(self.buttonClicked)
btn3.clicked.connect(self.buttonClicked)
btn3.clicked.connect(self.closewin)
btn4.clicked.connect(self.buttonClicked)
btn4.clicked.connect(self.closewin) self.statusBar() self.c = Communicate()
self.c.closeApp.connect(self.close) self.setGeometry(300, 300, 290, 150)
self.setWindowTitle('Event sender')
self.window().setStyleSheet('''
QPushButton{
border:none;
color:black;
font-size:20px;
height:40px;
padding-left:5px;
padding-right:10px;
text-align:left;
}
QPushButton:hover{
color:red;
border:1px solid #F3F3F5;
border-radius:10px;
background:LightGray;
} QMainWindow{
background:gray;
border-top:1px solid white;
border-bottom:1px solid white;
border-left:1px solid white;
border-right:1px solid white;
border-top-left-radius:12px;
border-bottom-left-radius:12px;
border-top-right-radius:12px;
border-bottom-right-radius:12px;
}
''')
self.show() def buttonClicked(self):
sender = self.sender()
self.statusBar().showMessage(sender.text() + ' was pressed')
if sender.text()=="Button 1": print("执行%s"%sender.text())
elif sender.text()=="Button 2":
print("执行%s"%sender.text())
elif sender.text()=="☜":
print("执行%s"%sender.text()) import qt5
self.qt = qt5.Example()
self.qt._initUI()
self.qt.center()
else:
print("执行%s"%sender.text())
import qt5
self.qt=qt5.Example()
self.qt._initUI()
self.qt.center() def mouseMoveEvent(self, e: QMouseEvent): # 重写移动事件
self._endPos = e.pos() - self._startPos
self.move(self.pos() + self._endPos) def mousePressEvent(self, e: QMouseEvent):
if e.button() == Qt.LeftButton:
self._isTracking = True
self._startPos = QPoint(e.x(), e.y()) def mouseReleaseEvent(self, e: QMouseEvent):
if e.button() == Qt.LeftButton:
self._isTracking = False
self._startPos = None
self._endPos = None if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example1()
sys.exit(app.exec_())
qt5文件:
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import sys
class Example(QWidget):
_startPos = None
_endPos = None
_isTracking = False def __init__(self):
super().__init__()
self._initUI()
self.center()
#self.Use_Qss()
#self.show()
def closewindow(self):
self.close() def center(self, screenNum=0):
'''多屏居中支持''' screen = QDesktopWidget().screenGeometry()
size = self.geometry() self.normalGeometry2 = QRect((screen.width() - size.width()) / 2 + screen.left(),
(screen.height() - size.height()) / 2, size.width(), size.height())
self.setGeometry((screen.width() - size.width()) / 2 + screen.left(),
(screen.height() - size.height()) / 2, size.width(), size.height()) def _initUI(self):
#self.resize(800, 400)
self.setWindowFlags(Qt.FramelessWindowHint) # 无边框
#def Use_Qss(self):
palette = QPalette()
palette.setBrush(QPalette.Background, QBrush(QPixmap("./p1.jpg")))
self.setPalette(palette)
#self.setObjectName("MainWindow")
# #todo 1 设置窗口背景图片
#self.setStyleSheet("#MainWindow{border-image:url(.\p1.jpg);}")
# todo 2 设置窗口背景色
#self.setStyleSheet("#MainWindow{background-color: gray}")
btn1 = QPushButton("back", self)
btn1.move(240, 300)
btn1.setStyleSheet(
'''QPushButton{
border:none;
color:white;
background:blue;
border:1px solid #F3F3F5;
border-radius:10px;
font-size:20px;
height:40px;
padding-left:5px;
padding-right:10px;
text-align:left;
}
QPushButton:hover{
color:black;
border:1px solid #F3F3F5;
border-radius:10px;
background:LightGray;
}
''')
btn1.clicked.connect(self.buttonClicked)
btn1.clicked.connect(self.closewindow)
self.lb1 = QLabel(self)
qle = QLineEdit(self) qle.move(60, 300)
self.lb1.move(60, 40)
qle.setStyleSheet(
'''QLineEdit{
border:1px solid gray;
background:cyan;
width:120px;
border-radius:10px;
padding:2px 4px;
font-family: 微软雅黑,宋体,Arial,Helvetica,Verdana,sans-serif;
}''')
self.lb1.setStyleSheet(
'''QLabel{
color:red;
font-size:60px;
font-family: 微软雅黑,宋体,Arial,Helvetica,Verdana,sans-serif;
}
'''
) qle.textChanged[str].connect(self.onChanged) self.setGeometry(600, 300, 480, 370)
self.setWindowTitle('单行文本')
self.show()
def buttonClicked(self):
import UI
self.qt = UI.Example1()
self.qt.initUI()
self.qt.center() def onChanged(self, text):
self.lb1.setText(text)
self.lb1.adjustSize() def mouseMoveEvent(self, e: QMouseEvent): # 重写移动事件
self._endPos = e.pos() - self._startPos
self.move(self.pos() + self._endPos) def mousePressEvent(self, e: QMouseEvent):
if e.button() == Qt.LeftButton:
self._isTracking = True
self._startPos = QPoint(e.x(), e.y()) def mouseReleaseEvent(self, e: QMouseEvent):
if e.button() == Qt.LeftButton:
self._isTracking = False
self._startPos = None
self._endPos = None if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
效果图:

btn1按键透明化:
op =QGraphicsOpacityEffect()
# 设置透明度的值,0.0到1.0,最小值0是透明,1是不透明
op.setOpacity(0.5)
btn1.setGraphicsEffect(op)
效果图:

pyqt5实现窗口跳转并关闭上一个窗口的更多相关文章
- C# winForm 窗口跳转后关闭上一个窗口的方法
FrmMain main = new FrmMain(); main.Owner = this; this.Hide(); main.ShowDialog(); Application.ExitThr ...
- QT实现窗口缩放打开与关闭(重叠窗口,太有意思了)
基本思想:假设A为主窗口,B为子窗口.A打开或关闭时,先对A窗口进行截图,然后将图片部满整个B窗口的,在paintEvent里面进行动态缩放或放大画图.最后使用动画,将B窗口以动画的形式打开或关闭,动 ...
- vs code在打开新文件是覆盖上一个窗口的问题
设置里面有个 enablePreview 去掉就好
- PyQt5窗口关闭问题---关闭主程序的窗口但子窗口仍显示的问题
使用PyQt5做界面开发时,如果做一个较复杂的程序时往往会涉及到在主程序中打开某个菜单弹出子窗口的问题,如果在打开很多子窗口的时候想一键退出关闭主窗口,但其它的子窗口仍然正常显示着,那么如何在代码中进 ...
- WinForm------如何跳转另一个窗口,同时关闭当前窗口
添加一个按钮,并为按钮添加点击事件(注:Frm_Main为需要跳转的窗口名字) private void Btn_OK_Click(object sender, EventArgs e) { //打开 ...
- 简单数学算法demo和窗口跳转,关闭,弹框
简单数学算法demo和窗口跳转,关闭,弹框demo <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&quo ...
- Duilib 实现右下角弹出像QQ新闻窗口,3秒后窗口透明度渐变最后关闭,若在渐变过程中鼠标放到窗口上,窗口恢复最初状态(二)
效果: 1.定义两个个定时器ID #define ID_TIMER_DISPLAY_DELAY 30 #define ID_TIMER_DISPLAY_CLOSE 40 2.添加一个成员函数和成员变量 ...
- js页面跳转 和 js打开新窗口 方法
js页面跳转 和 js打开新窗口 方法 第一种: 第二种: 第三种: 第四种: 第五种: 1.在原来的窗体中直接跳转用 window.location.href="你所要跳转的页面" ...
- Javascript跳转页面和打开新窗口等方法
1.在原来的窗体中直接跳转用onClick="window.location.href='你所要跳转的页面';" 2.在新窗体中打开页面用:onclick="window ...
随机推荐
- CMD下编译运行Java程序
准备1:JDK下好了 准备2:环境变量配置好了 准备3:本次测试用的是JDK8,用JDK10的在Eclipse里面好像用不了 满足上面三个条件,那可以继续看下去了 Test_1:带包编译运行 代码: ...
- WPF LiveChart 图表详解
//参考网址:https://www.cnblogs.com/zh7791/p/12617961.html 本文主要介绍LiveChart.WPF 中的图表的使用方法 类: 数据绑定, 数据显示样式等 ...
- .NET Core程序发布报错:project.assets.json”没有“.NETCoreApp,Version=v3.1/win-x64”的目标。确保已运行还原,且“netcoreapp3.1”已包含在项目的 TargetFrameworks中。
在控制台中使用命令发布.NET Core程序的时候,报如下的错误: project.assets.json"没有".NETCoreApp,Version=v3.1/win-x64& ...
- 微信小程序学习笔记五 常见组件
1. 常见组件 重点讲解小程序中常用的布局组件 1.1 view 代替 原来的div标签 <!-- pages/index/index.wxml --> <view hover-cl ...
- openstack新建实例各种报错解决
最近自己装了下Openstack,零基础安装,参照了网上不少教程. 吃了百家饭的后果,就是出现了一堆不明问题...openstack安装比较复杂,很多配置文件,一个地方配置不正确,可能会导致后面的功能 ...
- ArrayPool 源码解读之 byte[] 也能池化?
一:背景 1. 讲故事 最近在分析一个 dump 的过程中发现其在 gen2 和 LOH 上有不少size较大的free,仔细看了下,这些free生前大多都是模板引擎生成的html片段的byte[]数 ...
- 教你用multipass快速搭建k8s集群
目录 前言 一.multipass快速入门 安装 使用 二.使用multipass搭建k8s集群 创建3台虚拟机 安装master节点 安装node节点 测试k8s集群 三.其他问题 不能拉取镜像:报 ...
- PyPDF2.py 合并pdf时报错问题
报错如下: Traceback (most recent call last): File "./pdf_merge.py", line 68, in <module> ...
- xxs攻击
1 XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中.比如这些代码包括HTML代码和客户端脚本.攻击者利用XSS漏洞旁路掉访问控制--例如 ...
- 洛谷P2424 约数和 题解
题目 约数和 题解 此题可以说完全就是一道数学题,不难看出这道题所求的是 \(\sum\limits_{i=x}^{y}{\sum\limits_{d|i}{d}}\) 的值. 很显然,用暴力枚举肯定 ...