窗口背景主要包括,背景色与背景图片,设置窗口背景有三种方法

使用QSS设置窗口背景

使用QPalette设置窗口背景

实现PainEvent,使用QPainter绘制背景

QSS设置窗口背景

在QSS中,我们可以使用Background或者background-color的方式来设置背景色,设置窗口背景色之后,子控件默认会继承父窗口的背景色,如果想要为控件设置背景图片或图标,则可以使用setPixmap或则setIcon来完成。关于这两个函数的用法,可以参考本博客下的PyQt5的基础控件分栏

实例:QSS设置窗口背景

import sys

from PyQt5.QtWidgets import QMainWindow, QApplication

app = QApplication(sys.argv)

win = QMainWindow()

#设置窗口标题与初始大小

win.setWindowTitle("界面背景图片设置")

win.resize(350, 250)

#设置对象名称

win.setObjectName("MainWindow")

# #todo 1 设置窗口背景图片

win.setStyleSheet("#MainWindow{border-image:url(./images/python.jpg);}")

#todo 2 设置窗口背景色

#win.setStyleSheet("#MainWindow{background-color: yellow}")

win.show()

sys.exit(app.exec_())

运行效果图如下

核心代码如下

#设置对象名称

win.setObjectName("MainWindow")

# #todo 1 设置窗口背景图片

win.setStyleSheet("#MainWindow{border-image:url(./images/python.jpg);}")

优化 使用setStyleSheet()设置窗口背景色,核心代码和效果图如下

#todo 2 设置窗口背景色

win.setStyleSheet("#MainWindow{background-color: yellow}")

QPalette设置窗口背景

当使用QPalette(调试板)来设置背景图片时,需要考虑背景图片的尺寸

图片尺寸可以文件管理器打开,右键属性查看

当背景图片的宽度高度大于窗口的宽度高度时,背景图片会平铺整个背景

当背景图片宽度高度小于窗口的宽度高度时,则会加载多个背景图片

实例:QPalette设置窗口背景

import sys

from PyQt5.QtWidgets import QMainWindow, QApplication

from PyQt5.QtGui import QPalette, QBrush, QPixmap

app = QApplication(sys.argv)

win = QMainWindow()

win.setWindowTitle("界面背景图片设置")

palette = QPalette()

palette.setBrush(QPalette.Background, QBrush(QPixmap("./images/python.jpg")))

win.setPalette(palette)

# todo 1 当背景图片的宽度和高度大于窗口的宽度和高度时

win.resize(460, 255 )

#

# # todo 2 当背景图片的宽度和高度小于窗口的宽度和高度时

# win.resize(800, 600)

win.show()

sys.exit(app.exec_())

当背景图片的宽度高度大于窗口的宽度高度时,背景图片会平铺整个背景

当背景图片宽度高度小于窗口的宽度高度时,则会加载多个背景图片

核心代码如下

win.setWindowTitle("界面背景图片设置")

palette = QPalette()

palette.setBrush(QPalette.Background, QBrush(QPixmap("./images/python.jpg")))

win.setPalette(palette)

# todo 1 当背景图片的宽度和高度大于窗口的宽度和高度时

win.resize(460, 255 )

#

# # todo 2 当背景图片的宽度和高度小于窗口的宽度和高度时

# win.resize(800, 600)

PaintEvent设置窗口背景

import sys

from PyQt5.QtWidgets import QApplication, QWidget

from PyQt5.QtGui import QPainter,QPixmap

from PyQt5.QtCore import Qt

class Winform(QWidget):

def __init__(self, parent=None):

super(Winform, self).__init__(parent)

self.setWindowTitle("paintEvent设置背景颜色")

def paintEvent(self, event):

painter = QPainter(self)

#todo 1 设置背景颜色

painter.setBrush(Qt.green)

painter.drawRect(self.rect())

# #todo 2 设置背景图片,平铺到整个窗口,随着窗口改变而改变

# pixmap = QPixmap("./images/screen1.jpg")

# painter.drawPixmap(self.rect(), pixmap)

if __name__ == "__main__":

app = QApplication(sys.argv)

form = Winform()

form.show()

sys.exit(app.exec_())

核心代码:使用paintEvent设置窗口的背景色

class Winform(QWidget):

def __init__(self, parent=None):

super(Winform, self).__init__(parent)

self.setWindowTitle("paintEvent设置背景颜色")

def paintEvent(self, event):

painter = QPainter(self)

#todo 1 设置背景颜色

painter.setBrush(Qt.green)

painter.drawRect(self.rect())

效果如图

核心代码:设置窗口背景图片

# #todo 2 设置背景图片,平铺到整个窗口,随着窗口改变而改变

pixmap = QPixmap("./images/screen1.jpg")

painter.drawPixmap(self.rect(), pixmap)

QWidget类中比较重要的绘图函数如表所示

函数

描述

setMask(self,QBitmap)setMask(self,QRegion)

setMask()的作用是为调用它的控件增加一个遮罩,遮住所选区域以外的部分,使之看起来是透明的,它的参数可以为QBitmap或QRegion对象,此处调用QPixmap的mask()函数获得图片自身的遮罩,是一个QBitmap对象,在实例中使用的是PNG格式的图片,它的透明部分就是一个遮罩

paintEvent(self,QPaintEvent)

通过重载paintEvent()函数绘制窗口背景

不规则窗口实例 1

实现不规则窗口的最简单方式就是图片素材不仅当遮罩层,还当背景图片,通过重载paintEvent()函数绘制窗口背景

import sys

from PyQt5.QtWidgets import QApplication,QWidget

from PyQt5.QtGui import QPixmap,QPainter,QBitmap

class MyForm(QWidget):

def __init__(self,parent=None):

super(MyForm, self).__init__(parent)

#设置标题与初始窗口大小

self.setWindowTitle('不规则窗口的实现例子')

self.resize(560,390)

def paintEvent(self, QPaintEvent):

painter=QPainter(self)

#在指定位置绘制图片

painter.drawPixmap(0,0,280,390,QPixmap(r'./images/dog.jpg'))

painter.drawPixmap(280,0,280,390,QBitmap(r'./images/dog.jpg'))

if __name__ == '__main__':

app=QApplication(sys.argv)

form=MyForm()

form.show()

sys.exit(app.exec_())

运行效果如下

不规则窗口实例 2

使用两张图片,一张用来做遮罩来控制窗口的大小,然后在利用paintEvent()函数重绘另一张为窗口的背景图。

import sys

from PyQt5.QtWidgets import QApplication,QWidget

from PyQt5.QtGui import QPixmap,QPainter,QBitmap

class MyForm(QWidget):

def __init__(self,parent=None):

super(MyForm, self).__init__(parent)

#设置标题与初始窗口大小

self.setWindowTitle('不规则窗口的实现例子')

self.pix=QBitmap('./images/mask.png')

self.resize(self.pix.size())

self.setMask(self.pix)

def paintEvent(self, QPaintEvent):

painter=QPainter(self)

#在指定位置绘制图片

painter.drawPixmap(0,0,self.pix.width(),self.pix.height(),QPixmap(r'./images/screen1.jpg'))

if __name__ == '__main__':

app=QApplication(sys.argv)

form=MyForm()

form.show()

sys.exit(app.exec_())

运行效果如下

可以拖动的不规则窗口实例

第二个窗口的实例是不可以拖动的,这里实现可以拖动的功能

import sys

from PyQt5.QtWidgets import QApplication, QWidget

from PyQt5.QtGui import QPixmap, QPainter, QCursor, QBitmap

from PyQt5.QtCore import Qt

class ShapeWidget(QWidget):

def __init__(self, parent=None):

super(ShapeWidget, self).__init__(parent)

self.setWindowTitle("不规则的,可以拖动的窗体实现例子")

self.mypix()

# 显示不规则 pix

def mypix(self):

#获得图片自身的遮罩

self.pix = QBitmap("./images/mask.png")

#将获得的图片的大小作为窗口的大小

self.resize(self.pix.size())

#增加一个遮罩

self.setMask(self.pix)

#print(self.pix.size())

self.dragPosition = None

# 重定义鼠标按下响应函数mousePressEvent(QMouseEvent)

# 鼠标移动响应函数mouseMoveEvent(QMouseEvent),使不规则窗体能响应鼠标事件,随意拖动。

def mousePressEvent(self, event):

#鼠标左键按下

if event.button() == Qt.LeftButton:

self.m_drag = True

self.m_DragPosition = event.globalPos() - self.pos()

event.accept()

self.setCursor(QCursor(Qt.OpenHandCursor))

if event.button() == Qt.RightButton:

self.close()

def mouseMoveEvent(self, QMouseEvent):

if Qt.LeftButton and self.m_drag:

# 当左键移动窗体修改偏移值

self.move(QMouseEvent.globalPos() - self.m_DragPosition)

QMouseEvent.accept()

def mouseReleaseEvent(self, QMouseEvent):

self.m_drag = False

self.setCursor(QCursor(Qt.ArrowCursor))

# 一般 paintEvent 在窗体首次绘制加载, 要重新加载paintEvent

# 需要重新加载窗口使用 self.update() or self.repaint()

def paintEvent(self, event):

painter = QPainter(self)

#在指定位置绘制图片

painter.drawPixmap(0, 0, self.width(), self.height(), QPixmap("./images/boy.png"))

if __name__ == '__main__':

app = QApplication(sys.argv)

form = ShapeWidget()

form.show()

app.exec_()

运行效果如下

本文主要介绍了python GUI库PyQt5窗口背景与不规则窗口实例,大家可以参考下,更多关于这方面的文章大家可以点击下面的相关链接

时间: 2020-02-25

python制作窗口界面_python GUI库图形界面开发之PyQt5窗口背景与不规则窗口实例相关推荐

  1. qpython3可视图形界面_python GUI库图形界面开发之PyQt5窗口控件QWidget详细使用方法...

    QWidget基本介绍 基础窗口控件QWidget类是所有用户界面对象的基类,所有的窗口或者控件都直接或者间接的继承自QWidget类. 窗口坐标系统 PyQt使用统一的坐标系统来定位窗口控件的位置和 ...

  2. python选项卡控件_python GUI库图形界面开发之PyQt5选项卡控件QTabWidget详细使用方法与...

    PyQt5选项卡控件QTabWidget简介 QTabWidget控件提供了一个选项卡和一个页面区域,默认显示第一个选项卡的页面,通过单击各选项卡可以查看对应的界面,如果在一个窗口中显示的输入字段很多 ...

  3. python表格控件_python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例...

    PyQt5表格控件QTableView简介 在通常情况下,一个应用需要和一批数据进行交互,然后以表格的形式输出这些信息,这时就需要用到QTableView类了,在QTableView中可以使用自定义的 ...

  4. python输出文本框_python GUI库图形界面开发之PyQt5多行文本框控件QTextEdit详细使用方...

    PyQt5多行文本框控件QTextEdit简介 QTextEdit类是一个多行文本框控件,可以显示多行文本内容,当文本内容超出控件显示范围时,可以显示水平个垂直滚动条,Qtextedit不仅可以用来显 ...

  5. python 动态调整控件大小_python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例...

    PyQt5动态(可拖动控件大小)布局控件QSplitter简介 PyQt还提供了特殊的布局管理器QSplitter.它可以动态地拖动子控件之间的边界,算是一个动态的布局管理器,QSplitter允许用 ...

  6. python menu实例_python GUI库图形界面开发之PyQt5菜单栏控件QMenuBar的详细使用方法与实例...

    PyQt5菜单栏控件QMenuBar介绍 QMenuBar在QMainWindow对象的标题栏下方,水平的QMenuBar被保留显示QMenu对象 QMenuBar类提供了一个可以包含一个或多个QAc ...

  7. pythongui项目实例_python GUI库图形界面开发之PyQt5状态栏控件QStatusBar详细使用方法实例...

    PyQt5状态栏控件QStatusBar简介 MainWindow对象在底部保留有一个水平条,作为状态栏(QstatusBar),用于显示永久或临时的状态信息 QStatusBar类中的常用方法 方法 ...

  8. python嵌套html开发gui_python GUI库图形界面开发之PyQt5表单布局控件QFormLayout详细使用方法与实例...

    PyQt5布局控件QFormLayout简介 QFormLayout是label-field式的表单布局,顾明思议,就是实现表单方式的布局,表单是提示用户进行交互的一种模式,主要有两列组成,第一列用于 ...

  9. python界面编程实例_python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例...

    在默认情况下,我们使用PyQt5创建出来的窗口和部件都是默认的样式,虽然谈不上很丑,但是也毫无美感可言.其实,在PyQt5中,我们可以有较高的自由度来自定义窗口和各种小部件的样式,通过自定义这些样式, ...

最新文章

  1. HashTable 使用例子
  2. 在Entity Framework 4.0中使用 Repository 和 Unit of Work 模式
  3. 牛客 奇怪的排序问题(单调栈/遍历)
  4. 探索比特币源码8-哈希2
  5. deb 中标麒麟_「图」百度网盘Linux版放出deb包客户端:新增支持Ubuntu 18.04 LTS
  6. mac预装的php路径,Mac使用系统自带php和Apache
  7. JS 数字,金额用逗号隔开
  8. CentOS7的安装和配置
  9. Qt实现 QQ好友列表QToolBox
  10. ZYF loves set (lca+转化)
  11. 现在dns怎么解析域名呢?dns的形式有哪些?
  12. python微信加人_Python 基于wxpy库实现微信添加好友功能(简洁)
  13. 他冒充“少年班校友”被中科大锤爆:本硕博学历全造假!但瓜还不止于此
  14. 全能终端神器mobaxterm入坑指南
  15. X书Scheme跳转到指定页面
  16. (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  17. Android 学习之垂直切换的圆角 Banner 和垂直指示器
  18. 中国1-甲基环丙烯市场现状研究分析与发展前景预测报告(2022)
  19. 构筑全云端数字生态,看游戏工业如何持续进化
  20. logstash grok解析

热门文章

  1. Android之使用Intent跳转到一个网页
  2. 苹果系统中国日历服务器,AppleMac苹果电脑最好用的中国农历日历(TinyCal)v1.11.0
  3. synchronized原理_Java并发编程—synchronized保证线程安全的原理分析
  4. mysql统计姓名为小明_Mysql 统计查询相同字段只统计一条
  5. 计算机网络基本操作命令的使用,计算机网络-路由器基本命令操作实验指导书--华为...
  6. geoserver rest 导入shape文件错误
  7. 巧用 PHP 数组函数 1
  8. ffmpeg合并音频(转)
  9. angular.copy() 取消angular的数据双向绑定
  10. Linux系统管理第1天