1、windows窗口的建立
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # @Time : 2019/8/19 10:09 4 # @Site : 5 # @File : advertisingRunner.py 6 # @Software: PyCharm 7 8 import sys 9 10 from ui_class.ui_Elements import * 11 from public_class.common_method import * 12 13 14 class MainWindow(QMainWindow): 15 16 def __init__(self): 17 18 super(MainWindow,self).__init__() 19 self.initUI() 20 21 def initUI(self): 22 23 self.setGeometry(300, 300, 1200, 800) 24 self.setWindowTitle('标题') 25 self.setWindowIcon(QIcon('标题icon.png'))#icon图片需与当前文件在同级目录下,否则需带入路径 26 self.statusBar() 27 self.menus() 28 self.show() 29 30 def menus(self): 31 #菜单 32 filemenu = mainMenus(self,'文件') #菜单 33 menuAction(self,filemenu,'编辑','Ctrl+E') #一级action 34 openmenu = subMenu(filemenu,'打开') #一级menu 35 menuAction(self,openmenu,'open file','Ctrl+O') #二级action 36 menuAction(self,openmenu,'open URL','Ctrl+U') 37 38 subMenu(filemenu,'新建') 39 delmenu = subMenu(filemenu,'删除') 40 menuAction(self,delmenu,'del file','Ctrl+D') 41 42 navMenu = mainMenus(self,'导航') 43 menuAction(self,navMenu,"工具",'Ctrl+T') 44 45 def buttons(self): 46 #按钮 47 btn = QPushButton('Close Button', self) 48 btn.move(40,40) 49 btn_boxTip(btn,self,'点击退出') #鼠标悬停浮层提示 50 btn.setStatusTip('点击退出') ##设置状态栏信息 51 self.show() 52 53 def closeEvent(self, event):#重写closeevent()关闭窗口弹出提示框 54 reply = QMessageBox.question(self, 55 '本程序', 56 "是否要退出程序?", 57 QMessageBox.Yes | QMessageBox.No, 58 QMessageBox.No) 59 if reply == QMessageBox.Yes: 60 event.accept() 61 else: 62 event.ignore() 63 64 def winRunner(): 65 app = QApplication(sys.argv) 66 window = MainWindow()#实例化窗口 67 # all_layout(window) 68 wincenter(window) 69 # getExePath() 70 sys.exit(app.exec_()) 71 72 if __name__ == '__main__': 73 winRunner()
效果图:
重写关闭提示弹窗,不重写closeEvent()则默认无退出提示弹窗:
2、
以上代码运行main下面注释掉的all_layout(window)则是页面元素整体布局方法
其中包含(各布局方法可嵌套使用)#常用
QGridLayout()网格布局
QVBoxLayout()竖向布局
QHBoxLayout()横向布局
示例嵌套:
gridLayout()、hBoxlayout()、vBoxlayout()嵌套于all_layout(window)中
1 def gridLayout(): 2 #网格布局 3 lineEdit = QLineEdit()#输入框 4 lineEdit.setPlaceholderText("网格布局输入框默认显示提示语") 5 lineEdit.text()#获取输入框的值 6 lable = QLabel()#标签,显示固有文本 7 # lable.setFixedWidth(50)#设置尺寸 8 lable.setText("网格布局标签显示文字") 9 button= QPushButton()#按钮,可绑定点击事件 10 button.setText("网格布局按钮") 11 button.setFixedWidth(180)#设置按钮尺寸 12 button.clicked.connect(lambda:fileReadWrite2(contract_orderClick()))#可以将有返回值的方法作为参数传递 13 gridLayout = QGridLayout()#实例化一个虚拟布局画布 14 gridWidget = QWidget()#实例化一个部件 15 #装载各控件布局到虚拟布局画布中,参考“.addWidget(控件名,行,列,占用行数,占用列数,对齐方式)”传入对应参数 16 gridLayout.addWidget(lineEdit,0,1,Qt.AlignTop) 17 gridLayout.addWidget(lable,0,0,Qt.AlignTop) 18 gridLayout.addWidget(button,1,0,1,2,Qt.AlignCenter) 19 #将布局好的虚拟画布装载到部件上,作为返回对象 20 gridWidget.setLayout(gridLayout) 21 return gridWidget 22 23 def vBoxlayout(): 24 #box竖向布局 25 lineEdit = QLineEdit()#输入框 26 lineEdit.setPlaceholderText("Box竖向布局输入框默认显示提示语") 27 lineEdit.text()#获取输入框的值 28 lable = QLabel()#标签,显示固有文本 29 # lable.setFixedWidth(50)#设置尺寸 30 lable.setText("Box竖向布局标签显示文字") 31 button= QPushButton()#按钮,可绑定点击事件 32 button.setText("Box竖向布局按钮") 33 button.setFixedWidth(180)#设置按钮尺寸 34 button.clicked.connect(lambda:fileReadWrite2(contract_orderClick()))#可以将有返回值的方法作为参数传递 35 36 vBlayout = QVBoxLayout()#实例化虚拟竖向布局画布 37 vWidget = QWidget()#实例化部件 38 #添加控件到虚拟布局画布 39 vBlayout.addWidget(lable) 40 vBlayout.addWidget(lineEdit) 41 vBlayout.addWidget(button) 42 # 装载虚拟画布到部件中 43 vWidget.setLayout(vBlayout) 44 return vWidget 45 46 def hBoxlayout(): 47 #box竖向布局 48 lineEdit = QLineEdit()#输入框 49 lineEdit.setPlaceholderText("Box横向布局输入框默认显示提示语") 50 lineEdit.text()#获取输入框的值 51 lable = QLabel()#标签,显示固有文本 52 # lable.setFixedWidth(50)#设置尺寸 53 lable.setText("Box横向布局标签显示文字") 54 button= QPushButton()#按钮,可绑定点击事件 55 button.setText("Box横向布局按钮") 56 button.setFixedWidth(180)#设置按钮尺寸 57 button.clicked.connect(lambda:fileReadWrite2(contract_orderClick()))#可以将有返回值的方法作为参数传递 58 59 hBlayout = QHBoxLayout()#实例化虚拟竖向布局画布 60 hWidget = QWidget()#实例化部件 61 #添加控件到虚拟布局画布 62 hBlayout.addWidget(lable) 63 hBlayout.addWidget(lineEdit) 64 hBlayout.addWidget(button) 65 # 装载虚拟画布到部件中 66 hWidget.setLayout(hBlayout) 67 return hWidget 68 69 def all_layout(window): 70 ############## 全局布局 ############### 71 #grid布局 72 glb_gridLayout = QGridLayout() 73 glb_gridLayoutExample = gridLayout() 74 glb_vBLayoutExample = vBoxlayout() 75 glb_hBLayoutExample = hBoxlayout()
76 glb_gridLayout.addWidget(glb_gridLayoutExample,0,0) 77 glb_gridLayout.addWidget(glb_vBLayoutExample,0,1) 78 glb_gridLayout.addWidget(glb_hBLayoutExample,1,0,1,2,Qt.AlignCenter)#居中展示 79 80 81 glb_Widget = QWidget() 82 glb_Widget.setLayout(glb_gridLayout) 83 84 # self.setLayout(glb_VLayout) 85 window.setCentralWidget(glb_Widget)#将各部件布局装入窗口中显示
效果图: