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 ...
随机推荐
- 早产的《HelloGitHub》第 65 期
兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. 这里有实战项目.入门教程.黑科技.开源书籍.大厂开源项目等,涵盖多种编程语言 Pyt ...
- java实现随机字母数字验证码
生成随街验证码 VerifyCode 工具类 package com.meeno.common.cerifycode; import javax.imageio.ImageIO; import jav ...
- visual studio code 中文
1.按住ctrl+shift+p键,在框中输入configure,在下拉选项中选取language选项 2.打开locale.json文件,修改语言配置 3.修改完保存,然后重新启动vscode 4. ...
- Vue 插槽 slot的简单实用
- rocketmq知识点
消息队列mq 参考资料:https://www.jianshu.com/p/824066d70da8 一.消息中间件的主要作用和功能: 1)异步解耦和分流: 2)挡住前端的数据洪峰,保证后端系统的稳定 ...
- pgsql日期树数值类型指定与介绍
http://www.postgres.cn/docs/9.3/datatype-net-types.html#DATATYPE-INET 文档有详细的pgsql介绍 使用案例: SELECT to ...
- MySQL密码重置方法
MySQL数据库的安装和配置,配置Mysql按照bin目录到Path中 使用命令行窗口连接MYSQL数据库:mysql –u用户名 –p密码 对于密码的重置有以下两种方法(卸载重新安装当然也可以): ...
- 源码解析Spring AOP的加载与生效
本次博主主要进行Spring AOP这里的解析,因为在工作中使用后,却不知道背后的实现原理并在使用的过程中发现了一些认知缺陷,所以决定写这么一篇文章以供大家参考参考,进入正题. 本次博主使用了@Asp ...
- 前端使用a标签启动本地.exe程序
目录 1,需求 2,效果图 3,实现原理 4,代码 5,注意事项 1,需求 最近有一个需求,在web页面上有一个按钮,点击按钮,调起本地的.exe程序客户端,我在网上找了很多,感觉都不完整,所以自己总 ...
- AWS使用ALB负载均衡遇到的问题
文章原文 问题描述 ALB 负载均衡 RGC-Dev-ALB.xxx.cn-north-1.elb.amazonaws.com.cn 解析到2个IP 54.223.xxx.xx和52.81.xxx.x ...