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;
}
下一章继续看下父子关系,从父到子研究下控件类型