PyQt的代码之道

  1. addwidget()方法用于向布局中添加控件;
    addLayout()方法用于向布局中添加子布局;

  2. QSplitter需要添加到QBoxLayout中进行配合使用,两者的布局方向要保持一致。
    hbox.addWidget(splitter1)

  3. QFrame, QSplitter与QBoxLayout之间的相互关系:来自https://www.cnblogs.com/lipx9527/p/14020423.html,总结得很好。
    可使用QSplitter进行动态布局,通过拉动网格线改变大小;
    QHBoxLayout或者QVBoxLayout装小部件,使用addWidget()方法;
    QHBoxLayout和QVBoxLayout相互装,使用addLayout()方法;
    QFrame装QHBoxLayout或者QVBoxLayout,使用setLayout()方法,1个QFrame只能装1个QHBoxLayout或QVBoxLayout,装多个,则第一个有效;
    QSplitter装QFrame,使用addWidget()方法;
    QHBoxLayout或者QVBoxLayout装QSplitter,使用addWidget()方法;
    主窗口self只支持.setLayout()方法,参数不能是QSplitter对象;

  4. 6种弹出对话框的使用参考:
    https://blog.csdn.net/maidu_xbd/article/details/85696510

  5. QPlainTextEdit使用参考:
    https://www.cnblogs.com/zach0812/p/11381938.html
    https://doc.qt.io/archives/qtforpython-5.12/PySide2/QtWidgets/QPlainTextEdit.html

  6. QT中LineEdit TextEdit PlainTextEdit 这三个控件有什么区别?
    QLineEdit是单行文本输入,一般用于用户名、密码等少量文本交互地方。
    QTextEdit用于多行文本,也可以显示HTML格式文本。
    QPlainTextEdit与QTextEdit很像,但它多用于需要与文本进行处理的地方,而QTextEdit多用于显示,可以说,QPlainTextEdit对于plain text处理能力比QTextEdit强。

  7. 基本控件
    在这里插入图片描述

  8. QTreeView 与 QTreeWidget 使用参考:
    https://my.oschina.net/asjoker/blog/864868
    https://blog.csdn.net/lly1122334/article/details/103040110

  9. Model和View
    https://zhuanlan.zhihu.com/p/165649839

  10. print标准输出sys.stdout以及stderr重定向QTextBrowser等图形界面对象:
    https://blog.csdn.net/LaoYuanPython/article/details/105317746

  11. 获取点击的按钮名称:
    self.sender().objectName()
    或者为槽函数传递参数:https://www.jianshu.com/p/7f436ad87e6f

  12. QSetting用法:
    https://zhuanlan.zhihu.com/p/108128557

    Qseting的其余常见用法:
    
    Qsettings.allKeys(self)  返回所有的key,以list的形式
    Qsettings.applicationName(self) 返回应用程序名称
    Qsettings.clear(self)  清楚此settings里的内容
    Bool Qsettings.contains(self,key) 返回真,如果存在名为key的key
    Qsettings.remove(self, keyname) 清楚key及其所对应的value
    Qsetting.fileName()  返回写入注册表地址,或者INI文件路径
    
  13. 动态添加控件:
    https://blog.csdn.net/sandorn/article/details/92842847
    动态删除控件:https://stackoverflow.com/questions/5899826/pyqt-how-to-remove-a-widget
    在这里插入图片描述

  14. 常用对话框以及自定义弹出对话框:
    https://blog.51cto.com/xvjunjie/2148152
    https://www.cnblogs.com/jsben/p/4909900.html
    https://blog.csdn.net/qq_39315153/article/details/88241517

  15. 关于布局的一些Trick:

    • 在已经添加了layout的情况下,如何让一个控件居中? 答:给这个控件添加一个布局,即可让控件居中,水平layout可以让控件自动水平居中。
    • qt designer中如何给单个控件添加布局?答:首先将layout拖到界面中,然后选中该layout,选中后该layout就会在右侧对象查看器中出现,最后将控件拖到对象查看器中的layout中即可。
      在这里插入图片描述
    • 控制不同layout的对齐。在已经添加了layout后,如果发现有不对齐的情况,可以调整layout的上下左右margin来调整。
      在这里插入图片描述
  16. layout的一些经验:

    • 先不使用任何layout,把所有控件给按位置摆放;
    • 然后先从最内层开始进行控件的layout设定,逐步扩展到外层的;
    • 最后调整layout中控件的大小比例,优先使用layout中的layoutStrentch属性(与上述调整margin在同一位置)来控制。如下图,在一行中有几个控件就会有几个值,分别代表各自的大小比例。值得一提的是,如果这样的调整还是无法满足需求,可以添加一个Spacers进行辅助调节。
      在这里插入图片描述
  17. 调整控件的大小和位置

    • QWidget有一个sizePolicy的属性。
      在这里插入图片描述
      Mininum: 最小,但是受layout的影响,例如某个button在单独一行的layout里,尽管选的是Mininum,还是会独占一行;
      Fixed: 面对上面的问题,可以将策略选为Fixed即可保持固定大小。

      那水平伸展和垂直伸展有什么用呢?例如有下面一个水平layout中有三个控件,改变他们的水平伸展依次为2, 1, 1,那么这三个控件的水平方向长度比例就是2:1:1.
      在这里插入图片描述

    • Spacer的作用:可以在控件中间添加空隙。
      在这里插入图片描述

  18. button的objectName和按钮名称的区别:按钮的名字是会显示在按钮上的字符串,是通过button.setText()进行设置的;也就可以通过button.text()获取;而objectName是一个控件的名称,是给控件起的名字,通过widget.setObjectName()进行设置,通过widget.objectName()获取。

  19. 在按钮上右键弹出菜单:https://blog.csdn.net/jiuzuidongpo/article/details/46507403

  20. 由于焦点的原因,文本框的placeholder可能无法显示的问题:https://stackoverflow.com/questions/24274318/placeholder-text-not-showing-pyside-pyqt
    在这里插入图片描述

  21. qss格式:https://stackoverflow.com/questions/25139616/how-to-set-a-different-background-color-to-a-disabled-button-with-qss
    有个老哥提出了这个问题:
    在这里插入图片描述
    上面这个写法为什么错误?
    在这里插入图片描述
    答案就是:QPushButton和disabled之间不能加空格!

  22. 自定义标题栏:
    https://blog.csdn.net/GrayOnDream/article/details/84932839
    https://blog.csdn.net/qq_37386287/article/details/87900403
    自定义标题栏的思路其实就是将原来的标题窗口通过self.setWindowFlags(Qt.FramelessWindowHint)进行隐藏,然后新建一个控件,将自定义的标题栏和原来的centralwidget作为新控件的一个组成,最后将新控件设置为mainWindow的centralwidget即可。

  23. QLayout::setContentsMargins(int left, int top, int right, int bottom), 4个参数顺序是左上右下。设置左侧、顶部、右侧和底部边距,以便在布局周围使用。
    在这里插入图片描述
    margin(边距)落在border(边框)外。
    border(边框)在margin(边距)和padding(填充)之间。
    padding填充落在border(边框)内, 在border(边框)和实际contents(内容)之间。
    content(内容)是我们删除 margin, border, padding后从原始窗口小部件或子控件中留下的内容。
    参考:https://zhuanlan.zhihu.com/p/47221211

  24. 以RadioButton为例说明qss中可以设置的属性。https://blog.csdn.net/aiwangtingyun/article/details/94626464

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值