Python之PyQt编程
1、windows的建立
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2019/8/19 10:09
# @Site :
# @File : advertisingRunner.py
# @Software: PyCharm
import sys
from ui_class.ui_Elements import *
from public_class.common_method import *
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow,self).__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 1200, 800)
self.setWindowTitle(‘标题‘)
self.setWindowIcon(QIcon(‘标题icon.png‘))#icon图片需与当前文件在同级目录下,否则需带入路径
self.statusBar()
self.menus()
self.show()
def menus(self):
#菜单
filemenu = mainMenus(self,‘文件‘) #菜单
menuAction(self,filemenu,‘编辑‘,‘Ctrl+E‘) #一级action
openmenu = subMenu(filemenu,‘打开‘) #一级menu
menuAction(self,openmenu,‘open file‘,‘Ctrl+O‘) #二级action
menuAction(self,openmenu,‘open URL‘,‘Ctrl+U‘)
subMenu(filemenu,‘新建‘)
delmenu = subMenu(filemenu,‘删除‘)
menuAction(self,delmenu,‘del file‘,‘Ctrl+D‘)
navMenu = mainMenus(self,‘导航‘)
menuAction(self,navMenu,"工具",‘Ctrl+T‘)
def buttons(self):
#按钮
btn = QPushButton(‘Close Button‘, self)
btn.move(40,40)
btn_boxTip(btn,self,‘点击退出‘) #鼠标悬停浮层提示
btn.setStatusTip(‘点击退出‘) ##设置状态栏信息
self.show()
def closeEvent(self, event):#重写closeevent()关闭窗口弹出提示框
reply = QMessageBox.question(self,
‘本程序‘,
"是否要退出程序?",
QMessageBox.Yes | QMessageBox.No,
QMessageBox.No)
if reply == QMessageBox.Yes:
event.accept()
else:
event.ignore()
def winRunner():
app = QApplication(sys.argv)
window = MainWindow()#实例化窗口
# all_layout(window)
wincenter(window)
# getExePath()
sys.exit(app.exec_())
if __name__ == ‘__main__‘:
winRunner()效果图:

重写关闭提示弹窗,不重写closeEvent()则默认无退出提示弹窗:

2、
以上代码运行main下面注释掉的all_layout(window)则是页面元素整体布局方法
其中包含(各布局方法可嵌套使用)#常用
QGridLayout()网格布局
QVBoxLayout()竖向布局
QHBoxLayout()横向布局示例嵌套:
gridLayout()、hBoxlayout()、vBoxlayout()嵌套于all_layout(window)中
def gridLayout():
#网格布局
lineEdit = QLineEdit()#输入框
lineEdit.setPlaceholderText("网格布局输入框默认显示提示语")
lineEdit.text()#获取输入框的值
lable = QLabel()#标签,显示固有文本
# lable.setFixedWidth(50)#设置尺寸
lable.setText("网格布局标签显示文字")
button= QPushButton()#按钮,可绑定点击事件
button.setText("网格布局按钮")
button.setFixedWidth(180)#设置按钮尺寸
button.clicked.connect(lambda:fileReadWrite2(contract_orderClick()))#可以将有返回值的方法作为参数传递
gridLayout = QGridLayout()#实例化一个虚拟布局画布
gridWidget = QWidget()#实例化一个部件
#装载各控件布局到虚拟布局画布中,参考“.addWidget(控件名,行,列,占用行数,占用列数,对齐方式)”传入对应参数
gridLayout.addWidget(lineEdit,0,1,Qt.AlignTop)
gridLayout.addWidget(lable,0,0,Qt.AlignTop)
gridLayout.addWidget(button,1,0,1,2,Qt.AlignCenter)
#将布局好的虚拟画布装载到部件上,作为返回对象
gridWidget.setLayout(gridLayout)
return gridWidget
def vBoxlayout():
#box竖向布局
lineEdit = QLineEdit()#输入框
lineEdit.setPlaceholderText("Box竖向布局输入框默认显示提示语")
lineEdit.text()#获取输入框的值
lable = QLabel()#标签,显示固有文本
# lable.setFixedWidth(50)#设置尺寸
lable.setText("Box竖向布局标签显示文字")
button= QPushButton()#按钮,可绑定点击事件
button.setText("Box竖向布局按钮")
button.setFixedWidth(180)#设置按钮尺寸
button.clicked.connect(lambda:fileReadWrite2(contract_orderClick()))#可以将有返回值的方法作为参数传递
vBlayout = QVBoxLayout()#实例化虚拟竖向布局画布
vWidget = QWidget()#实例化部件
#添加控件到虚拟布局画布
vBlayout.addWidget(lable)
vBlayout.addWidget(lineEdit)
vBlayout.addWidget(button)
# 装载虚拟画布到部件中
vWidget.setLayout(vBlayout)
return vWidget
def hBoxlayout():
#box竖向布局
lineEdit = QLineEdit()#输入框
lineEdit.setPlaceholderText("Box横向布局输入框默认显示提示语")
lineEdit.text()#获取输入框的值
lable = QLabel()#标签,显示固有文本
# lable.setFixedWidth(50)#设置尺寸
lable.setText("Box横向布局标签显示文字")
button= QPushButton()#按钮,可绑定点击事件
button.setText("Box横向布局按钮")
button.setFixedWidth(180)#设置按钮尺寸
button.clicked.connect(lambda:fileReadWrite2(contract_orderClick()))#可以将有返回值的方法作为参数传递
hBlayout = QHBoxLayout()#实例化虚拟竖向布局画布
hWidget = QWidget()#实例化部件
#添加控件到虚拟布局画布
hBlayout.addWidget(lable)
hBlayout.addWidget(lineEdit)
hBlayout.addWidget(button)
# 装载虚拟画布到部件中
hWidget.setLayout(hBlayout)
return hWidget
def all_layout(window):
############## 全局布局 ###############
#grid布局
glb_gridLayout = QGridLayout()
glb_gridLayoutExample = gridLayout()
glb_vBLayoutExample = vBoxlayout()
glb_hBLayoutExample = hBoxlayout()76 glb_gridLayout.addWidget(glb_gridLayoutExample,0,0)
glb_gridLayout.addWidget(glb_vBLayoutExample,0,1)
glb_gridLayout.addWidget(glb_hBLayoutExample,1,0,1,2,Qt.AlignCenter)#居中展示
glb_Widget = QWidget()
glb_Widget.setLayout(glb_gridLayout)
# self.setLayout(glb_VLayout)
window.setCentralWidget(glb_Widget)#将各部件布局装入窗口中显示效果图:
