No.4 PyQt学习(页面跳转)
先定义了两个MainWindow进行跳转,但发现这样的话,从第二个Window无法跳转会第一个。代码如下:
# -*- coding: utf-8 -*-
import sys from PyQt4.QtGui import *
from PyQt4.QtCore import *
import MainPage class Home(QMainWindow): def __init__(self):
super(Home, self).__init__()
#QtGui.QWidget.__init__(self)
self.style = """
QPushButton{background-color:grey;color:white;}
#window{ background-image: url(background1.jpg); }
"""
self.setStyleSheet(self.style)
self.initUI() def initUI(self): self.resize(650, 480)
self.statusBar().showMessage('Ready')
self.setObjectName("window")
self.setWindowFlags(Qt.FramelessWindowHint | Qt.Dialog)
self.center() widget = QWidget()
label = QLabel()
label.setText("<font size=%s><B>%s</B></font>" %("", "Face Recognition System"))
start = QPushButton("Start", self)
widget.setStatusTip(' ')
#start.resize(50, 25)
quit = QPushButton("Quit", self)
#quit.resize(50,25)
start.clicked.connect(self.startClicked)
quit.clicked.connect(self.quitClicked) vbox1 = QVBoxLayout() # 垂直布局
vbox2 = QVBoxLayout()
vbox3 = QVBoxLayout()
vbox4 = QVBoxLayout() #两边空隙填充
label1 = QLabel()
label1.resize(50,50)
label2 = QLabel()
label2.resize(50, 50)
vbox1.addWidget(label1)
#vbox2.addWidget(label)
vbox4.addWidget(start)
vbox4.addWidget(quit)
vbox3.addWidget(label2)
# 按钮两边空隙填充
label3 = QLabel()
label3.resize(50, 50)
label4 = QLabel()
label4.resize(50, 50)
hbox1 = QHBoxLayout()
hbox1.addWidget(label3)
hbox1.addLayout(vbox4)
hbox1.addWidget(label4)
#标题与两个按钮上下协调
label5 = QLabel()
label5.resize(1, 1)
label6 = QLabel()
label6.resize(1, 1)
label7 = QLabel()
label7.resize(1, 1)
vbox2.addWidget(label5)
vbox2.addWidget(label)
vbox2.addWidget(label6)
vbox2.addLayout(hbox1)
vbox2.addWidget(label7) hbox = QHBoxLayout()
hbox.addLayout(vbox1)
hbox.addLayout(vbox2)
hbox.addLayout(vbox3)
widget.setLayout(hbox) self.setCentralWidget(widget) def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
self.dragPosition = event.globalPos() - self.frameGeometry().topLeft()
QApplication.postEvent(self, QEvent(174))
event.accept() def mouseMoveEvent(self, event):
if event.buttons() == Qt.LeftButton:
self.move(event.globalPos() - self.dragPosition)
event.accept() def quitClicked(self):
reply = QMessageBox.question(self, 'Warning',
'Are you sure to quit?', QMessageBox.Yes,
QMessageBox.No)
if reply == QMessageBox.Yes:
quit() def startClicked(self):
self.hide()
self.ui = MainPage.MainPage() #必须将另一个界面改为成员变量,负责MainPage会与函数调用周期一样一闪而过
self.ui.show() def center(self):
qr = self.frameGeometry() # 得到该主窗口的矩形框架qr
cp = QDesktopWidget().availableGeometry().center() # 屏幕中间点的坐标cp
qr.moveCenter(cp) # 将矩形框架移至屏幕正中央
self.move(qr.topLeft()) # 应用窗口移至矩形框架的左上角点 def main():
app = QApplication(sys.argv)
main = Home()
main.show()
sys.exit(app.exec_()) if __name__ == '__main__':
main()
第二个窗口代码为:
# -*- coding: utf-8 -*-
import sys from PyQt4.QtGui import *
from PyQt4.QtCore import * try:
_fromUtf8 = QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s try:
_encoding = QApplication.UnicodeUTF8 def _translate(context, text, disambig):
return QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QApplication.translate(context, text, disambig) class MainPage(QMainWindow):
def __init__(self):
super(MainPage, self).__init__()
self.style = """
QPushButton{background-color:grey;color:white;}
#window{ background-image: url(background1.jpg); }
"""
self.setStyleSheet(self.style)
self.initUI() def initUI(self):
self.resize(650, 480)
self.setObjectName("window")
self.setWindowFlags(Qt.FramelessWindowHint | Qt.Dialog)
self.center()
back = QPushButton("Back", self)
back.setGeometry(190, 210,50, 25)
back.clicked.connect(self.backClicked) def backClicked(self):
self.close() def center(self):
qr = self.frameGeometry() # 得到该主窗口的矩形框架qr
cp = QDesktopWidget().availableGeometry().center() # 屏幕中间点的坐标cp
qr.moveCenter(cp) # 将矩形框架移至屏幕正中央
self.move(qr.topLeft()) # 应用窗口移至矩形框架的左上角点 if __name__ == "__main__":
app = QApplication(sys.argv)
ui = MainPage()
ui.show()
sys.exit(app.exec_())
截图如下:
点击start至第二个界面,点击back无法返回第一个页面。
修改代码,可以实现两个页面的互相跳转:
Page1:
# -*- coding: utf-8 -*-
import sys from PyQt4.QtGui import *
from PyQt4.QtCore import *
import MainPage class Home(QMainWindow): def __init__(self):
super(Home, self).__init__()
#QtGui.QWidget.__init__(self)
self.style = """
QPushButton{background-color:grey;color:white;}
#window{ background-image: url(background1.jpg); }
"""
self.setStyleSheet(self.style)
self.initUI() def initUI(self): self.resize(650, 480)
self.statusBar().showMessage('Ready')
self.setObjectName("window")
self.setWindowFlags(Qt.FramelessWindowHint | Qt.Dialog)
self.center() widget = QWidget()
label = QLabel()
label.setText("<font size=%s><B>%s</B></font>" %("", "Face Recognition System"))
start = QPushButton("Start", self)
widget.setStatusTip(' ')
#start.resize(50, 25)
quit = QPushButton("Quit", self)
#quit.resize(50,25)
start.clicked.connect(self.startClicked)
quit.clicked.connect(self.quitClicked) vbox1 = QVBoxLayout() # 垂直布局
vbox2 = QVBoxLayout()
vbox3 = QVBoxLayout()
vbox4 = QVBoxLayout() #两边空隙填充
label1 = QLabel()
label1.resize(50,50)
label2 = QLabel()
label2.resize(50, 50)
vbox1.addWidget(label1)
#vbox2.addWidget(label)
vbox4.addWidget(start)
vbox4.addWidget(quit)
vbox3.addWidget(label2)
# 按钮两边空隙填充
label3 = QLabel()
label3.resize(50, 50)
label4 = QLabel()
label4.resize(50, 50)
hbox1 = QHBoxLayout()
hbox1.addWidget(label3)
hbox1.addLayout(vbox4)
hbox1.addWidget(label4)
#标题与两个按钮上下协调
label5 = QLabel()
label5.resize(1, 1)
label6 = QLabel()
label6.resize(1, 1)
label7 = QLabel()
label7.resize(1, 1)
vbox2.addWidget(label5)
vbox2.addWidget(label)
vbox2.addWidget(label6)
vbox2.addLayout(hbox1)
vbox2.addWidget(label7) hbox = QHBoxLayout()
hbox.addLayout(vbox1)
hbox.addLayout(vbox2)
hbox.addLayout(vbox3)
widget.setLayout(hbox) self.setCentralWidget(widget) def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
self.dragPosition = event.globalPos() - self.frameGeometry().topLeft()
QApplication.postEvent(self, QEvent(174))
event.accept() def mouseMoveEvent(self, event):
if event.buttons() == Qt.LeftButton:
self.move(event.globalPos() - self.dragPosition)
event.accept() def quitClicked(self):
reply = QMessageBox.question(self, 'Warning',
'Are you sure to quit?', QMessageBox.Yes,
QMessageBox.No)
if reply == QMessageBox.Yes:
quit() def startClicked(self):
self.hide()
Form = QDialog()
ui = MainPage.MainPage(Form)
Form.show()
Form.exec_()
self.show() def center(self):
qr = self.frameGeometry() # 得到该主窗口的矩形框架qr
cp = QDesktopWidget().availableGeometry().center() # 屏幕中间点的坐标cp
qr.moveCenter(cp) # 将矩形框架移至屏幕正中央
self.move(qr.topLeft()) # 应用窗口移至矩形框架的左上角点 def main():
app = QApplication(sys.argv)
main = Home()
main.show()
sys.exit(app.exec_()) if __name__ == '__main__':
main()
Page2:
# -*- coding: utf-8 -*-
import sys from PyQt4.QtGui import *
from PyQt4.QtCore import * try:
_fromUtf8 = QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s try:
_encoding = QApplication.UnicodeUTF8 def _translate(context, text, disambig):
return QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QApplication.translate(context, text, disambig) class MainPage(QMainWindow):
def __init__(self, Dialog):
super(MainPage, self).__init__()
self.initUI(Dialog) def initUI(self, Dialog):
Dialog.resize(650, 480)
self.form = Dialog
self.form.setObjectName("window")
self.form.setStyleSheet ("background-image: url(background1.jpg)");
self.form.setWindowFlags(Qt.FramelessWindowHint | Qt.Dialog) back = QPushButton("Back", Dialog)
back.setGeometry(190, 210, 50, 25)
back.clicked.connect(self.backClicked) def backClicked(self):
self.form.close() if __name__ == "__main__":
app = QApplication(sys.argv)
Dialog = QDialog()
ui = MainPage(Dialog)
ui.show()
sys.exit(app.exec_())
参考:http://blog.csdn.net/sollor525/article/details/40076395
No.4 PyQt学习(页面跳转)的更多相关文章
- JavaWeb学习——页面跳转方式
JavaWeb学习——页面跳转方式 摘要:本文主要学习了请求转发和响应重定向,以及两者之间的区别. 请求转发 相关方法 使用HttpServletRequest对象的 getRequestDispat ...
- 微信小程序开发:学习笔记[8]——页面跳转及传参
微信小程序开发:学习笔记[8]——页面跳转及传参 页面跳转 一个小程序拥有多个页面,我们可以通过wx.navigateTo推入一个新的页面.在首页使用2次wx.navigateTo后,页面层级会有三层 ...
- android 学习第一天 了解事件机制,页面跳转等常用操作
点击时间2种 第一种,通过初始化页面 写入点击事件 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedI ...
- Android+Jquery Mobile学习系列(4)-页面跳转及参数传递
关于页面转场,这个必须得专门列出来说明一下,因为Jquery Mobile与普通的Web发开有一些区别,这个对于新手如果不了解的话,就会钻到死胡同.撸主前段时间就是很急躁地上手开发程序,结果在页面转场 ...
- Silverlight学习笔记之页面跳转
在进行项目开发的时候,经常遇到页面之间的跳转,包括silverlight之间以及silverlight和html之间的跳转. silverlight之间的页面跳转包含两点: 1.主窗体和子窗体 用户新 ...
- [ExtJS5学习笔记]第二十五节 利用window.open()函数实现ExtJS5的登陆页面跳转
本文地址:http://blog.csdn.net/sushengmiyan/article/details/40427543 mvvm方式实现登陆的博客:http://blog.csdn.net/s ...
- Web jsp开发学习——实现页面跳转和传参
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletExcepti ...
- React学习(3)——Router路由的使用和页面跳转
React-Router的中文文档可以参照如下链接: http://react-guide.github.io/react-router-cn/docs/Introduction.html 文档中介绍 ...
- 1.2(学习笔记)Servlet基础(doGet、doPost、生命周期、页面跳转)
一.doGet()与doPost() 我们在TestServlet类中重写doGet().doPost().service(). import javax.servlet.ServletExcepti ...
- ionic小白的学习路之目录结构分析、创建组件、创建页面、页面跳转
一. 目录结构分析 hooks:编译cordova 时自定义的脚本命令,方便整合到我们的编译系统和版本控制系统中. node_modules :node 各类依赖包. resources :andro ...
随机推荐
- 使用Maven运行单元测试
要通过Maven运行单元测试,发出此命令: mvn test 这会在你的项目中运行整个单元测试. 案例学习 创建两个单元测试,并通过 Maven 的运行它.参见一个简单的 Java 测试类: pack ...
- Git -- 基本操作 之 版本回退
现在,你已经学会了修改文件,然后把修改提交到Git版本库,现在,再练习一次,修改readme.txt文件如下: Git is a distributed version control system. ...
- openssl创建自己的CA certificate
Create a Certificate Authority private key (this is your most important key): $ openssl req -new -ne ...
- NPOI 2.1.1 系列(2) 使用NPOI读取List或者datatable数据生成 Excel文档 ;Npoi生成 xlsx 2007以上文档
结合上一篇文章 NPOI 2.1.1 系列(1) 使用NPOI读取 Excel文档 ;NpoiExcelHelper 导入导出 2003格式 2007格式的 Excel; Npoi 导出 xlsx ...
- 【经验之谈】Git使用之TortoiseGit配置VS详解;国内几大Git代码托管网站
转载自: http://www.cnblogs.com/xishuai/p/3590705.html http://www.cnblogs.com/shanyou/p/3662482.html
- python程序的输入输出(acm的几个小程序)
1, A+B Problem : http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1000 #! ...
- 本地没问题 服务器 提示 Server Error in '/' Application
一. 先用本机的 IIS 测试,不要用 VS 内附的 Web server,並配置 <customErrors mode="Off"/>,以將真實的錯誤原因顯示出來,看 ...
- MYSQL的索引类型:PRIMARY, INDEX,UNIQUE,FULLTEXT,SPAIAL 有什么区别?各适用于什么场合?
一.介绍一下索引的类型 Mysql常见索引有:主键索引.唯一索引.普通索引.全文索引.组合索引PRIMARY KEY(主键索引) ALTER TABLE `table_name` ADD PRIMAR ...
- 关于js中namespace命名空间模式
命名空间有助于减少程序中所需要的全局变量的数量,并且同时有助于避免命名冲突或过长的名字前缀. 关于命名空间的例子: /** * 创建全局对象MYAPP * @module MYAPP * @title ...
- Windows 2008禁止IE增强安全配置修改安全设置方法
windows 2008更改IE安全设置 在默认状态下,使用Windows Server 2008系统自带的IE浏览器访问网页内容时,我们时常发现页面内容显示不全.后来,我们进入IE浏览器的Inter ...