PyQt界面开发学习:二.Pycharm活动模板,面向对象,类继承图,qss基础,父子关系...

QWiget和QMainWindow的一些简单设置
1.QWiget,相关测试代码
注:这里将窗口构造写成了面向对象的形式

# -*- coding:utf-8 -*-
from PyQt5.Qt import *
import sys

class example(QWidget):
    def __init__(self):
        #调用父类的init方法,建立窗口
        super().__init__()
        self.initWindow()
    def initWindow(self):
        self.setWindowTitle('这是控件测试窗口')
        self.resize(500,500)
        self.move(400,400)
        #这是标签
        self.label=QLabel(self)
        self.label.setText('hello world!')
        self.label.resize(200,100)
        self.label.move(250,250)
        #这是带提示框的pushbutton
        QToolTip.setFont(QFont('SansSerif',10))
        self.setToolTip('这是一个<b>QWiget</b>提示框')
        self.btn=QPushButton('Quit',self)
        self.btn.setToolTip('这是一个<b>QPushButton</b>提示框')
        self.btn.resize(100,50)
        self.btn.move(200,200)
        self.center()
        #绑定退去系统事件
        self.btn.clicked.connect(QCoreApplication.instance().quit)

        self.show()
    #退出时弹出messagebox
    def closeEvent(self,event):
        qm=QMessageBox.question(self,'message','你确定要退出吗',
                                QMessageBox.Yes|QMessageBox.No,QMessageBox.No)
        if qm ==QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()
    def center(self):
        qr=self.frameGeometry()#获取主窗口所在框架
        cp=QDesktopWidget().availableGeometry().center()#得到中心点
        qr.moveCenter(cp)#把主窗口的中心点放到屏幕中心
        self.move(qr.topLeft())#把主窗口移到左上角去
if __name__ =='__main__':
    app=QApplication(sys.argv)
    ex=example()
    sys.exit(app.exec_())

2.QMainWindow相关测试代码:

# -*- coding:utf-8 -*-
from PyQt5.Qt import *
import sys

class example(QMainWindow):
    def __init__(self):
        super().__init__()
    def initUI(self,status):
        if status==1:
            str='数据库加载成功'
        else:
            str='数据库加载失败'
        #创建状态栏
        self.statusBar().showMessage(str)#状态栏是由QMainWindow创建的
        self.resize(400,400)
        self.center()

        #鼠标悬停提示
        QToolTip.setFont(QFont('SansSerif',10))

        #加载菜单栏
        exitact=QAction(QIcon('exit.png'),'&Exit',self)#菜单栏子项
        exitact.setShortcut('Ctrl+E')#绑定快捷键
        exitact.setStatusTip('Exit application')#鼠标悬停时显示状态栏

        exitact.triggered.connect(qApp.quit)
        #设置2级菜单,3级菜单等
        secon=QMenu('2级菜单',self)
        secon_act=QAction(QIcon('exit.png'),'&二级子单',self)
        secon.addAction(secon_act)
        third=QMenu('3级子单',self)
        third_act=QAction('&三级子单',self,checkable=True)#这里把它绑定成了checkbox,绑定了hide函数,值也可以传到hide中去
        third_act.setStatusTip('要不要菜单栏')
        third_act.setChecked(True)
        third_act.triggered.connect(self.hide)
        third.addAction(third_act)
        secon.addMenu(third)

        #工具栏
        self.toolbar = self.addToolBar('Exit')
        self.toolbar.setStatusTip('要退出吗')
        self.toolbar.addAction(exitact)

        menubar = self.menuBar()#通过QMainwindow创建menuBar
        fileMenu = menubar.addMenu('&File')#添加menu项目
        fileMenu.addMenu(secon)#将子项二级菜单加入menu项目中
        fileMenu.addAction(exitact)#将子项添加到menu项目当中


        fileMenu.setToolTip('这是一个<b>menubar</b>提示')
        self.setWindowIcon(QIcon('exit.png'))
        self.show()
    def center(self):
        qr=self.frameGeometry()#获取主窗口所在框架
        cp=QDesktopWidget().availableGeometry().center()#得到中心点
        qr.moveCenter(cp)#把主窗口的中心点放到屏幕中心
        self.move(qr.topLeft())#把主窗口移到左上角去
    def hide(self):
        print('hide')
    def contextMenuEvent(self, event):

           cmenu = QMenu(self)

           newAct = cmenu.addAction("New")
           opnAct = cmenu.addAction("Open")
           quitAct = cmenu.addAction("Quit")
           action = cmenu.exec_(self.mapToGlobal(event.pos()))#使用exec_方法来显示右键菜单,在cmenu里面的任何事件均会销毁cmenu

           if action == quitAct:
               qApp.quit()
if __name__=='__main__':
    app=QApplication(sys.argv)
    ex=example()
    ex.initUI(1)
    sys.exit(app.exec_())

给Pycharm设置活动模板
1.首先打开Pycharm,点击file–点击setting,搜索live
将模板代码入
之后在代码中通过快捷输入就可以直接调出模板代码了
类继承图,qss样式的简单测试,父子关系初体验

# -*- coding:utf-8 -*-
from PyQt5.Qt import *
import sys

class example(QWidget):
    def __init__(self):
        #调用父类的init方法,建立窗口
        super().__init__()
        self.QOBject_test()
        self.QObject_对象名称和属性操作()
        self.QObject_父子关系操作()
        self.initWindow()

    def initWindow(self):
        self.setWindowTitle('我')
        self.setWindowIcon(QIcon('exit.png'))
        self.resize(500,500)
        self.center


        self.show()
    def QOBject_test(self):
        mros=QOpenGLBuffer.mro()#查看继承了哪些类
        for mro in mros :
            print(mro)
        cls=QObject.__subclasses__()#查看所有子类
    def QObject_对象名称和属性操作(self):
        #测试api
        obj=QObject()
        obj.setObjectName('notice')#给了对象名称,qss里面可以匹配这个名称
        print(obj.objectName())

        obj.setProperty('notice_level1','erro')#设置属性,qss中可以匹配属性设置样式
        obj.setProperty('notice_level2','warning')
        obj.setProperty('notice_level3','dead')
        print(obj.property('notice_level1'))
        print(obj.dynamicPropertyNames())

        with open('QObject.qss','r') as f:#通过只读模式打开qss文件
            qApp.setStyleSheet(f.read())#将qss文件内所有内容给全局的qApp
            print('成功')
        label = QLabel(self)
        label.setObjectName('notice')
        label.setProperty('notice_level','erro')#在qss文件中能够匹配到名称为notive,且notice_level为erro的QLabel,所以label被设置为了绿色
        label.move(200,200)
        label.setText('样式表测试')
    def QObject_父子关系操作(self):
        '''测试API'''
        obj1=QObject()
        obj2=QObject()
        obj1.setParent(obj2)#一个对象只能有一个父对象
        print(obj1,obj2)
        print(obj1.parent())#内存地址
        
    #退出时弹出messagebox
    def closeEvent(self,event):
        qm=QMessageBox.question(self,'message','你确定要退出吗',
                                QMessageBox.Yes|QMessageBox.No,QMessageBox.No)
        if qm ==QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()
    def center(self):
        qr=self.frameGeometry()#获取主窗口所在框架
        cp=QDesktopWidget().availableGeometry().center()#得到中心点
        qr.moveCenter(cp)#把主窗口的中心点放到屏幕中心
        self.move(qr.topLeft())#把主窗口移到左上角去
if __name__ =='__main__':#测试本类的时候会执行,被其他类导入不会执行
    app=QApplication(sys.argv)
    ex=example()
    sys.exit(app.exec_())

qss文件

QLabel#notice {
color:red;
}
QLabel#notice[notice_level="erro"] {
color:green;
}

下一章继续看下父子关系,从父到子研究下控件类型

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值