Python之PyQt编程

Airuio 2019-12-05

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()

效果图:

Python之PyQt编程

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

Python之PyQt编程

 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)#将各部件布局装入窗口中显示

效果图:

Python之PyQt编程

相关推荐