No.3 PyQt学习
使用box布局,写了 一个系统的主页(非常丑)

代码如下:
# -*- coding: utf-8 -*-
import sys from PyQt4.QtGui import *
from PyQt4.QtCore import * class Home(QMainWindow): def __init__(self):
super(Home, self).__init__()
#QtGui.QWidget.__init__(self)
self.style = """
QPushButton{background-color:grey;color:white;}
#window{ background:pink; }
#test{ background-color:black;color:white; }
"""
self.setStyleSheet(self.style)
self.initUI() def initUI(self): self.resize(650, 480)
self.statusBar().showMessage('Ready')
self.setObjectName("window")
self.center() widget = QWidget()
label = QLabel()
label.setText("<font size=%s><B>%s</B></font>" %("", "Face Recognition System"))
start = QPushButton("Start", self)
start.setToolTip('Start to Recognition')
start.resize(50, 25)
quit = QPushButton("Quit", self)
quit.resize(50,25)
quit.setToolTip('Exit Application')
#self.connect(quit, QtCore.SIGNAL('clicked()'), QtGui.qApp, QtCore.SLOT('quit()'))
quit.clicked.connect(self.quitClick) vbox1 = QVBoxLayout() # 垂直布局
vbox2 = QVBoxLayout()
vbox3 = QVBoxLayout()
label1 = QLabel()
label1.resize(50,50)
vbox1.addWidget(label1)
vbox2.addWidget(label)
vbox2.addWidget(start)
vbox2.addWidget(quit)
label2 = QLabel()
label2.resize(50, 50)
vbox3.addWidget(label2)
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 quitClick(self):
reply = QMessageBox.question(self, 'Message',
'Are you sure to quit?', QMessageBox.Yes,
QMessageBox.No)
if reply == QMessageBox.Yes:
quit() def center(self):
qr = self.frameGeometry() # 得到该主窗口的矩形框架qr
cp = QDesktopWidget().availableGeometry().center() # 屏幕中间点的坐标cp
qr.moveCenter(cp) # 将矩形框架移至屏幕正中央
self.move(qr.topLeft()) # 应用窗口移至矩形框架的左上角点 def closeEvent(self, event): reply = QMessageBox.question(self, 'Message',
'Are you sure to quit?', QMessageBox.Yes,
QMessageBox.No) if reply == QMessageBox.Yes:
event.accept()
else:
event.ignore() 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 * 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); }
#test{ background-color:black;color:white; }
"""
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 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()
也可以使用QtDesigner进行页面设计。PyCharm和QtDesigner的配置可以百度到,具体设计过程参照http://www.cnblogs.com/dcb3688/p/4311138.html。
No.3 PyQt学习的更多相关文章
- PyQt学习随笔:QTableWidget的selectedRanges、setRangeSelected访问选中矩形范围的方法
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在QTableWidget对项的操作支持选中多个项的情况下,可以通过方法selectedRanges ...
- PyQt学习随笔:Model/View中TableView视图数据项编辑结果及视图数据项的访问
按照<PyQt学习随笔:Model/View中设置视图数据项可编辑的方法>的方法支持视图数据可编辑后,编辑后的数据无需主动保存,PyQt会自动将界面变更的数据保存到对应的Model存储中, ...
- PyQt学习随笔:Model/View架构中多个视图之间选择数据项同步
我们知道多个视图之间通过使用相同的model就可以实现数据的共享(具体请参考< PyQt学习随笔:ListView控件的视图和数据模型分离案例>),除了数据的共享之外,多个视图之间还可以同 ...
- PyQt学习随笔:Model和View之间的数据互动过程
在<PyQt学习随笔:Qt中tem Views(Model-Based)和Item Widgets(Item-Based)控件的用途和关系>中介绍了,Model用于存储数据,View用于展 ...
- PyQt学习随笔:Qt Designer调用帮助时报错找不到assistant.exe文件的解决办法
老猿是按照<第15.5节 PyQt5安装与配置>步骤安装的PyQt及相关工具,但最近在Qt Designer中点击帮助相关菜单时报错找不到assistant.exe文件,如图: 按照报错信 ...
- PyQt学习随笔:Model/View开发时在view数据项中设置不同角色数据的方法
在往Model中通过QStandardItem等类插入数据项时,除了实际插入的存储数据,还可以设置不同角色(请参考<PyQt学习随笔:Model/View中诸如DisplayRole的数据角色及 ...
- PyQt学习随笔:Model/View开发时从Model相关类派生自定义类需要注意的问题
在<PyQt学习随笔:重写setData方法截获Model/View中视图数据项编辑的注意事项>介绍的方法,从Model相关类派生自定义类,通过重写setData方法以获取View中数据的 ...
- PyQt学习随笔:重写setData方法截获Model/View中视图数据项编辑的注意事项
根据<PyQt学习随笔:Model/View中视图数据项编辑变动实时获取变动数据的方法>可以重写从PyQt的Model类继承的setData方法来实时截获View中对数据的更改,但需要注意 ...
- PyQt学习遇到的问题:重写notify发送的消息为什么首先给了一个QWindow对象?
在PyQt开发图形界面应用时,从QApplication派生的子类重写notify方法后(具体请参考<PyQt学习随笔:通过自定义类重写QApplication的notify方法捕获应用的所有消 ...
- PyQt学习随笔:通过自定义类重写QApplication的notify方法捕获应用的所有消息
PyQt程序通过调用QApplication类的exec_()(sys.exit(app.exec_()) 进入程序主循环,开始处理事件,它从事件队列中获取本地窗口系统事件,将它们转化为 QEvent ...
随机推荐
- elasticsearch系列二:索引详解(快速入门、索引管理、映射详解、索引别名)
一.快速入门 1. 查看集群的健康状况 http://localhost:9200/_cat http://localhost:9200/_cat/health?v 说明:v是用来要求在结果中返回表头 ...
- SpringMVC系列(七)视图解析器和视图
在springmvc.xml里面配置视图解析器 <!-- 配置视图解析器: 如何把 handler 方法返回值解析为实际的物理视图 --> <bean class="org ...
- Xianfeng轻量级Java中间件平台:一期开发计划
关于Xianfeng轻量级Java中间件平台,考虑到需要控制开发周期,通过分期开发的方式来实现一些基础的.常用的功能,这样有利于跟踪开发计划.一期的开发计划,主要实现的目标如下: 系统架构: 1.确定 ...
- Sublime text 3 中Package Control 的安装与使用方法
Package Control插件本身是一个为了方便管理插件的插件,在Sublime text 3中,Package Control 的安装方法一开始出来的方法是要先安装Git, 再输入代码来安装,原 ...
- ubuntu16.04卸载tensorflow0.11版本,安装tensorflow1.1.0版本
卸载旧版本: pip uninstall tensorflow 安装新版本: sudo pip install --upgrade https://storage.googleapis.com/ten ...
- app已损坏,打不开。你应该将它移到废纸篓。
app已损坏,打不开.你应该将它移到废纸篓.(macOS Sierra 10.12) ,打开终端,执行 sudo spctl --master-disable 即可.
- Struts2/XWork 安全漏洞及解决办法
exploit-db网站在7月14日爆出了一个Struts2的远程执行任意代码的漏洞. 漏洞名称:Struts2/XWork < 2.2.0 Remote Command Execution V ...
- 【WP8】关于类库本地化问题
WPToolkit中的ToggleSwitch开关控件是比较常用的控件,之前在做的的时候遇到一个问题,默认语言改为中文,手机系统语言也为中文,但是开关状态无法应用本地化的语言库,开关状态总是显示On/ ...
- KSImageNamed项目图片智能提示
下载地址:https://github.com/ksuther/KSImageNamed-Xcode PS:如果在插件未更新到支持Xcode 6.3.2的情况下,要在Xcode 6.3.2中使用,需要 ...
- [转] fitnesse中的Map处理
http://blog.csdn.net/doubeizhucele/article/details/42263887 fintesse会把!{}标记的变量视为HashTable对象,展现到页面上的将 ...