问题引出

假如我要实现以下GUI,包含一个主窗口,主窗口内又包含1个绘图类控件(QPainter中的QdrawText)和1个 单行文本框控件(QLineEdit)。

期望效果图

开始实现的代码为:

from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *class builtPaintWidget(QWidget):def __init__(self, parent=None):super(builtPaintWidget, self).__init__(parent)self.text = '我是绘制出来的字'def paintEvent(self, event):painter = QPainter()painter.begin(self)# 自定义绘制方法self.drawText(event, painter)painter.end()def drawText(self, event, qp):# 设置画笔的颜色qp.setPen(QColor(168, 34, 3))# 设置字体qp.setFont(QFont('TypeLand 康熙字典體試用版', 20))# 绘制文字qp.drawText(event.rect(), Qt.AlignCenter, self.text)class Dialog(QWidget):def __init__(self, parent=None):super(Dialog, self).__init__(parent)wigglyWidget = builtPaintWidget()lineEdit = QLineEdit()lineEdit.setText("Hello world!")layout = QVBoxLayout()layout.addWidget(wigglyWidget)layout.addStretch()layout.addWidget(lineEdit)self.setLayout(layout)self.setWindowTitle("主窗口=绘图类控件+单行文本框控件")self.resize(360, 145)if __name__ == '__main__':import sysapp = QApplication(sys.argv)dialog = Dialog()dialog.show()sys.exit(app.exec_())

然后发现初始的效果图是这样的:

错误的效果图

您会发现需要画板绘制的“我是绘制出来的字”几个字不显示,这是什么原因呢??

原因分析

经过反复查找问题,终于发现罪魁祸首乃这一句代码:

layout.addStretch()

原因见:《python pyqt QPainter widgets don't show up in layout-stack overflow》,也就是:“When you use addStrech() the layouts will use sizeHint() as the size, since the size is not set so it is not visible, the solution is to set that property.”

解决方案

方案一:就是直接粗暴地将addStrech()语句删除,后果就是布局排布不好看。

方案二:就是保留addStrech()语句,需要在class builtPaintWidget(QWidget) 的初始化代码中增加:

self.setMinimumSize(100, 100)

为:

class builtPaintWidget(QWidget):def __init__(self, parent=None):super(builtPaintWidget, self).__init__(parent)self.text = '我是绘制出来的字'self.setMinimumSize(100, 100)##################def paintEvent(self, event):painter = QPainter()painter.begin(self)# 自定义绘制方法self.drawText(event, painter)painter.end()def drawText(self, event, qp):# 设置画笔的颜色qp.setPen(QColor(168, 34, 3))# 设置字体qp.setFont(QFont('TypeLand 康熙字典體試用版', 20))# 绘制文字qp.drawText(event.rect(), Qt.AlignCenter, self.text)

效果图如下:

期望效果图

在主窗口中增加绘图类控件时(以QPainter为例)时不显示内容的问题(不应该加addStretch)相关推荐

  1. 从零开始学Pyqt5之【控件介绍】(15):绘图类控件QPainter、QPen、QBrush、QPixMap

    从零开始学Pyqt5之[控件介绍](15):绘图类控件QPainter.QPen.QBrush.QPixMap QPainter控件 QPainter控件的作用 QPainter控件常用方法 QPai ...

  2. [iOS] 在UIToolBar中增加UILabel等控件(xib/storyboard图形界面方式)

    作者:zyl910 在iOS开发时,有时候需要在UIToolBar中增加UILabel等控件.见过很多资料是以代码方式完成此功能,不易维护.于是我进行了一番摸索,找到了xib/storyboard图形 ...

  3. pyqt5讲解5:窗口绘图类控件QPainter,QPen,QBrush,QPixmap

    1.QPainter 常用方法 方法 描述 begin() 开始在目标设备上绘制 drawArc() 在起始角度和最终角度之间画弧 drawEliipse() 在一个矩形内画一个椭圆 drawLine ...

  4. Android开发笔记(三十六)展示类控件

    View/ViewGroup View是单个视图,所有的控件类都是从它派生出来:而ViewGroup是个视图组织,所有的布局视图类都是从它派生出来.由于View和ViewGroup是基类,因此很少会直 ...

  5. 在Delphi程序中应用IE浏览器控件

    ---- 大概大家还记得Delphi的范例程序中的那个浏览器的例子吧.在那个例子中,利用控件THttp的属性和方法制作了一个浏览器.该例子用于理解THttp控件的使用方法,确实不错.但很少有人会用它作 ...

  6. 在MFC对话框中快速集成三维控件

    在MFC的对话框中可以方便的集成AnyCAD三维控件(c++版本),遵循一下几步: 1.在对话框资源中增加一个Static控件,ID为IDC_STATIC_3D,并且把它的Notify属性设置为Tru ...

  7. Powerbuilder中Kodak图像扫描控件应用技巧

    Powerbuilder中Kodak图像扫描控件应用技巧 作者:佚名   减小字体 增大字体 摘  要 Powerbuilder中对Kodak图像扫描控件应用的技巧,主要是对扫描出来的图像进行文件头修 ...

  8. qt获取窗口的右上角位置_如何获得 Qt窗口部件在主窗口中的位置--确定鼠标是否在某一控件上与在控件上的位置...

    用Qt Creator 设计程序时,最方便的就是ui设计器,可以很容易的得到想要的布局. 但是这样自动布局带来的后果是很难知道窗口中某一部件在主窗口中的相对位置. 在处理子窗口鼠标事件时变的很麻烦.主 ...

  9. 在Visual C++中常用到得一些绘图或者控件的语句(mfc)

     为快速开发学mfc,推荐看吕鑫的教学视频,因为这个比较清楚百度搜索 吕鑫mfc就可以了!  这个就挺好:http://www.tudou.com/programs/view/sirRzIM0gj0 ...

最新文章

  1. MySQL 为什么表的数据删除一般,表文件大小不变?
  2. ostream作为函数返回值_Go语言入门必知教程-函数
  3. Mina框架项目运用
  4. 面试题01(C++)
  5. 指令集及流水线基本概念
  6. 服务实体经济、战略级行业再下一城,钉钉发布制造行业解决方案2.0
  7. 苹果11是高通基带吗_最强对抗!小米11对抗三星、苹果华为等最高旗舰|喜欢小米吗?...
  8. tp5 使用PHPAnalysis提取关键字中文分词
  9. 关于TikTok的变现思考和三种玩法
  10. AR9285 bt3无线网卡驱动
  11. 了解单片机解密的一些知识
  12. 番外9福冈·狂野老司机告诉你如果装AI·1· ——混合现实科幻《地与光》
  13. PS 复制图层使用
  14. 高手进阶,终极内存技术指南——完整/进阶版 I(转)
  15. 弘辽科技:拼多多懵懂商家不知道的直通车操作
  16. 每天坚持收小钱,能改命!
  17. 王者荣耀有史以来被削废的英雄盘点:还记得那个超级兵吗?
  18. 前端岗位一般的任职要求
  19. MobaXterm 详细安装使用教程 官网
  20. notion函数_【notion】关于进度管理-时间函数的一点小心得

热门文章

  1. 互联网广告之功能讲解
  2. 系统集成项目管理工程师和信息系统管理工作师哪个好考一些
  3. 万字长文详述对话推荐系统的逻辑与演化
  4. ORACLE锁表如何批量解锁?如何查找锁表原因?
  5. 如何拿到对象数组中的某一对象的元素(JS的filter方法)
  6. php实现生成word表格,TP5利用phpforword生成word表格文档
  7. padavan 小米路由器无线桥接
  8. Ettus USRP上位机配置与开发杂谈
  9. HTML img图片加载失败时用默认图片替换
  10. 5个简单小技巧为16G的iPhone“扩容”